我的问题涉及使 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中的hook机制是如何工作的?
从我在 React 中看到的源代码 https://github.com/facebook/react/blob/c2a2d8a539bf02e40c43d36adc2826e228f30955/packages/react-dom/src/server/ReactPartialRendererHooks.js#L165它使用减速器功能和 Flow 的类型检查。对于我来说,要理解大局,要遵循该代码是很棘手的。
这个问题不是关于如何在 React 中编写自定义钩子 https://reactjs.org/docs/hooks-custom.html.
在这个问题中回答的 React 状态管理上下文中,钩子如何在后台工作也不是问题:React Hooks - 幕后发生了什么? https://stackoverflow.com/questions/53729917/react-hooks-whats-happening-under-the-hood