reactjs Context API和Redux之间的区别[已关闭]

ajsxfq5m  于 2022-12-03  发布在  React
关注(0)|答案(1)|浏览(155)

已关闭。此问题需要更多focused。当前不接受答案。
**想要改进此问题吗?**更新问题,使其仅关注editing this post的一个问题。

去年关闭了。
Improve this question
我试图找出ReactContextAPI和Redux之间的区别。博客上说它们之间的区别如下。ContextAPI在每次状态更新时提示重新呈现,并且无论如何都重新呈现所有组件。然而,Redux只重新呈现更新的组件。我已经构建了测试项目,发现Context API只重新呈现从Consumer内部呈现的组件。但是我没有我不明白,我觉得它们的原理是一样的,代码上找不到区别,我想知道为什么Context API在理论上要重新渲染组件。

xytpbqjk

xytpbqjk1#

编辑:
这个答案在概念上仍然有效,但是实现细节已经发生了变化,在v7和v8之间发生了相当大的变化。github链接指向v7,但是所有的高层细节都保持不变。
这是因为状态是如何封装的。在react-redux中,状态封装在store中。当您将存储区传递给react-redux中的Provider时-您使用的是上下文API(请参见this in react-redux)但这里有个问题-redux上下文永远不会更改因此Redux上下文的Consumer永远不会像常规的context使用者那样重新呈现(因为上下文提供的值永远不会改变)。
那么redux是如何让react组件重新渲染的呢?
组件subscribe通过Redux上下文传递到存储区,它(我们只讨论useSelector挂钩-连接HOC的工作原理是一样的)设置它自己的state变量。(actions、dispatch等),则存储将使用新状态调用任何订阅者。(或从状态中选择)与先前的值相同,则redux不会更新挂接或HOC中的状态变量-检查此文件并查找forceRender
这与上下文API不同,因为上下文API的数据源(在大多数典型用例中)是Provider中的状态变量无论何时,只要赋予上下文的值发生变化,消费者就会重新呈现。这与react-redux的工作方式有着根本的不同,因为,如上所述,给react-redux上下文的值永远不会改变(还记得吗,这是存储区?)

tldrreact-redux中,redux提供程序提供的上下文是store,并且从不更改。在典型的非redux上下文API用例中,上下文本身提供的值会更改。

这可能会让人很困惑,问很多问题来帮助我改进我的答案!
编辑:您对useDispatch做了一个注解,但没有重新渲染。这是因为从文档中:
只要将相同的store〉示例传递给,分派函数引用就将是稳定的。
useDispatch永不更改(只要商店不更改,99%的情况下都不会更改,因为鼓励人们使用单一不变商店设计应用)

相关问题