码农必看!一文吃透 Redux 原理

还在搞不懂 Redux 原理而发愁吗?别慌,我今天就用最接地气的大白话,帮你把 Redux 安排得明明白白。读完这篇文章,你不仅能理解 Redux 的工作原理,还能用它写出井井有条的前端应用。

Redux 到底是什么?

如果要打个比方,Redux 就像一个超级大仓库,管理着你应用里所有状态(State)。

想象一下,你在玩一个开放世界游戏:角色的等级、装备、生命值、经验值,甚至探索进度,这些信息都存放在一个“仓库”里。整个应用只有这一个“大管家”,所有组件获取数据都得从这里拿。

这种集中式管理的方式,让应用状态有条不紊、井然有序,再复杂的数据流也不会乱成一锅粥。

Redux 核心概念

1. State(状态)

仓库里的“货物”就是 State,它代表了应用在某一时刻的状态。

就像游戏里,角色等级 30、生命值满格、背包里有史诗装备,这些组合起来就是当前 State。

划重点:State 是只读的,不能随意篡改。想改变它,必须走 Redux 的正规流程。

2. Action(动作)

想要改变仓库里的货物,就得靠 Action 来传递指令。

Action 本质是一个 JavaScript 对象,最重要的属性是 type,描述即将执行的动作。

举例:游戏里角色击败 BOSS,获得 500 金币和一件史诗装备,这时会触发一个 Action:

{

type: 'GET_REWARD',

payload: {

gold: 500,

equipment: 'Epic Sword'

}

}

Action 就是“通知仓库我要干什么”,它本身不会改变 State,只是传递意图。

3. Reducer(状态处理器)

Reducer 就像仓库的小助手,专门处理 Action。

当 Action 到达 Reducer,Reducer 根据 type 和 payload 计算出新的 State,然后返回。

关键点:Reducer 是纯函数

  • 相同输入必有相同输出
  • 不会修改原来的 State,而是返回新对象

举例:角色捡到金币,Reducer 会根据原来的金币数和 Action 的 payload 计算出新的金币数:

function goldReducer(state = 0, action) {

switch(action.type) {

case 'ADD_GOLD':

return state + action.payload.amount;

default:

return state;

}

}

4. Store(仓库)

Store 是 Redux 的心脏,负责保存整个应用的 State,并管理更新和通知。

Reducer 返回新 State 后,Store 会更新自己保存的数据,并通知依赖它的组件重新渲染。

举个场景:游戏界面显示金币数量的地方,Store 更新后,组件收到通知,页面显示的金币数也会自动刷新。

Redux 的工作流程

用我最喜欢的游戏类比来描述,Redux 的数据流如下:

  1. 发起 Action 用户点击按钮或完成任务,触发 Action,就像角色捡到金币或击败 BOSS。
  2. Reducer 处理 Action Action 发送到 Reducer,小助手根据 type 和 payload 算出新 State,并返回。
  3. Store 更新 Store 接收 Reducer 返回的新 State,更新自己保存的数据。
  4. 组件更新 Store 通知依赖该 State 的组件重新渲染,界面显示最新状态,比如金币增加了、角色升级了。

整个流程单向流动、可预测,就算项目复杂,也能保证状态管理清晰可靠。

Redux 使用小技巧

在长期使用 Redux 的过程中,我总结了几个提高效率的小技巧,也分享给大家:

  1. 优先用 Redux Toolkit 官方推荐的工具集,封装了 createSlice、configureStore 等常用方法,写起来更简洁,避免重复写大量 action type 和 reducer:

import { createSlice } from '@reduxjs/toolkit';

const goldSlice = createSlice({

name: 'gold',

initialState: 0,

reducers: {

addGold: (state, action) => state + action.payload,

},

});

export const { addGold } = goldSlice.actions;

export default goldSlice.reducer;

  1. 用 useSelector / useDispatch Hooks React 中用 hooks 能直接获取状态和发起 action,比以前的 connect 更直观:

const gold = useSelector(state => state.gold);

const dispatch = useDispatch();

dispatch(addGold(100));

  1. 将状态拆分成模块 大项目最好按功能拆分 slice,每个 slice 管理一类状态,例如金币、装备、任务进度,方便维护和调试。
  2. 调试神器:Redux DevTools 每次 action 和 state 更新都能在 DevTools 里查看,还可以回放状态,非常适合排查问题。
  3. 保持 State 纯净 State 尽量只存业务数据,不存 UI 状态(如弹窗显示/隐藏),UI 状态可以用 React 内部 state 管理,减少 Redux 的负担。

这些小技巧让我在使用 Redux 时既高效又省心,也能让新手更快上手。

总结

Redux 看似复杂,但本质就是三个东西:

  • Store:仓库,保存所有状态
  • State:仓库里的货物,应用的当前状态
  • Action + Reducer:修改状态的流程和规则

第一次理解的时候,我也是迷迷糊糊,但用游戏类比之后,一切都清晰了。

如果你正在做前端项目,尤其是复杂应用,我强烈建议尝试 Redux。它会让你的状态管理井井有条,开发体验也更顺畅。

之后,我再说说一个Redux 进阶经验,分享比如结合 异步 Action / Thunk / RTK Query 的实战经验,让你们能直接上手复杂场景。