Redux 新教程Redux Toolkit的使用

2023-11-16

关于更新redux 

唏嘘~还是跟不上时代的步伐了,哭唧唧~,花费了不少的时间学习完redux后,还没用就发现官网的redux更新了新的使用用法 Redux Toolkit,于是乎硬着头皮翻译了一遍官网的Redux Toolkit,整理出最新的redux用法,不得不说,更新的好啊!

Redux Toolkit 今天是如何使用Redux

从官网翻译出来了几句话:

它开箱即用的高效 Redux 开发工具集,是 redux 新的库,也是官方推荐今后在项目中使用的 redux 库,内置了immer、redux-thunk和redux-devtools。

即使对于现有的应用程序,我们也建议至少将createStore切换为configureStore,因为开发模式中间件也可以帮助您捕获现有代码库中的意外突变和可序列化错误。我们还希望鼓励您将最常用的减速器(以及将来编写的任何减速器)切换到createSlice-代码将更短、更容易理解,安全改进将为您节省时间和精力。

redux核心包仍然有效,但今天我们认为它已经过时了。它的所有API也都是从@reduxjs/toolkit重新导出的,configureStore完成了createStore所做的一切,但具有更好的默认行为和可配置性。

所有的动作创建者和动作类型都是自动生成的,reducer代码更短,更容易理解。在每种情况下,实际更新的内容也更加清晰。这意味着您编写的代码可以非常简单。

so,根据官网介绍:Redux Toolkit从两个关键API configureStore  createSlice 开始,它们简化了您在每个Redux应用程序中所做的最常见的事情:

  • configureStore 通过单个函数调用建立一个配置良好的Redux存储,包括组合reducers、添加thunk中间件和设置Redux-DevTools集成。它也比createStore更容易配置,因为它采用了命名选项参数。
  • createSlice 允许您编写使用Immer库的reducer,以便使用state.value=123这样的“mutating”JS语法编写不可变的更新,而不需要点差。它还自动为每个reducer生成 动作(action)创建者函数,并根据reducer的名称在内部生成动作类型字符串。最后,它与TypeScript配合使用非常好。

官网的demo 

官网的demo例子作为参考:

features/todos/todosSlice.js

import { createSlice } from '@reduxjs/toolkit'

const todosSlice = createSlice({
  name: 'todos',
  initialState: [], // 数据状态初始值
  reducers: {
    todoAdded(state, action) {
      state.push({
        id: action.payload.id,
        text: action.payload.text,
        completed: false
      })
    },
    todoToggled(state, action) {
      const todo = state.find(todo => todo.id === action.payload)
      todo.completed = !todo.completed
    }
  }
})

export const { todoAdded, todoToggled } = todosSlice.actions
export default todosSlice.reducer

使用configureStore代替createStore,存储设置可以简化为:

app/store.js

import { configureStore } from '@reduxjs/toolkit'
import todosReducer from '../features/todos/todosSlice'
import filtersReducer from '../features/filters/filtersSlice'

export const store = configureStore({
  reducer: {
    todos: todosReducer,
    filters: filtersReducer
  }
})

更新内容介绍

  • 在新的用法中:redux出了一个新的工具包  Redux Toolkit  
  • 引入了新的 api configureStore  createSlice
  • configureStore通过单个函数调用建立一个配置良好的Redux存储,包括组合reducers、添加thunk中间件和设置Redux-DevTools集成。它也比createStore更容易配置,因为它采用了命名选项参数。
  • redux摒弃了action的单独调用使用,而是和reducer做了融合更新,体现在createSlice 函数中,createSlice自动为每个reducer生成动作(action)创建者函数,并根据reducer的名称在内部生成动作类型字符串。
  • redux摒弃了combineReducers合并reducer的单独调用使用,而是使用了configureStore 通过单个函数调用建立一个配置良好的Redux存储,其中就包括组合reducers。

Redux Toolkit用法

  引入configureStore  store/index.js

import { configureStore } from '@reduxjs/toolkit'

  configureStore 配置存储仓库  store/index.js

