React 16.3.0 已发布,Context API 不再是实验性功能。Dan Abramov(Redux 的创建者)在这里写了一篇很好的评论,但是 Context 仍然是一个实验性功能已经 2 年了。
我的问题是,根据您的意见/经验,我应该何时使用 React Context 而不是 React Redux ,反之亦然?
由于 Context 不再是一项实验性功能,您可以直接在应用程序中使用 Context,它将非常适合将数据传递到其设计用途的深度嵌套组件。
正如 Mark Erikson 在他的博客中所写:
如果你只是使用 Redux 来避免传递 props,那么 context 可以取代 Redux - 但是你可能一开始就不需要 Redux。 上下文也没有给你任何东西Redux DevTools,比如跟踪你的状态更新的能力,middleware添加集中的应用程序逻辑,以及其他强大的功能Redux 。
如果你只是使用 Redux 来避免传递 props,那么 context 可以取代 Redux - 但是你可能一开始就不需要 Redux。
上下文也没有给你任何东西Redux DevTools,比如跟踪你的状态更新的能力,middleware添加集中的应用程序逻辑,以及其他强大的功能Redux 。
Redux DevTools
middleware
Redux
Redux功能更强大,并提供了大量的功能,Context API正如 @danAbramov 提到的那样
Context API
React Redux 在内部使用上下文,但它并没有在公共 API 中公开这一事实。所以你应该觉得通过 React Redux 使用上下文比直接使用上下文更安全,因为如果它发生变化,更新代码的负担将落在 React Redux 而不是你身上。
由 Redux 实际更新其实现以遵守最新的 Context API。
最新的 Context API 可用于应用程序,您只需使用 Redux 在组件之间传递数据,但是使用集中数据并在 Action 创建者中处理 API 请求的应用程序使用redux-thunk或redux-saga仍然需要 Redux。除此之外,Redux 还有其他与之相关的库,例如redux- persist它允许您在 localStorage 中保存/存储数据并在刷新时重新水化,这是 Context API 仍然不支持的。
redux-thunk
redux-saga
redux- persist
正如@dan_abramov 在他的博客中提到的你可能不需要 Redux,Redux 有一些有用的应用程序,比如
将状态持久化到本地存储,然后从它启动,开箱即用。 在服务器上预填充状态,以 HTML 格式将其发送到客户端,然后从它启动,开箱即用。 序列化用户操作并将它们与状态快照一起附加到自动错误报告中,以便产品开发人员 可以重放它们以重现错误。 通过网络传递动作对象以实现协作环境,而无需对代码的编写方式进行重大更改。 维护撤消历史记录或实施乐观突变,而无需对代码的编写方式进行重大更改。 在开发中的状态历史之间穿梭,并在代码更改时从动作历史中重新评估 > 当前状态,也就是 TDD。 为开发工具提供完整的检查和控制功能,以便产品开发人员可以为他们的应用程序构建自定义工具。 在重用大部分业务逻辑的同时提供替代 UI。
有了这么多应用程序,现在说 Redux 将被新的 Context API 取代还为时过早。