我一直在尝试使用React Hooks,它们似乎确实简化了像存储状态这样的事情。然而,它们似乎通过魔法完成了很多事情,我找不到关于它们如何工作的好文章。
第一件看起来像魔法的事情是,调用像useState()这样的函数会在每次调用它返回的setXXX方法时重新渲染您的函数组件吗?
像useEffect()这样的东西如何模拟componentDidMount,当函数式组件甚至没有能力在挂载/卸载时运行代码?
useContext()如何实际获取访问上下文的权限,甚至如何知道哪个组件在调用它?
这甚至还没有涉及所有已经出现的第三方钩子,比如useDataLoader,它允许您使用以下内容...
const { data, error, loading, retry } = useDataLoader(getData, id)
当数据、错误、加载和重试状态发生变化时,它们如何重新渲染组件?
非常抱歉,问题比较多,但我认为它们大部分可以归纳为一个问题,即:
钩子函数背后的函数实际上是如何获得调用它的函数/无状态组件的访问权限,以便在重新渲染时记住状态并使用新数据进行重新渲染?