import todosReducer from '../store/reducer/todo'
import filterStateRudecer from '../store/reducer/filter'

export const store = configureStore({
    reducer: {
        todos: todosReducer,
        filterState: filterStateRudecer
    }
})

// 默认导出reducer每个模块下的action所有方法,方便在页面以/store路径引入使用
export * from './reducer/todo' ==》 相当于 下面这种方法导出了ruducer中的action
export const { todoAdded, todoToggled} = todosSlice.actions

createSlice 配置reducer reducer/todo.js

import { createSlice } from '@reduxjs/toolkit'

// 默认值:
const initialState = [
    { id: 1, text: '吃饭', done: true },
    { id: 2, text: '学习', done: false },
    { id: 3, text: '睡觉', done: true }
]

const todosSlice = createSlice({
    name: 'todos',
    initialState: initialState,
    reducers: {
        todoAdded(state, action) {
            const newstate = JSON.parse(JSON.stringify(state))
            newstate.push({
                id: newstate.length === 0 ? 1 : newstate[newstate.length - 1].id + 1,
                text: action.payload,
                done: false
            })
            return newstate
        },
       todoToggled(state, action) {
       },
    }
})

export default todosSlice.reducer

根文件 index.js

// 导入 Provider 组件
import { Provider } from 'react-redux'
// 导入创建好的 store
import store from './store'
 
ReactDOM.render(
  <Provider store={store}>
    <App />
  </Provider>,
  document.querySelector('#root')
)

todoMain.js 组件

​​​​​​​import { useSelector, useDispatch } from 'react-redux'

// 访问 list状态
const list = useSelector(state => state.todos) 

// 修改 list状态
const dispatch = useDispatch()
dispatch(todoAdded(inputValue))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Redux 新教程Redux Toolkit的使用 的相关文章

