React 状态管理 Redux
随着 React 应用越来越复杂,组件之间传递数据会变得困难,尤其是多个组件共享状态时。Redux 是一个流行的状态管理库,它可以帮你将应用状态集中管理,提升代码的可维护性和可预测性。本文你将学会使用 Redux Toolkit 创建 Redux 状态,并结合 React 使用 react-redux 完成状态的读取与更新。
为什么需要 Redux?
React 本身是“组件驱动 + 单向数据流”的框架,小型应用使用组件内的 useState 足够。但当项目变大:
- 多个组件需要共享数据(如用户信息、购物车等)
- 组件嵌套层级很深(需要逐层传 props)
- 状态修改逻辑复杂(需要统一管理)
这时候,Redux 就派上用场了。
Redux 是什么?
Redux 是一个可预测状态容器(predictable state container)。它通过以下特性让你的应用行为更清晰可控。
- 单一状态树(Single source of truth)
- 状态只读(State is read-only)
- 纯函数更新状态(Changes are made with pure functions)
虽然 Redux 并不是 React 官方推出的库,但它与 React 配合非常紧密,拥有官方绑定库 react-redux,并被广泛用于实际项目中。Redux Toolkit(RTK)是官方推荐的使用方式,极大简化了 Redux 的使用。
需要注意的是,Redux 的概念较多,对初学者有一定学习成本;对于小型项目来说可能显得过重。不过在大型项目或多人协作中,Redux 依然是一个稳定、可维护的状态管理解决方案。只要合理使用 Redux Toolkit,就可以在商业项目中放心使用 Redux。
核心概念 Slice
“切片”(slice)是 Redux Toolkit 中一个非常核心的概念,你可以把它理解为“状态和对应操作的一块独立区域”。
具体来说:
- Redux 应用的状态通常很大且复杂,我们会把它拆分成多个小块,每块管理自己的数据和逻辑。
- 每个“切片”就负责管理状态中的一部分(slice of state),以及对这部分状态的操作(reducers)。
- 它把状态结构和修改状态的方法放在一个地方,代码更清晰、更易维护。
举个简单比喻:
你把整个应用的状态看成一张大披萨,切片就是披萨上的一片。每片披萨都有自己的味道(状态内容)和吃法(操作方法)。Redux Toolkit 的
createSlice就帮你准备好一片披萨和对应的吃法。
在代码里:
const counterSlice = createSlice({
name: 'counter', // 切片名字
initialState: { // 这片状态的初始值
value: 0,
},
reducers: { // 这片状态可以用什么方法来改变
increment: (state) => {
state.value += 1
},
decrement: (state) => {
state.value -= 1
}
}
})
counterSlice管理的是“计数器”这块状态。- 它同时包含了状态数据(
value)和两个操作(increment、decrement)。
这样设计让你更容易按功能拆分代码,维护和扩展都方便很多。