常见问题解答常见问题解答索引在本页Redux 常见问题解答目录一般我什么时候应该学习 Redux?我什么时候应该使用 Redux?Redux 只能与 React 一起使用吗?我是否需要使用特定的构建工具才能使用 Redux?Reducers如何共享两个 reducer 之间的状态?我必须使用 combineReducers 吗?我必须使用 switch 语句来处理动作吗?组织状态我是否必须将所有状态放入 Redux?我应该什么时候使用 React 的 useState 或 useReducer?我可以在我的商店状态中放入函数、promise 或其他不可序列化项吗?如何组织嵌套或重复数据在我的状态中?我应该将表单状态或其他 UI 状态放入我的商店吗?商店设置我可以或应该创建多个商店吗?我可以直接导入我的商店,并在组件中自己使用它吗?在 store enhancer 中使用多个中间件链是否可以?中间件函数中的 next 和 dispatch 有什么区别?如何只订阅状态的一部分?我可以在订阅中获取分派的 action 吗?动作为什么 type 必须是字符串,或者至少是可序列化的?为什么我的 action 类型应该是常量?reducer 和 action 之间总是存在一对一映射吗?如何表示“副作用”,例如 AJAX 调用?为什么我们需要“action 创建者”、“thunk”和“中间件”来执行异步行为?我应该使用什么异步中间件?如何选择 thunk、saga、observable 或其他?我应该从一个 action 创建者中连续分派多个 action 吗?不可变数据不可变性的好处是什么?为什么 Redux 需要不可变性?处理数据不可变性有哪些方法?我必须使用 Immer 吗?使用 JavaScript 进行不可变操作有哪些问题?代码结构我的文件结构应该是什么样的?我应该如何在我的项目中分组 action 创建者和 reducer?我的选择器应该放在哪里?我应该如何在 reducer 和 action 创建者之间划分逻辑?我的“业务逻辑”应该放在哪里?为什么我应该使用 action 创建者?WebSockets 和其他持久连接应该放在哪里?如何在非组件文件中使用 Redux store?性能Redux 在性能和架构方面如何“扩展”?每次 action 都调用“所有 reducer”会不会很慢?我必须在 reducer 中深度克隆我的状态吗?复制我的状态会不会很慢?如何减少 store 更新事件的数量?拥有“一个状态树”会导致内存问题吗?分派许多 action 会占用内存吗?缓存远程数据会导致内存问题吗?设计决策为什么 Redux 不将状态和 action 传递给订阅者?为什么 Redux 不支持使用类来创建 action 和 reducer?为什么中间件签名使用柯里化?为什么 applyMiddleware 使用闭包来创建 dispatch?为什么 combineReducers 在调用每个 reducer 时不包含一个包含整个状态的第三个参数?为什么 mapDispatchToProps 不允许使用 getState() 或 mapStateToProps() 的返回值?React Redux为什么我应该使用 React-Redux?为什么我的组件没有重新渲染,或者我的 mapStateToProps 没有运行?为什么我的组件重新渲染过于频繁?如何加快我的 mapStateToProps 速度?为什么我在连接的组件中没有 this.props.dispatch 可用?我应该只连接我的顶层组件,还是可以连接树中的多个组件?其他有没有更大的“真实”Redux 项目?如何在 Redux 中实现身份验证?