随机推荐

  • 趋势拟合策略量化分析

    根据趋势拟合的量化分析方法 是对股票价格历史数据进行曲线拟合 从而预测出未来几天的股价 在本文所示的程序中 用fndays表示所用历史数据的天数 pndays表示预测未来的天数 例如我们可以用过去10天的价格预测未来3天的股票价格 1 数据
  • 什么是MFC中的“单个文档”和“多个文档”?

    2023年5月14日 周日中午 单个文档 比如windows自带的记事本软件就是单个文档的 因为如果你想再创建一个新的文本 必须在外面新建一个新的记事本程序 或者说 如果你想同时写两个文本 就必须在外面新建一个新的记事本程序 你不能在一个文
  • IOS手机上点击input 输入框,页面会自动放大

    解决办法 使用禁止缩放页面来完成
  • XY提供面试题

    1 软件测试的流程是什么 1 需求调查 全面了解系统概况 应用领域 软件开发周期 软件开发环境 开发组织 时间安排 功能需求 性能需求 质量需求及测试要求等 根据系统概况进行项目所需的人员 时间和工作量估计以及项目报价 2 制定初步的项目计
  • Python图像处理-1.pil读取图像,显示图像

    from PIL import Image import matplotlib pyplot as plt pil im1 Image open pic1 png pil im2 Image open pic1 png convert L
  • 聊聊大数据(一)——大数据的存储

    大数据 现在可谓越来越火了 不管是什么行业 也不敢是不是搞计算机的 都要赶个集 借着这股热潮 亦或炒作 亦或大干一番 尤其是从事IT行业的 不跟 大数据 沾点边 都不好意思出去说自己是干IT的 大数据 一词 已无从考证具体是什么时候兴起的
  • GAMES101 Lec 07~09:Shading 定义、着色模型、着色频率、图形渲染管线、纹理

    3dMax 导出一个模型文件包含内容 顶点坐标 法线 边的关系 model 模型 空间中有了一个摄像机 Model 通过变换可以让摄像机放在原点 View 三维空间的模型变换到屏幕上 Projection 通过采样进行光栅化 Rasteri
  • Java方法求最大值

    package Methoud 用方法求最值 public class M5 public static void main String args int ages 23 58 64 75 64 int max getArryMaxDat
  • 诺基亚如何利用计算机上网,诺基亚E63的WIFI上网功能全教程

    手机端设置 依次点击 功能表 工具 设置 连接 接入点 选中 增加新接入点 1 连接名称 诺基亚e63连接wifi 任意设定 最好设中文或数字 没测试过英文得 2 选择承载方式 为 无线局域网 3 WLAN网络名称 推荐用 搜索图片名称 获
  • node 实现h264视频流buffer转码flv并使用websocket发送

    背景 硬件海康旧监控 编写node服务端以实现网页播放 调用了之前用C封装好的海康接口 视频数据由接口通过回调函数传参过来形成h64裸数据Buffer 本博客记录的就是如何从视频裸流 Buffer转码并回传给websocket 直接上代码
  • 线程的生命周期 笔记

    1 新建 new Thread 进入此状态 2 Thread start 进入就绪状态 或者 在运行状态执行yield 放弃CPU的执行转到就绪状态 或者是阻塞状态转入 3 阻塞状态 sleep 同步锁获取失败进入阻塞状态 执行了wait方
  • 为Jira提供的自动化测试跟踪功能

    在敏捷 DevOps CI CD以及其他任何我们想加入的行业词汇的世界里 开发人员和测试人员面临着快速交付高质量 功能性软件的巨大压力 需求必须由一系列的测试来支持 这样才能看到分配的需求是否得到了满足 许多组织在Jira 或其他平台 中手
  • torch转onnx模型

    torch转onnx模型 一 前言 onnx是开放神经网络交换格式 用于不同框架之间的迁移 推理方面比原生的torch快很多 本文以MobilenetV3做分类任务为例 实现模型转换 二 使用步骤 1 torch转换为onnx 代码如下 t
  • Java开发利器Eclipse和IDEA

    一 文本编辑工具 1 1 EditPlus EditPlus是一款由韩国 Sangil Kim ES Computing 出品的小巧但是功能强大的可处理文本 HTML和程序语言的Windows编辑器 你甚至可以通过设置用户工具将其作为C J
  • Spring boot项目打包war包并将class打包jar包放入war包中

    SpringBootApplication public class SpringBootWarApplication extends SpringBootServletInitializer Override protected Spri
  • Android图表年度最强总结,一篇文章从入门到精通!

    说到Android图表 不得不说一说MPAndroidChart这个强大的开源图表库 至于有多强大 先给你看看实现的效果图 如果效果图成功地引起了你的注意 那么 嘿嘿嘿 当然是把这篇文章看完 最后再点个赞 文章目录 添加依赖 创建视图以及简
  • 迎战 ChatGPT,谷歌聊天机器人 Bard 正式开放测试

    来源 极客邦科技 InfoQ 作者 刘燕 3 月 21 日晚间 谷歌开放了其聊天机器人 Bard 的测试 Bard 最初将可供美国和英国的部分用户使用 用户可以在 bard google com 上注册申请测试 不过谷歌表示推出速度会很慢
  • 【计算机视觉】直接线性变换(DLT)求解P矩阵(3 加入坐标的归一化)(附MATLAB代码)

    引言 本来上一篇帖子就已经达到了精度要求 不过经过同学提醒才发现老师的作业要求中有要求考虑归一化 emmmmm 坐标归一化 进行归一化的必要性和方法参考 计算机视觉中的多视几何 中的描述 上面的是从 2D到2D的结论 不过与从3D到2D的结
  • Python Matplotlib库:统计图补充

    作者简介 人工智能专业本科在读 喜欢计算机与编程 写博客记录自己的学习历程 个人主页 小嗷犬的博客 个人信条 为天地立心 为生民立命 为往圣继绝学 为万世开太平 本文内容 Python Matplotlib库 统计图补充 Python Ma
  • Redux 新教程Redux Toolkit的使用

    关于更新redux 唏嘘 还是跟不上时代的步伐了 哭唧唧 花费了不少的时间学习完redux后 还没用就发现官网的redux更新了新的使用用法 Redux Toolkit 于是乎硬着头皮翻译了一遍官网的Redux Toolkit 整理出最新的