Javascript 上下文API和Redux之间的区别

Javascript 上下文API和Redux之间的区别,javascript,reactjs,Javascript,Reactjs,我试图找出React上下文API和Redux之间的区别。 博客说他们之间的区别如下。 上下文API在每次更新状态时都会提示重新渲染,并重新渲染所有组件,而不管这些组件如何。 但是,Redux仅重新呈现更新的组件。 我已经构建了测试项目,并且发现上下文API只重新呈现从使用者内部呈现的组件。 但我不明白。 我认为他们的原则是一样的,我在代码中找不到区别。 我想知道为什么上下文API从理论上重新呈现组件。这是因为状态是如何封装的。在react-redux中,状态被封装在存储中。当您在react re

我试图找出React上下文API和Redux之间的区别。 博客说他们之间的区别如下。 上下文API在每次更新状态时都会提示重新渲染,并重新渲染所有组件,而不管这些组件如何。 但是,Redux仅重新呈现更新的组件。 我已经构建了测试项目,并且发现上下文API只重新呈现从使用者内部呈现的组件。 但我不明白。 我认为他们的原则是一样的,我在代码中找不到区别。
我想知道为什么上下文API从理论上重新呈现组件。

这是因为状态是如何封装的。在
react-redux
中,状态被封装在
存储
中。当您在
react reedux
中将存储传递给
Provider
时-您使用的是上下文API(请参阅),但这里有一个关键点-redux上下文永远不会更改(在99%的实现中)。因此,Redux上下文的使用者永远不会像常规
上下文
使用者那样重新呈现(因为上下文提供的值永远不会更改)

那么redux是如何导致react组件重新渲染的呢

组件订阅通过Redux上下文交付的存储,它(让我们只讨论
useSelector
hook-connect HOC的工作原理是一样的)设置了它自己的
state
变量。当redux存储的状态更新时(操作、调度,您知道),存储将调用具有新状态的所有订户。如果订阅的值(或从状态中选择的值)与上一个值相同,则redux不会更新hook或HOC中的状态变量-签出并查找
forceRender

这与上下文API不同,因为上下文API(在大多数典型用例中)的数据源是提供者(或上面的道具)中的状态变量。无论何时给定给上下文的值发生更改,使用者都会重新呈现。这与
react-redux
的工作方式有着本质的不同,因为如上所述,赋予
react-redux
context的值永远不会改变(这是存储,记得吗?)

tldr
react redux
中,redux提供程序提供的上下文是
存储
永不更改。在典型的非redux上下文API用例中,上下文本身提供的值会发生变化

这可能会很混乱,问很多问题来帮助我改进我的答案

编辑:您对
useDispatch
进行了评论,但没有导致重新渲染。这是因为:

只要将同一个store>实例传递给调度函数,调度函数引用就会保持稳定


i、 e.
useDispatch
永不改变(只要商店不改变,99%的时候不会改变,因为鼓励人们使用一个不改变的商店设计应用)

这是因为状态是如何封装的。在
react-redux
中,状态被封装在
存储
中。当您在
react reedux
中将存储传递给
Provider
时-您使用的是上下文API(请参阅),但这里有一个关键点-redux上下文永远不会更改(在99%的实现中)。因此,Redux上下文的使用者永远不会像常规
上下文
使用者那样重新呈现(因为上下文提供的值永远不会更改)

那么redux是如何导致react组件重新渲染的呢

组件订阅通过Redux上下文交付的存储,它(让我们只讨论
useSelector
hook-connect HOC的工作原理是一样的)设置了它自己的
state
变量。当redux存储的状态更新时(操作、调度,您知道),存储将调用具有新状态的所有订户。如果订阅的值(或从状态中选择的值)与上一个值相同,则redux不会更新hook或HOC中的状态变量-签出并查找
forceRender

这与上下文API不同,因为上下文API(在大多数典型用例中)的数据源是提供者(或上面的道具)中的状态变量。无论何时给定给上下文的值发生更改,使用者都会重新呈现。这与
react-redux
的工作方式有着本质的不同,因为如上所述,赋予
react-redux
context的值永远不会改变(这是存储,记得吗?)

tldr
react redux
中,redux提供程序提供的上下文是
存储
永不更改。在典型的非redux上下文API用例中,上下文本身提供的值会发生变化

这可能会很混乱,问很多问题来帮助我改进我的答案

编辑:您对
useDispatch
进行了评论,但没有导致重新渲染。这是因为:

只要将同一个store>实例传递给调度函数,调度函数引用就会保持稳定


i、 e.
useDispatch
永不改变(只要商店不改变,99%的时间不会改变,因为鼓励人们使用一个不改变的商店设计应用程序)

你是在问理论上的差异(原则之间)还是实际上的差异(实现之间)?“我找不到代码中的差异”-您特别看了哪些代码?你能给我们看一下你写的代码,或者链接你看到的库源代码吗?是的,正如我已经说过的,我在代码中找不到redux和context api之间的区别。Redux仅重新渲染组件t