更简单的Redux工具 Toolkit

1 安装

npm install @reduxjs/toolkit

2 创建store目录

创建store文件夹,里面包含入口文件index.jsx,以及自定义的reduces方法main.jsx的slices文件夹,其中main1.jsx、main2.jsx表示每一个相对独立的reduces数据操作集
store
***slices
******main1.jsx
******main2.jsx
******…
***index.jsx

3 定义store结构

index.jsx(在项目入口处引入该文件)

import { configureStore } from '@reduxjs/toolkit'
import main1 from './slices/main1'
import main2 from './slices/main2'

export const store = configureStore({
  reducer: { main1, main2 }
})

export default store

main1.jsx(在页面中引入该文件)

import { createSlice, createAsyncThunk } from '@reduxjs/toolkit'

const initialState = {
  status: 10,
}

export const getRequestFn = createAsyncThunk( // 异步接口修改state
  'requestName',
  async () => {
    try {
      // 触发一个请求
      const { data } = await requestApi()
      return data
    } catch (err) {
      console.log('requestName', err)
    }
  }
)

const mainSlice = createSlice({
  name: 'main1',
  initialState,
  reducers: {
    increment(state, action) {
      state.status = state.status + action.payload
    },
    decrement(state, action) {
      state.status = state.status - action.payload
    },
    changeValue(state, action) {
      state.status = action.payload
    },
  },
  extraReducers(builder) {
    builder
      .addCase(getRequestFn.fulfilled, (state, actions) => {
        if (!actions.payload) return
        state.status = actions.payload.status // 赋值为请求的data.status
      })
  }
})

export const actions = mainSlice.actions

export default mainSlice.reducer

4 使用

在项目入口处引入store/index.jsx,
并在需使用store的组件中引入store/slices/main.jsx
项目中的具体使用如下:

import React, { memo } from 'react'
import { useSelector, useDispatch } from 'react-redux'
// 这里引入main1的地址,main1、main2按需引入
import { actions, getRequestFn } from '**/store/slices/main1'

function Home() {
    const { status } = useSelector(state => state.main)
	const dispatch = useDispatch()
	const handleAdd = () => {
		dispatch(actions.increment(1)) // status => 11
	}

	const handleAssign = () => {
		dispatch(actions.changeValue(100)) // status => 100
	}

	const handleRequest = () => {
		dispatch(getRequestFn()) // status => request data.status
	} 

	return <div>
		<div onClick={handleAdd}></div>
		<div onClick={handleAssign}></div>
		<div onClick={handleRequest}></div>
	</div>
}

export default Home

Redux官网

  • 7
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值