Redux Toolkit工具使用

Redux Toolkit是Redux官方推出的工具集,因为Redux编写过程中会写很多的样板代码,对开发者不太友好,因此官方推出Redux Toolkit,Redux Toolkit就是对Redux的二次封装,用于高效 Redux 开发,使 Redux 的使用变得简单,下面用 Redux Toolkit 实现 TodoList 案例

npm i @reduxjs/toolkit

目录结构
在这里插入图片描述

创建状态切片

对于状态切片,我们可以理解为就是 Reducer 和 Action 的集合体;在 Redux 中,原本 Reducer 函数和 Action 对象需要分别创建,现在通过状态切片替代,它会返回 Reducer 函数和 Action 对象

通过引入 createSlice 创建切片,给 createSlice 调用返回的 reducer 起一个别名 TodosReducer ,避免跟其他的 reducer 冲突

import {
    createSlice } from "@reduxjs/toolkit"
const {
    reducer: TodosReducer, actions } = createSlice()
配置状态切片

createSlice 定义 name 使用常量,后续 reducer 其他地方夜也会使用到常量,如需更改,只需更改常量的值,导出常量;initialState 初始状态值;reducers 就是一个个小的reducer集合,导出 reducer 跟 action
详细配置参考链接: https://redux-toolkit.js.org/api/createSlice.

export const TODOS_FEATURE_KEY = "todos"
const {
    reducer: TodosReducer, actions } = createSlice({
   
  name: TODOS_FEATURE_KEY,
  initialState: [],
  reducers: {
   
    addTodo: (state, action) => {
   
		state.push(action.payload)
	}
  }
})
export const {
    addTodo } = actions
export default TodosReducer
创建 store

在 index.js 文件中创建 store, 使用 configureStore 配置 store,配置项中的reducer 对象的作用就是合并 reducer ,对应 redux 中的 combineReducers;devTools 配置为布尔值,这里非生产环境使用,

import {
    configureStore} from "@reduxjs/toolkit"
import TodosReducer, {
    TODOS_FEATURE_KEY } from "./todos.slice"

export default configureStore({
   
  reducer: {
    // combineReducers
    [TODOS_FEATURE_KEY]: TodosReducer
  },
  devTools: process.env.NODE_ENV !== "production"
})
Action 预处理

Action 被触发后, 可以通过 prepare 方法对 Action 进行预处理,就是在触发 reducer 之前去处理 Action ,Reducer. prepare 方法必须返回对象,原来的 createSlice 的配置 reducers 对象中的 reducer 函数也要配置为对象

addTodo: {
   
    reducer: (state, action) => {
   
    	console.log(action)
		state.push(action.payload)
	},
    prepare: todo => 
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值