我正在尝试从“常规”(原生)JavaScript中更新(setState)React函数组件。
我在StackOverflow上搜索过,但所有答案都涉及从React传递数据到(原生)JavaScript,而不是相反。
让我们以docs中的示例为例。
现在假设我想要在React之外的普通JavaScript代码中手动更新计数。例如:
我在StackOverflow上搜索过,但所有答案都涉及从React传递数据到(原生)JavaScript,而不是相反。
让我们以docs中的示例为例。
import React, { useState } from 'react';
function Example() {
// Declare a new state variable, which we'll call "count"
const [count, setCount] = useState(0);
return (
<div>
<p>You clicked {count} times</p>
<button onClick={() => setCount(count + 1)}>
Click me
</button>
</div>
);
}
要在JavaScript中渲染它,我这样做:
let example = ReactDOM.render(
<Example />,
document.getElementById('example-wrapper')
);
现在假设我想要在React之外的普通JavaScript代码中手动更新计数。例如:
function updateExampleCount(newCount) {
example.setCount(newCount); // ???
}
由于setCount是函数内的私有变量,而render返回的example为null,因此无法访问组件状态。
如果使用类组件,则 render
将返回对组件的引用,然后可以调用 example.setState
。但是如果可以避免,我更喜欢不将组件转换为类。
render
的文档 say:
在提供的容器中将 React 元素呈现到 DOM 中,并返回对组件的引用(或对于无状态组件返回 null)。
但是,我的组件确实具有状态(count),只是它没有被识别。
如果无法使用 render
返回的值,是否还有其他方法来“获取”组件,然后使用 setCount(或其他设置状态的方法)?
还是我必须使用类组件?
谢谢。
updateExampleCount
函数?每页要渲染多少个Example
,只有一个吗? - Bergi