1. Redux架构设计
- Reducer划分:
- 依据业务模块进行划分,例如用户模块(userReducer)处理用户相关状态,如登录状态、用户信息等;订单模块(orderReducer)处理订单相关状态,像订单列表、订单详情等。
- 使用
combineReducers
将各个子reducer合并成一个根reducer。例如:
import { combineReducers } from'redux';
import userReducer from './userReducer';
import orderReducer from './orderReducer';
const rootReducer = combineReducers({
user: userReducer,
order: orderReducer
});
export default rootReducer;
- Action设计:
- 对于每一个状态变更,定义明确的action类型。例如在用户模块,可能有
LOGIN_SUCCESS
、LOGOUT
等类型。
- 使用action creators函数来生成action对象。例如:
export const loginSuccess = (userData) => ({
type: 'LOGIN_SUCCESS',
payload: userData
});
export const logout = () => ({
type: 'LOGOUT'
});
2. React组件组织
- 容器组件与展示组件分离:
- 展示组件:负责UI呈现,不关心数据来源和业务逻辑,通过props接收数据和回调函数。例如一个
UserInfo
展示组件:
const UserInfo = ({ user }) => (
<div>
<p>Name: {user.name}</p>
<p>Email: {user.email}</p>
</div>
);
export default UserInfo;
- **容器组件**:连接Redux store,获取数据并传递给展示组件,处理业务逻辑。使用`react - redux`库的`connect`函数(或`useSelector`、`useDispatch` hooks)。例如:
import { connect } from'react - redux';
import UserInfo from './UserInfo';
import { logout } from '../actions/userActions';
const mapStateToProps = (state) => ({
user: state.user
});
const mapDispatchToProps = {
logout
};
export default connect(mapStateToProps, mapDispatchToProps)(UserInfo);
- 组件分层:按照功能和职责进行分层,如页面组件(负责整个页面布局和数据获取)、模块组件(处理某一特定业务模块)、原子组件(基础UI元素,如按钮、输入框等)。
3. 跨模块状态共享和交互处理
- 使用Redux全局状态:将需要跨模块共享的状态放在Redux store中,不同模块的组件通过连接store获取和更新这些状态。例如,用户登录状态在多个模块都需要使用,就将其放在Redux store的用户模块状态中。
- Action广播机制:当一个模块发生状态变化需要通知其他模块时,通过派发action来触发。例如订单模块创建新订单后,派发
ORDER_CREATED
action,其他模块(如库存模块)监听这个action并更新相关状态。
- 中间件辅助:使用Redux中间件(如
redux - thunk
、redux - saga
)来处理异步操作和复杂的业务逻辑,确保跨模块交互的有序性和可靠性。例如在处理订单支付时,使用redux - saga
管理异步流程,并且在支付成功后更新用户余额(跨模块操作)。