常见问题FAQ 目录本页总览Redux 常见问答目录常见问题什么时候需要学习 Redux?什么时候需要使用 Redux?Redux 只能与 React 一起使用吗?是否需要特定的构建工具才能使用 Redux?Reducers如何在两个 reducers 之间共享 state?必须使用 combineReducers 吗?是否必须使用 switch 语句来处理 actions 吗?组织 State必须将所有的 state 都放入 Redux 吗?应该使用 React 的 setState() 吗?可以将函数、promises 或其他不可序列化的项放入 store state 吗?如何组织 state 中的嵌套或重复数据?应该将表单 state 或其他 UI state 放入 store 吗?Store 设置可以或者应该创建多个 stores 吗?可以直接导入 stores,并在组件中使用它吗?Store enhancer 中可以有多个 middleware 链吗?Middleware 函数中的 next 和 dispatch 有什么区别?如何能够只订阅 state 的一部分?可以将 dispatch action 作为订阅的一部分吗?Actions为什么 type 应该是一个字符串,或者至少是可序列化的?为什么 action types 应该是常量?Reducers 和 actions 之间总是存在一对一的映射关系吗?如何表示 AJAX 调用等“副作用”?为什么我们需要 action creator、thunk 和 middleware 这些来处理异步行为?应该使用哪个异步 middleware?如何在 thunk、sagas、observables 或其他中做出选择?应该从一个 action creator 连续 dispatch 多个 actions 吗?不可变数据不可变数据有什么好处?为什么 Redux 需要不可变数据?有哪些方法可以实现数据不可变?必须使用 Immer 吗?使用 JavaScript 进行不可变操作会有什么问题?代码结构文件结构应该是什么样的?应该如何对 action creators 和 reducers 进行分组?Selectors 应该放在哪里?应该如何在 reducers 和 action creators 之间划分逻辑?“业务逻辑”应该放在哪里?为什么应该使用 action creators?Websockets 以及其他持久连接应该放在哪里?如何在非组件文件中使用 Redux store?性能Redux 在性能和架构方面的“扩展性”如何?为每个 action 调用“所有的 reducers”会不会很慢?必须在 reducer 中深拷贝 state 吗?拷贝 state 不会很慢吗?如何减少 store 更新事件的数量?“单状态树”会导致内存问题吗?Dispatch 很多 actions 会占用内存吗?缓存远端数据会导致内存问题吗?设计决策为什么 Redux 不将 state 和 action 传递给订阅者?为什么 Redux 不支持使用类 class 做 action 和 reducer ?为什么 middleware 签名使用柯里化?为什么 applyMiddleware 使用闭包进行 dispatch?为什么 combineReducers 在调用每个 reducer 时不接收整个 state 作为第三个参数?为什么 mapDispatchToProps 不允许使用来自 getState() 或 mapStateToProps() 的返回值?React Redux为什么应该使用 React-Redux?为什么我的组件没有重新渲染,或者 mapStateToProps 没有运行?为什么我的组件经常重新渲染?如何加速 mapStateToProps?为什么 connect 过的组件中没有 this.props.dispatch 可用?应该只 connect 顶层组件,还是可以 connect 树中的多个组件?其他有没有更大的、“真正生产环境的” Redux 项目?如何在 Redux 中实现身份验证?