Redux 在内部使用上下文 API 吗?
Posted
技术标签:
【中文标题】Redux 在内部使用上下文 API 吗?【英文标题】:Is Redux internally using context API? 【发布时间】:2021-10-27 03:36:27 【问题描述】:我有一次面试,面试官问我 redux 是否在内部使用上下文 API。如果是,请提供详细说明。谢谢
【问题讨论】:
如果我清除了您的疑问,请接受我的回答:my_answer 【参考方案1】:Redux 不使用 context api,它是一个用于状态管理的 javascript 库。您可以将 Redux 与任何应用程序(如反应、角度、vue、svelte 等)一起使用。但是,要在 react 应用程序中使用 redux,您需要 react-redux
,这是 redux 的官方 react 绑定。
react-redux
使用 React 的 context api 使所有组件都可以访问 redux 存储。你需要 react-redux
的原因是,React 使用虚拟 dom - 这意味着你不能直接操作 DOM
。在 Angular 等其他库中,我们使用 NgRx
库(用于 Angular)。
【讨论】:
【参考方案2】:在内部,React Redux 使用 React 的“上下文”特性来使 Redux 存储可供深度嵌套的连接组件访问。作为 React Redux 版本 6,这通常由单个默认值处理 React.createContext() 生成的上下文对象实例,调用 ReactReduxContext。
Source
【讨论】:
【参考方案3】:是的,但与您自己做的情况不同。
如果您要手动使用 Context,您通常会进行 值传播 - 将当前状态值向下传递到树中。这可能导致非常低效的重新渲染行为。请参阅this article 以获得更深入的解释。
另一方面,React-Redux 使用上下文进行依赖注入。存储在树下传递,永远不会改变,永远不会触发重新渲染。其余的一切都由 Redux 在内部完成,使用手动订阅。这样的性能要高得多。
【讨论】:
以上是关于Redux 在内部使用上下文 API 吗?的主要内容,如果未能解决你的问题,请参考以下文章
React 上下文 API 和/或 React-Redux-Thunk
在 NextJS 应用程序中使用 React Context API 会禁用静态站点生成器吗?
如何将 React Context API 与 useReducer 一起使用以遵循与 Redux 类似的风格 [关闭]