React上下文与React Redux,我什么时候应该使用每个



react 16.3.0已释放,上下文API不再是实验特征。Dan Abramov(Redux的创建者(在这里对此发表了很好的评论,但这是2年的上下文仍然是一个实验特征。

我的问题是,在您的意见/经验中,我何时应该使用 react上下文 react redux and vice ,反之亦然?

AS 上下文不再是实验功能,您可以直接使用应用程序中的上下文,并且非常适合将数据传递到深嵌套的组件中是为

设计的

正如马克·埃里克森(Mark Erikson(在他的博客中写的那样:

如果您仅使用redux避免传递道具,则可以替换redux-但是您可能在第一个中不需要redux位置。

上下文也不会给您诸如Redux DevTools之类的东西,能够跟踪状态更新的能力,middleware添加集中式应用程序逻辑和其他强大功能Redux启用。

Redux功能强大得多,并且提供了Context API不提供的大量功能,此外还如 @danabramov 提及

React Redux在内部使用上下文,但并未在公共API。因此,使用上下文通过React感到更安全redux比直接的,因为如果变化,则更新的负担代码将使用React Redux,而不是您。

取决于Redux,实际上更新了其实现,以遵守最新上下文API。

最新的上下文API可用于应用程序,您只需使用redux在组件之间传递数据,但是使用集中数据并使用redux-thunkredux-saga在行动创建者中处理API请求的应用程序仍然需要Redux。除此Redux外,还有其他与之相关联的库,例如redux-persist,它允许您将数据保存/存储在localStorage中并在刷新上补充水分,这是上下文API仍然不支持的。

正如他的博客中提到的@dan_abramov所述,您可能不需要Redux,Redux具有有用的应用程序,例如

  • 持续存在到本地存储的状态,然后从开箱即用。
  • 服务器上的预填充状态,将其发送给HTML的客户端,然后从开箱即用。
  • 序列化用户操作,并将其与状态快照一起将其附加到自动化错误报告中,以便产品开发人员
    可以重播它们以重现错误。
  • 通过网络将操作对象传递以实现协作环境,而无需对代码的编写方式进行巨大更改。
  • 保持撤消历史记录或实施乐观的突变,而无需对代码的编写方式进行巨大更改。
  • 在发展中的国家历史之间旅行,并重新评估>当代码更改时的动作历史记录的当前状态,ala tdd。
  • 为开发工具提供完整的检查和控制功能,以便产品开发人员可以为其应用构建自定义工具。
  • 在重复大多数业务逻辑的同时,提供替代的UI。

使用这些应用程序,它太早说Redux将被新的上下文API替换。

redux只是为了避免将道具传递到深嵌套的组件,然后您可以用Context API替换Redux。它完全用于此用例。

另一方面,在哪里,为什么以及如何更改应用程序的状态,或使用诸如Redux表单,Redux Saga,Redux upo,redux Plastist,redux logger等插件,那么您绝对没有理由放弃Redux。Context API不提供任何。

我个人认为 Redux DevTools扩展名是一种了不起的,被低估的调试工具,它本身是合理的,可以继续使用Redux。

一些参考:

  • redux还没有死!
  • 您可能不需要Redux
  • React钩子会替换redux?

我更喜欢使用redux与redux-thunk进行API调用(也使用Axios(并派遣对还原器的响应。它很干净而且易于理解。

上下文API非常特定于React-Redux部分,涉及反应组件如何连接到存储。为此,React-Redux很好。但是,如果您愿意,由于上下文得到了正式支持,可以使用上下文API而不是React-Redux。

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

但是,如果您只是在今天学习Redux,并且您还没有在任何地方使用它,则值得为上下文API拍摄并用自定义上下文API代码替换React-Redux。也许,那样干净得多。

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

为我使用redux的唯一原因是:

  • 您想要一个全球状态对象(出于各种原因,例如辩论性,持久性...(
  • 您的应用程序很大,应该扩展到许多开发人员:在这种情况下,您可能需要一定程度的间接(即事件系统(:您(过去(,然后您不这样做在您的组织中知道实际上可以听它们

您可能不需要整个应用程序的间接级别,因此可以同时混合样式并使用局部状态/上下文和redux。

  • 如果您需要将中间件用于各种目的。例如记录操作,错误报告,根据不同 在服务器的响应中等等。
  • 来自多个端点的数据影响单个组件/视图。
  • 当您想对应用程序中的操作更大的控制权。 redux启用跟踪操作和数据更改, 大大简化了调试。
  • 如果您不希望服务器响应直接更改应用程序的状态。 redux添加了一层,您可以在其中决定如何,何时, 如果应该应用此数据。观察者模式。代替 在整个应用程序中创建多个发布者和订户,您 只需将组件连接到Redux Store即可。

来自:何时使用redux?

最新更新