Javascript React Context vs React Redux,我应该在什么时候使用它们?

Javascript React Context vs React Redux,我应该在什么时候使用它们?,javascript,reactjs,redux,react-redux,react-context,Javascript,Reactjs,Redux,React Redux,React Context,API不再是一种实验性的特性。丹·阿布拉莫夫(Redux的创作者)对此写了一篇很好的评论,但两年后,上下文仍然是一个实验性的特征 我的问题是,,根据您的意见/经验,我什么时候应该在React-Redux上使用React-Context而不是React-Redux,反之亦然?因为Context不再是一个实验性的特性,您可以直接在应用程序中使用Context,这对于将数据传递给嵌套较深的组件非常有用为……而设计 正如马克·埃里克森在其著作中所写: 如果您只是使用Redux来避免传递道具,那么上下文可

API不再是一种实验性的特性。丹·阿布拉莫夫(Redux的创作者)对此写了一篇很好的评论,但两年后,上下文仍然是一个实验性的特征


我的问题是,,根据您的意见/经验,我什么时候应该在React-Redux上使用React-Context而不是React-Redux,反之亦然?

因为Context不再是一个实验性的特性,您可以直接在应用程序中使用Context,这对于将数据传递给嵌套较深的组件非常有用为……而设计

正如马克·埃里克森在其著作中所写:

如果您只是使用Redux来避免传递道具,那么上下文可能会 替换Redux-但是您可能在第一个阶段不需要Redux 地点

上下文也不会给您任何类似于
Redux DevTools
,即 能够跟踪您的状态更新,
中间件
添加集中式 应用程序逻辑和其他强大的功能,
Redux
启用

Redux
功能强大得多,提供了大量
上下文Api
没有提供的功能,正如前面提到的@danAbramov一样

React-Redux在内部使用上下文,但不会在内部公开这一事实 公共API。所以,通过React使用上下文应该会更安全 Redux比直接Redux更重要,因为如果它发生变化,更新 代码将出现在React Redux上,而不是您

它的UptoRedux实际上更新了它的实现,以符合最新的上下文API

最新的上下文API可用于只需使用Redux在组件之间传递数据的应用程序,但是使用集中数据并使用
Redux thunk
Redux saga
处理API请求的应用程序仍然需要Redux。除此之外,redux还有其他相关的库,如
redux persist
,它允许您将存储数据保存在本地存储中,并在刷新时重新水化,而这正是上下文API仍然不支持的

正如@dan_abramov在他的博客中提到的,redux有如下有用的应用程序

  • 将状态持久化到本地存储,然后从该存储启动,开箱即用
  • 在服务器上预填充状态,以HTML格式将其发送到客户端,然后从中启动,开箱即用
  • 序列化用户操作并将其与状态快照一起附加到自动错误报告中,以便产品开发人员
    可以重播它们以重现错误
  • 通过网络传递操作对象以实现协作环境,而无需对代码编写方式进行重大更改
  • 维护撤销历史记录或实现乐观突变,而不需要对代码编写方式进行重大更改
  • 在开发中的状态历史之间切换,并在代码更改时从操作历史中重新评估当前状态 洛杉矶TDD
  • 为开发工具提供全面的检查和控制功能,以便产品开发人员可以为其客户构建自定义工具
    应用程序
  • 在重用大部分业务逻辑的同时提供替代UI

对于这么多的应用程序来说,现在就说Redux将被新的上下文API取代还为时过早。如果您使用Redux只是为了避免将道具传递给深度嵌套的组件,那么您可以用
上下文API取代Redux。它正是针对这个用例的

另一方面,如果您在其他方面都使用Redux(具有可预测的状态容器,在组件之外处理应用程序的逻辑,集中应用程序的状态,使用跟踪应用程序状态更改的时间、地点、原因和方式,或使用诸如、、等插件),那么你绝对没有理由放弃Redux。
Context
API没有提供任何这方面的功能

我个人认为,Redux DevTools扩展是一个惊人的、被低估的调试工具,它本身就证明了继续使用Redux的合理性

一些参考资料:


我更喜欢使用redux和redux thunk来进行API调用(也使用Axios)并将响应分派给还原程序。它干净易懂

上下文API对于react-redux部分非常具体,它说明react组件如何连接到存储。为此,react redux很好。但是如果您愿意,因为上下文是官方支持的,您可以使用上下文API而不是react redux

因此,问题应该是上下文API与react-redux,而不是上下文API与redux。此外,这个问题有点自以为是。因为我熟悉react redux并在所有项目中使用它,所以我将继续使用它。(我没有改变的动机)

但是,如果您今天正在学习redux,并且您还没有在任何地方使用过它,那么值得尝试一下上下文API,并用您的自定义上下文API代码替换react redux。也许,那样更干净


就个人而言,这是一个熟悉度的问题。没有明确的理由选择两者,因为它们是等价的。在内部,react-redux无论如何都会使用上下文。

我使用redux的唯一原因是:

  • 您需要一个全局状态对象(出于各种原因,如可调试性、持久性…)
  • 你的应用程序已经很大了,或者将会很大,应该可以扩展到很多开发者:在这种情况下,你可能需要一个间接层次(即事件系统):你触发事件(在过去),然后你组织中不认识的人就可以听他们的
您可能不需要整个应用程序的间接寻址级别,因此可以混合使用样式并使用本地状态/上下文和