redux之redux-toolkit

由于redux的各种规范与插件异常繁琐,所以官方推出了redux-toolkit这个库来简化redux的使用

安装

npm install @reduxjs/toolkit

使用

目录

一般我们创建store文件夹,来进行状态的管理
在这里插入图片描述

index.js

import { configureStore } from '@reduxjs/toolkit';
import counterSlice from './features/counterSlice';

export default configureStore({
    reducer: {
        counter: counterSlice
    },
});

counterSlice.js

import { createSlice } from '@reduxjs/toolkit';

export const counterSlice = createSlice({
    name: 'counter', 
    initialState: {
        count: 1,
    },
    reducers: {
        increment(state, { payload }) {
            state.count = state.count + payload.step; 
        },
        decrement(state) {
            state.count -= 1;
        },
    },
});

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

export const asyncIncrement = (payload) => (dispatch) => {
    setTimeout(() => {
        dispatch(increment(payload));
    }, 2000);
};

export default counterSlice.reducer; 

组件

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

import { increment, asyncIncrement } from '../toolkit-store/features/counterSlice'; 

function App() {
    const { count } = useSelector((state) => state.counter);
    const dispatch = useDispatch();
    return (
        <div className='App'>
            <button
                onClick={() => {
                    dispatch(increment({ step: 2 })); 
                }}
            >
                {count}
            </button>
            <hr />
            <button
                onClick={() => {
                    dispatch(asyncIncrement({ step: 1 }));
                }}
            >
                {count}
            </button>
        </div>
    );
}

export default App;

入口文件

ReactDOM.createRoot(document.getElementById('root')).render(
  <Provider store={store}>
    <React.StrictMode>
    	<App />
    </React.StrictMode>
  </Provider>
)

代码解释

index.js

  • 一般我们用configureStore来创建一个状态管理器,相关的额参数点击
  • 其中reducer后面可以跟一个对象,对象中包含的是通过createSlice创建reducer,他会被redux的combineReducer一起添加到跟容器中
  • 创建的官网解释 点击
  • 快速开始 官网

counterSlice.js

主要是定义状态和修改状态的方法

  1. createSlice中,我们没必要返回一个新的state,我们只需要改变其中的属性就可以,相关参数请点击,函数返回一个对象,对象中含有actionsreducer属性
  2. 创建切片需要name属性来标识切片
  3. 需要初始状态值
  4. 需要一个或多个reducers函数来定义更新状态的行为

组件

在组件中,我们最常用的两个api是useSelector, useDispatch 他是react-redux的方法

  • 第一个方法用来取出状态,第二个方法用来取出修改状态的行为
组件中的异步

redux-toolkit 已经支持异步,其内部还有thunk插件,注意他是一个高级函数

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值