使用 Context API 与 Redux 有性能优势吗?

Posted

技术标签:

【中文标题】使用 Context API 与 Redux 有性能优势吗?【英文标题】:Is there a performance benefit on using Context API vs Redux? 【发布时间】:2020-01-10 10:55:53 【问题描述】:

我已经阅读了上下文 API,它看起来是一种解决 React 单向数据通信问题的优雅方法。

不过还有 Redux,它在共享全局状态方面做得很好。

如果我使用上下文 API 和钩子,我会获得任何性能优势吗?

PS:我读到使用上下文 API,我们将不得不检查渲染,因为它甚至有时会使整个应用程序重新渲染。

【问题讨论】:

***.com/questions/49568073/…的可能重复 我实际上关心的是性能,而不是差异或何时使用它。 Redux 在后台使用 Context 所以可能不会。 【参考方案1】:

Context API 最初是为大量读取、少量写入操作而设计的(例如在明暗之间更改主题)

您应该为 1、2 或 3 级深度数据使用 props

感谢投反对票,这是出处

来自reactjs.org:

上下文旨在共享可被视为 React 组件树“全局”的数据,例如当前经过身份验证的用户、主题或首选语言。


上下文主要用于当一些数据需要被不同嵌套级别的许多组件访问时。谨慎应用它,因为它使组件重用变得更加困难。

如果你只想避免通过多个级别传递一些道具,组件组合通常是比上下文更简单的解决方案。

【讨论】:

你引用的文字没有说明上下文是指“高读低写”【参考方案2】:

使用 Redux,您可以使用 4 个辅助函数微调性能:areStatesEqualareOwnPropsEqualareStatePropsEqualareMergedPropsEqual 默认情况下,所有四个助手都有一些合理的默认功能,您可以从中受益。

使用钩子,您可以使用 React.memo 解释的 here 来提高性能,它显然不是默认选项,因此您需要明确使用它。

对于 Context API,我希望我可以说您可以使用 shouldComponentUpdate,但我可能不能,因为它属于过时的 React 类组件。

【讨论】:

【参考方案3】:

Use-context 和 Use-reducer 来替换 redux 不是一个好习惯。上下文会导致页面重新加载,如果我们查看 react 开发工具提供的分析器,就会发现这一点,而 redux 不会这样做。 Redux 比 use-context 更适合全局状态管理

【讨论】:

感谢您的回答阿杰。您能否添加一些链接到解释您的答案的来源?或者添加相关的演示示例或屏幕截图? 但是 redux 提供者是基于 React Context 的。那么,您如何支持 Ajay 的这一论点?是否存在任何关于 redux 与 context + useReducer 的基准?

以上是关于使用 Context API 与 Redux 有性能优势吗?的主要内容,如果未能解决你的问题,请参考以下文章

使用 localStorage 代替 Redux 或 Context API 可以吗?

手写一个React-Redux,玩转React的Context API

新的 React Context API + LocalStorage + Subscribe(替代 Redux)

如何在Redux中使用React Context API?

React Native 状态管理(Redux、Context API 或 Graphql)

在项目中使用 Context API 我以前会在异步操作创建者中使用 Redux?