React Native面试题——Redux之高级面试题(2)
一 概述
- 如何优化 Redux 应用的性能?
- Redux 的 dispatch 是同步还是异步?
- redux-thunk 和 redux-saga 有什么区别?分别适用于什么场景?
- Redux 中的状态是如何流转的?内部机制是怎样的?
- Redux Toolkit 是什么?为什么推荐使用?
- 如何自定义 Redux 中间件?
- 如何处理多个 Reducer 共享状态的场景?
- Redux 中的不可变性(immutability)为什么重要?如何实现?
- Redux 与 MobX 有什么区别?
- 如果 Redux 状态很多、Store 过大,如何模块化和可维护?
二 面试题解答(仅供参考)
2.1 如何优化 Redux 应用的性能?
1 | Redux 性能优化常用方式包括: |
2.2 Redux 的 dispatch 是同步还是异步?
1 | Redux 的 dispatch 本质上是同步的,也就是说,action 传递给 reducer 的过程是同步执行的。 |
2.3 redux-thunk 和 redux-saga 有什么区别?分别适用于什么场景?
项目 | redux-thunk | redux-saga |
---|---|---|
实现原理 | 函数嵌套函数,使用 Promise 实现异步 | 使用 generator 函数处理异步 |
上手难度 | 简单,几乎无学习成本 | 学习成本高,语法更复杂 |
控制流能力 | 弱,不适合复杂流程控制 | 强,适合复杂任务流程(如取消、轮询等) |
调试能力 | 一般,嵌套多了难追踪 | 好,逻辑清晰、可测试 |
应用场景 | 简单的异步请求、表单提交 | 多任务处理、后台同步、动画控制、事件队列等 |
2.4 Redux 中的状态是如何流转的?内部机制是怎样的?
1 | Redux 内部机制流程如下: |
2.5 Redux Toolkit 是什么?为什么推荐使用?
1 | Redux Toolkit(RTK)是 Redux 官方推荐的现代化开发工具集, |
2.6 如何自定义 Redux 中间件?
1 | Redux 中间件是一个函数,格式如下: |
2.7 如何处理多个 Reducer 共享状态的场景?
1 | 可通过以下方式解决: |
2.8 Redux 中的不可变性(immutability)为什么重要?如何实现?
1 | 1、Redux 要求状态是不可变的,原因: |
2.9 Redux 与 MobX 有什么区别?
比较项 | Redux | MobX |
---|---|---|
架构设计 | 函数式、显式状态管理 | 响应式、观察者模式 |
学习曲线 | 相对陡峭,有一定模板代码 | 容易上手 |
状态定义 | 单一 store + reducer | 类/对象 + observable + action |
可维护性 | 高(可预测、调试方便) | 中等(依赖自动追踪,有时不易发现 bug) |
性能 | 默认比 MobX 更保守 | MobX 响应式设计,更新粒度更小 |
适用场景 | 大型项目、团队协作 | 中小型项目、快速开发 |
2.10 如果 Redux 状态很多、Store 过大,如何模块化和可维护?
1 | 1.使用 combineReducers 分模块管理状态; |