常问问题常见问题索引On this pageRedux 常见问题 目录 通用 我应该什么时候学习 Redux? 我应该什么时候使用 Redux? Redux 只能和 React 一起使用吗? 使用 Redux 需要特定的构建工具吗? Reducers(状态修改函数) 如何在两个 reducer 之间共享状态?我必须使用 combineReducers 吗? 处理 action 一定要用 switch 语句吗? 状态组织 我必须把所有状态放到 Redux 中吗?我还应该使用 React 的 useState 或 useReducer 吗? 我可以把函数、Promise 或其他不可序列化的内容放入 store 状态中吗? 我如何组织嵌套或重复的数据状态? 我应该把表单状态或其他 UI 状态放入 store 吗? Store 配置 我可以或应该创建多个 store 吗?我能直接导入 store,自己在组件中使用吗? 在 store enhancer 中可以或应该有多条 middleware 链吗?中间件函数中的 next 和 dispatch 有什么区别? 我如何只订阅部分状态?可以在订阅中获取被派发的 action 吗? Actions(动作) 为什么 type 要是字符串,或者至少可序列化?为什么我的 action 类型应该是常量? reducer 和 action 之间总是一一对应的吗? 我如何表示诸如 AJAX 调用的“副作用”?为什么我们需要“action creators”、“thunks”和“middleware” 来处理异步行为? 我应该用什么异步中间件?如何在 thunks、sagas、observables 等之间做选择? 我应该在一个 action creator 里连续派发多个 action 吗? 不可变数据 不可变性的好处有哪些? 为什么 Redux 要求数据不可变? 处理数据不可变有哪些方法?我必须用 Immer 吗? 使用纯 JavaScript 处理不可变操作有哪些问题? 代码结构 我的文件结构应该是什么样的?我应该如何在项目中组织 action creators 和 reducers?selectors 应该放在哪里? 我应该如何拆分 reducers 和 action creators 之间的逻辑?我的“业务逻辑”应该放在哪里? 为什么我应该使用 action creators? websocket 和其他持久连接应该放在哪里? 我如何在非组件文件中使用 Redux store? 性能 Redux 在性能和架构上“扩展”得如何? 调用“所有 reducer”处理每个 action 会不会很慢? 我必须在 reducer 中深拷贝状态吗?拷贝状态不会很慢吗? 我如何减少 store 更新事件的数量? 拥有“一棵状态树”会导致内存问题吗?派发很多 action 会占用内存吗? 缓存远程数据会导致内存问题吗? 设计决策 为什么 Redux 不把状态和 action 传给订阅者? 为什么 Redux 不支持用类来定义 actions 和 reducers? 为什么 middleware 的签名使用了柯里化? 为什么 applyMiddleware 使用了闭包来封装 dispatch? 为什么 combineReducers 在调用每个 reducer 时不包含整个状态作为第三个参数? 为什么 mapDispatchToProps 不允许使用从 getState() 或 mapStateToProps() 返回的值? React Redux 我为什么要使用 React-Redux? 为什么我的组件不重新渲染,或者 mapStateToProps 不执行? 为什么我的组件渲染太频繁? 我如何加速 mapStateToProps? 为什么我的连接组件没有 this.props.dispatch? 我应该只连接顶层组件,还是可以在组件树中连接多个组件? 其他 有没有什么大型的“真实” Redux 项目? 我如何在 Redux 中实现身份验证?