我的问题与使react-hooks成为可能的 Javascript 机制有关。
React 最近的开发允许我们创建钩子,即。对于 React 状态,在简单的函数中,如:
function App () {
const [someVar, setSomeVar] = useState('someVarDefaultValue');
return (
<div
onClick={() => setSomeVar('newValue')}>{someVar}
</div>
);
}
钩子useState
返回一个带有访问器和修改器的数组,我们在 App 函数中通过数组分解来使用它们。
所以在引擎盖下,钩子看起来像(只是一个伪代码):
function useState(defaultValue) {
let value = defaultValue;
function setValue(val) {
value = val;
}
return [value, setValue];
}
当您在 JS 中尝试这种方法时,它不起作用 - 如果您在setValue
某处使用,从数组分解的值将不会更新。即使您将value
用作对象,而不是原始defaultValue
。
我的问题是钩子机制在 JS 中是如何工作的?
从我在 React源代码中看到的内容来看,它使用了 reducer 函数和 Flow 类型检查。代码很难让我理解大局。
这个问题不是关于如何在 React 中编写自定义钩子。
在这个问题中回答的 React 状态管理上下文中钩子如何在幕后工作也不是问题:React Hooks - What’s under the hood?