Redux在React中的使用

1.构建方式

采用reduxjs/toolkit+reactredux方式
安装方式

npm install @reduxjs/toolkit react-redux

2.使用

创建目录

在这里插入图片描述
创建store文件夹,然后创建index对应模块如上图所示

编写counterStore.js

文章counterStore命名,名字可自行取

import {createSlice} from '@reduxjs/toolkit'
const counterStore=createSlice({
    name:'counter',
    //初始化状态数据
    initialState:{
        count:0
    },
    reducers:{
        increment(state){
            state.count++
        },
        decrement(state){
            state.count--
        },
        setCountData(state,action){
            state.count=action.payload
        }
    }
})
//解构创建action对象函数
const {increment,decrement,setCountData}=counterStore.actions
//获取reducer函数
const counterReducer=counterStore.reducer
export {increment,decrement,setCountData}
export default counterReducer

③编写index.js

import {configureStore} from "@reduxjs/toolkit"
import counterReducer from "./modules/counterStore";

//创建store组合子模块
const store=configureStore({
    reducer:{
        counter:counterReducer
    }
})
export default store

④在根组件导入
使用reactredux中Provider进行导入

import React from 'react';
import ReactDOM from 'react-dom/client';
import App from './App';
import store from "./store";
import {Provider} from "react-redux";

const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
    <Provider store={store}&gt;
        <App /&gt;
    </Provider&gt;
);

⑤在组件中使用
使用useSelector获取store中的数据

const ComponentDemo=()=&gt;{
    const {count}=useSelector(state =&gt; state.counter)
    return(
        <div&gt;
            {count}
        </div>
    )
}

export default ComponentDemo

使用useDispatch获取dispatch方法提交对应的方法改变state的值

const GrandSon=()=>{
    const dispatch=useDispatch()
    return(
        <div onClick={()=>{dispatch(decrement())}}>
            我是孙子组件
        </div>
    )
}

原文地址:https://blog.csdn.net/DyP__CSDN/article/details/134656191

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_28866.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注