Redux Toolkit 快速入门指南:createSlice、configureStore、useSelector、useDispatch 全面解析

文章目录

  • [🚀 Redux Toolkit 快速入门指南:createSlice、configureStore、useSelector、useDispatch 全面解析](#🚀 Redux Toolkit 快速入门指南:createSlice、configureStore、useSelector、useDispatch 全面解析)
    • [🧱 1. createSlice:定义状态和 reducer](#🧱 1. createSlice:定义状态和 reducer)
    • [🏗️ 2. configureStore:创建 Store 并整合多个 Slice](#🏗️ 2. configureStore:创建 Store 并整合多个 Slice)
    • [🔍 3. useSelector:从 Redux 中读取状态](#🔍 3. useSelector:从 Redux 中读取状态)
    • [🧩 4. useDispatch:派发 action 修改状态](#🧩 4. useDispatch:派发 action 修改状态)
    • [💡 综合示例](#💡 综合示例)
    • [🧠 总结一张图](#🧠 总结一张图)
    • [✅ 推荐理由:为什么选择 Redux Toolkit?](#✅ 推荐理由:为什么选择 Redux Toolkit?)

🚀 Redux Toolkit 快速入门指南:createSlice、configureStore、useSelector、useDispatch 全面解析

Redux 是管理 React 应用状态的主流方案,但传统 Redux 写法冗长、复杂,对初学者不友好。Redux 官方推出的 Redux Toolkit (RTK) 旨在解决这个问题,极大简化了 Redux 的配置和使用。

本文将带你快速掌握 Redux Toolkit 的四个核心工具:

  • createSlice:定义状态和修改逻辑
  • configureStore:创建 Redux store
  • useSelector:读取状态
  • useDispatch:修改状态

🧱 1. createSlice:定义状态和 reducer

createSlice 是 Redux Toolkit 的核心 API,用于简洁地定义:

  • 状态的初始值(initialState
  • 修改状态的函数(reducers
  • 自动生成的 action 和 action types
js 复制代码
// features/counter/counterSlice.js
import { createSlice } from '@reduxjs/toolkit';

const counterSlice = createSlice({
  name: 'counter', // 模块名
  initialState: { value: 0 }, // 初始状态
  reducers: {
    increment: (state) => {
      state.value += 1; // 直接修改 state,RTK 内部用 Immer 自动处理
    },
    decrement: (state) => {
      state.value -= 1;
    },
    incrementByAmount: (state, action) => {
      state.value += action.payload;
    },
  },
});

export const { increment, decrement, incrementByAmount } = counterSlice.actions;
export default counterSlice.reducer;

🏗️ 2. configureStore:创建 Store 并整合多个 Slice

Redux Toolkit 提供了 configureStore 来创建 store。相比传统 Redux 的 createStore,它自动集成了:

  • Redux DevTools
  • redux-thunk 中间件(支持异步)
  • 默认的中间件安全校验
js 复制代码
// app/store.js
import { configureStore } from '@reduxjs/toolkit';
import counterReducer from '../features/counter/counterSlice';

export const store = configureStore({
  reducer: {
    counter: counterReducer, // 注册 reducer
  },
});

如果有多个 slice,只需继续添加即可,RTK 会自动组合成根 reducer。


🔍 3. useSelector:从 Redux 中读取状态

useSelector 是 React-Redux 提供的 Hook,用于从 Redux 中"选择"你关心的 state。

jsx 复制代码
import { useSelector } from 'react-redux';

const count = useSelector((state) => state.counter.value);

✅ 特点:

  • 只要 state.counter.value 改变,组件才会重新渲染
  • 推荐只选择"需要的部分",避免返回新对象(影响性能)

🧩 4. useDispatch:派发 action 修改状态

通过 useDispatch 获取 Redux 的 dispatch() 函数,在组件中触发状态更新。

jsx 复制代码
import { useDispatch } from 'react-redux';
import { increment } from './counterSlice';

const dispatch = useDispatch();
dispatch(increment());

RTK 的 createSlice 自动生成了 increment() 这样的 action creator,使得 dispatch(increment()) 写法非常简洁。

也支持派发异步操作:

jsx 复制代码
dispatch(fetchDataAsync());

💡 综合示例

一个最小可运行的 React + Redux Toolkit 示例:

jsx 复制代码
// Counter.jsx
import React from 'react';
import { useSelector, useDispatch } from 'react-redux';
import { increment, decrement, incrementByAmount } from './features/counter/counterSlice';

function Counter() {
  const count = useSelector((state) => state.counter.value);
  const dispatch = useDispatch();

  return (
    <div>
      <h2>Count: {count}</h2>
      <button onClick={() => dispatch(increment())}>+1</button>
      <button onClick={() => dispatch(decrement())}>-1</button>
      <button onClick={() => dispatch(incrementByAmount(5))}>+5</button>
    </div>
  );
}

export default Counter;

🧠 总结一张图

复制代码
Redux Toolkit 架构流程:

createSlice ➜ 自动生成 reducer + actions
         |
         ▼
configureStore ➜ 注册 reducer,创建 store
         |
         ▼
<Provider store={...}> ➜ 将 store 注入 React 应用
         |
         ▼
组件中使用:
- useSelector() 读取 state
- useDispatch() 派发 action

✅ 推荐理由:为什么选择 Redux Toolkit?

特性 优势
简洁 省去手写 action 类型、reducer、action creator 的繁琐过程
安全 默认开启状态修改保护和序列化检测
易学 API 更贴近 React Hooks 风格
内置中间件 自动支持异步操作,无需额外配置 thunk
DevTools 开箱即用,无需单独配置

相关推荐
万少16 小时前
万少的博客 - 技术分享与解决方案
前端·javascript·后端
尘世中一位迷途小书童19 小时前
用 Cesium 撸了一个森林火情监控大屏,弧线、粒子、发光效果都齐了
前端·javascript
先吃饱再说20 小时前
JavaScript中`this` 的“千层套路”:从默认绑定到箭头函数的五种指向
javascript
foxire21 小时前
基于nodejs实现服务端内核引擎
javascript
触底反弹1 天前
🧠 搞懂 Token,才算真正入门大模型——从分词原理到 Embedding 语义实战
javascript·人工智能·算法
free351 天前
AST Interpreter 的设计:为什么分 evaluate() 和 execute()
javascript
等咸鱼的狸猫1 天前
JavaScript 隐式类型转换:从入门到精通
javascript
kyriewen1 天前
我用 Codex 重写了同事维护三年的代码,他没说谢谢——而是找了领导
前端·javascript·ai编程
铁皮饭盒1 天前
S3已成为文件存储标准,阿里/腾讯/华为云都支持,Bun率先原生支持
前端·javascript·后端
Cobyte1 天前
22.Vue Vapor 组件 props 的实现
前端·javascript·vue.js