React 16.3.0 was released和ContextAPI不再是试验性特性.丹·阿布拉莫夫(Redux的创建者)对此写了一个很好的 comments here,但两年后,上下文仍然是一个实验性的特征.
我的问题是,根据你的意见/经验,我什么时候应该使用React Context比React Redux,反之亦然?
React 16.3.0 was released和ContextAPI不再是试验性特性.丹·阿布拉莫夫(Redux的创建者)对此写了一个很好的 comments here,但两年后,上下文仍然是一个实验性的特征.
我的问题是,根据你的意见/经验,我什么时候应该使用React Context比React Redux,反之亦然?
因为Context不再是一个试验性的特性,您可以在应用程序中直接使用上下文,它将非常适合将数据传递给深度嵌套的组件,而这正是它设计的目的.
正如马克·埃里克森(Mark Erikson)在他的blog篇文章中所写:
如果您使用Redux只是为了避免传递props ,上下文可能会 更换Redux-但之后您可能在开始时不需要Redux 地点.
上下文也不会给你任何东西,比如
Redux DevTools
正如@danAbramov所提到的,Redux
的功能要强大得多,并且提供了Context API
所不提供的大量功能
React Redux在内部使用上下文,但它不会在内部公开这一事实
Redux需要实际更新其实现以符合最新的上下文API.
最新的上下文API可用于只需使用Redux在组件之间传递数据的应用程序,但是使用集中数据并使用redux-thunk
或redux-saga
处理API请求的应用程序仍然需要Redux.除此之外,Redux还有其他与之相关的库,比如redux-persist
,它允许您在localStorage中保存/存储数据,并在刷新时重新水化,这是上下文API仍然不支持的.
正如@Dan_Abramov在他的博客You might not need Redux中提到的那样,Redux有一些有用的应用程序,比如
- 将状态持久化到本地存储,然后从该存储启动,开箱即用.
- 在服务器上预填充状态,以HTML格式将其发送到客户端,然后从中启动,开箱即用.
- Serialize user actions and attach them, together with a state snapshot, to automated bug reports, so that the product developers
can replay them to reproduce the errors.- 通过网络传递action对象以实现协作环境,而无需对代码编写方式进行重大更改.
- 维护undo撤消历史记录或实现乐观Mutations ,而不会对代码的编写方式进行重大更改.
- 在发展中的国家历史之间旅行,并重新判断>;代码更改时动作历史记录中的当前状态,ala TDD.
- 为开发工具提供全面的判断和控制功能,以便产品开发人员可以为其应用程序构建自定义工具.
- 在重用大部分业务逻辑的同时提供替代UI.
有了这么多应用程序,现在就说Redux将被新的Context API取代还为时过早.