React 16.3.0 was releasedContextAPI不再是试验性特性.丹·阿布拉莫夫(Redux的创建者)对此写了一个很好的 comments here,但两年后,上下文仍然是一个实验性的特征.

我的问题是,根据你的意见/经验,我什么时候应该使用React ContextReact Redux,反之亦然?

推荐答案

因为Context不再是一个试验性的特性,您可以在应用程序中直接使用上下文,它将非常适合将数据传递给深度嵌套的组件,而这正是它设计的目的.

正如马克·埃里克森(Mark Erikson)在他的blog篇文章中所写:

如果您使用Redux只是为了避免传递props ,上下文可能会 更换Redux-但之后您可能在开始时不需要Redux 地点.

上下文也不会给你任何东西,比如Redux DevTools

正如@danAbramov所提到的,Redux的功能要强大得多,并且提供了Context API所不提供的大量功能

React Redux在内部使用上下文,但它不会在内部公开这一事实

Redux需要实际更新其实现以符合最新的上下文API.

最新的上下文API可用于只需使用Redux在组件之间传递数据的应用程序,但是使用集中数据并使用redux-thunkredux-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取代还为时过早.

Javascript相关问答推荐

jest使用useLocate测试自定义挂钩

是什么原因导致此Angular 16应用程序中类型错误时属性结果不存在?

Vue:ref不会创建react 性属性

如何解决chrome—extension代码中的错误,它会实时覆盖google—meet的面部图像?'

InDesign—创建一个独立的窗口,在文档中进行更正时保持打开状态

我可以使用空手道用户界面来获取网页的当前滚动位置吗?

如何将多维数组插入到另一个多维数组中?

如何在Angular拖放组件中同步数组?

第三方包不需要NODE_MODULES文件夹就可以工作吗?

使用NextJS+MongoDB+Prisma ORM获取无效请求正文,无法发布错误

向数组中的对象添加键而不改变原始变量

与svg相反;S getPointAtLength(D)-我想要getLengthAtPoint(x,y)

警告框不显示包含HTML输入字段的总和

使用jQuery find()获取元素的属性

未捕获语法错误:Hello World中的令牌无效或意外

将Auth0用户对象存储在nextjs类型脚本的Reaction上下文中

如何使用抽屉屏幕及其子屏幕/组件的上下文?

使用Reaction窗体挂钩注册日历组件

有没有办法更改Chart.js 3.x.x中主要刻度的字体?

如何使用puppeteer操作所有选项