请大声告诉我,什么是redux!

什么是Redux?

相信学过vue的小伙伴们都对vuex、pinia等状态管理工具非常熟悉,那么在react中有没有一种类似于vuex和pinia的工具呢?那肯定是有滴,不然Facebook脸上也挂不住咱就说是不是😀。这就是大名鼎鼎的redux,Redux 是React最常用的集中状态管理工具,类似于Vue中的Pinia(Vuex),可以独立于框架运行,下图可形象描述redux。

redux上手

redux管理数据流程

Redux把整个数据修改的流程分成了三个核心概念,分别是:state、action和reducer

  1. state - 一个对象 存放着我们管理的数据状态
  2. action - 一个对象 用来描述你想怎么改数据
  3. reducer - 一个函数 根据action的描述生成一个新的state

环境准备

在react中使用redux,推荐使用redux的插件:Redux Toolkitreact-redux

Redux Toolkit

Redux Toolkit是官方推荐的编写Redux逻辑的方法,是一套工具集,可以简化书写方式,并且其内置immer支持可变式的状态修改,并且内置thunk有更好的异步处理。

react-redux

是用来连接Redux和React组件的中间件

有了上面的基础之后,接下来通过一个todoList的案例来带大家感受一下什么是redux。

redux实战

首先我们创建一个react项目(过程忽略。。。。)

创建好项目之后,我们安装Redux Toolkit以及react-redux依赖。

npm i @reduxjs/toolkit react-redux

使用redux实现todoList

项目目录结构如下

使用RTK创建todosStore

todosStore.js

todosStore.js 复制代码
import { createSlice } from "@reduxjs/toolkit";

const todosStore = createSlice({
    name: "todos",
    // 初始状态
    initialState: [
        {
            id: 1,
            title: "Learn React",
            completed: true,
        },
        {
            id: 2,
            title: "Learn Redux",
            completed: false,
        },
        {
            id: 3,
            title: "Learn Redux-Toolkit",
        }
    ],
    // 修改数据的同步方法
    reducers: {
        addTodos(state, action) {
            state.push(action.payload)
        },
        deleteTodos(state, action) {
            return state.filter(item => item.id !== action.payload.id)
        },
        editTodos(state, action) {
            return state.map(item => item.id === action.payload.id ? action.payload : item)
        }
    }
})
const { addTodos, deleteTodos, editTodos } = todosStore.actions
export { addTodos, deleteTodos, editTodos }
export default todosReducer

这段代码是一个使用Redux Toolkit创建的todos应用的状态管理模块。首先定义了一个名为todos的状态切片,包含初始的todo列表、三个用于修改状态的同步方法(添加、删除、编辑todo),并导出了对应的action creator函数和reducer函数。这些函数可以用来在应用中更新todo列表的状态。

看到这里大家有没有好奇,todosStore是什么东西?为什么将reducers中的属性解构出来要用todosStore.actions?接下来,让我们来输出todosStore一探究竟。

打印后,我们可以看到reducers属性中的方法全部都在todosStore的actions属性中。

store/index.js

js 复制代码
import { configureStore } from "@reduxjs/toolkit";
import todosReducer from "../modules/todosStore";

// 创建store
const store = configureStore({
    reducer: {
        todos: todosReducer
    }
});


export default store;

这段代码是使用Redux Toolkit的configureStore函数来创建一个Redux store的简单示例。它将之前定义的todosReducer作为reducer传入,以便在store中管理todos相关的状态。最后,它将这个store实例导出,使其可以在应用的其他部分被使用。

那么store到底是什么东西呢?打印store可以看到,store中包含多种内置的方法,我们常见的dispatch和subscribe都被其内置。

将store注入React

react-redux负责把Redux和React 链接 起来,内置 Provider组件 通过 store 参数把创建好的store实例注入到应用中。

React组件中使用store中的数据

在React组件中使用store中的数据,需要用到一个 钩子函数 useSelector,它的作用是把store中的数据映射到组件 中,使用样例如下:

React组件中修改store中数据

React组件中修改store中的数据需要借助另外一个hook函数 useDispatch,它的作用是生成提交action对象的 dispatch函数,使用样例如下:

redux调试工具的使用

在编写redux时,我们不能直观的在编译器观察到数据的变化,为了解决这个问题,redux官方提供了针对于Redux的调试工具,支持实时state信息展示,action提交信息查看等。只需要在浏览器安装redux devtools即可,下面给大家展示展示效果。

使用redux使用todoList

由于代码文件过多不方便在网页展示,感兴趣的小伙伴们可以前往仓库地址拉取代码参考参考(个人水平有限,代码难免会有小问题,大家参考就好)

代码地址:gitee.com/pigs-like-p...

总结

  1. 组件中使用哪个hook函数获取store中的数据? useSelector
  2. 组件中使用哪个hook函数获取dispatch方法? useDispatch
  3. 如何得到要提交action对象? 执行store模块中导出的actionCreater方法

本篇文章到这里就结束了,希望对大家了解redux有所帮助,如果有所帮助的话,麻烦大家点赞,关注加收藏支持一下,谢谢大家。

相关推荐
崔庆才丨静觅3 小时前
hCaptcha 验证码图像识别 API 对接教程
前端
passerby60614 小时前
完成前端时间处理的另一块版图
前端·github·web components
掘了4 小时前
「2025 年终总结」在所有失去的人中,我最怀念我自己
前端·后端·年终总结
崔庆才丨静觅4 小时前
实用免费的 Short URL 短链接 API 对接说明
前端
崔庆才丨静觅4 小时前
5分钟快速搭建 AI 平台并用它赚钱!
前端
崔庆才丨静觅5 小时前
比官方便宜一半以上!Midjourney API 申请及使用
前端
Moment5 小时前
富文本编辑器在 AI 时代为什么这么受欢迎
前端·javascript·后端
崔庆才丨静觅5 小时前
刷屏全网的“nano-banana”API接入指南!0.1元/张量产高清创意图,开发者必藏
前端
剪刀石头布啊5 小时前
jwt介绍
前端
爱敲代码的小鱼5 小时前
AJAX(异步交互的技术来实现从服务端中获取数据):
前端·javascript·ajax