【React】react项目中的redux使用

1. store目录结构设计

2. react组件中使用store中的数据------useSelector

3. react组件中修改store中的数据------useDispatch

4. 示例

  • react-basic\src\store\moduels\counterStore.js
javascript 复制代码
import { createSlice } from '@reduxjs/toolkit'

const counterStore = createSlice({
    name: 'counter',
    // 初始化state
    initialState: {
        count: 0,
    },
    // 修改状态的方法,支持直接修改
    reducers: {
        plus(state) {
            state.count++
        },
        minus(state) {
            state.count--
        }
    }
})

const { plus, minus } = counterStore.actions
const reducer = counterStore.reducer

// 按需导出
export { plus, minus }
// 默认导出
export default reducer
  • react-basic\src\store\index.js
javascript 复制代码
import { configureStore } from "@reduxjs/toolkit";
import counterReducer from './moduels/counterStore'

const store = configureStore({
    reducer: {
        counter: counterReducer
    }
})

export default store
  • react-basic\src\index.js
javascript 复制代码
// 项目的入口文件,从这里开始运行

// react必要的核心包
import React from 'react';
import ReactDOM from 'react-dom/client';
import store from './store/index'
import { Provider } from 'react-redux'
// 项目的根组件
import App from './App';

// 把根组件渲染到id为root的dom节点上
// react-basic\public\index.html
const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
  <Provider store={store}>
    <App />
  </Provider>
);
  • react-basic\src\App.js
javascript 复制代码
import { useSelector, useDispatch } from 'react-redux'
import { plus, minus } from './store/moduels/counterStore';

function App() {
  const { count } = useSelector(state => state.counter)
  const dispatch = useDispatch()
  return (
    <div className="App">
      <button onClick={()=>dispatch(plus())}>+1</button>
      {count}
      <button onClick={()=>dispatch(minus())}>-1</button>
    </div>
  );
}

export default App;

5. 提交action传参

  • react-basic\src\store\moduels\counterStore.js
javascript 复制代码
import { createSlice } from '@reduxjs/toolkit'

const counterStore = createSlice({
    name: 'counter',
    // 初始化state
    initialState: {
        count: 0,
    },
    // 修改状态的方法,支持直接修改
    reducers: {
        plus(state) {
            state.count++
        },
        minus(state) {
            state.count--
        },
        addToNum(state, actions) {
            state.count = actions.payload
        }
    }
})

const { plus, minus, addToNum } = counterStore.actions
const reducer = counterStore.reducer

// 按需导出
export { plus, minus, addToNum }
// 默认导出
export default reducer
  • react-basic\src\App.js
javascript 复制代码
import { useSelector, useDispatch } from 'react-redux'
import { plus, minus, addToNum } from './store/moduels/counterStore';

function App() {
  const { count } = useSelector(state => state.counter)
  const dispatch = useDispatch()
  return (
    <div className="App">
      <button onClick={()=>dispatch(plus())}>+1</button>
      {count}
      <button onClick={()=>dispatch(minus())}>-1</button>
      <button onClick={() => dispatch(addToNum(10))}>add to 10</button>
      <button onClick={() => dispatch(addToNum(20))}>add to 20</button>
    </div>
  );
}

export default App;

6. 参考

黑马程序员react教程

相关推荐
宿67421 小时前
vue3-包管理器
前端·vue.js
@PHARAOH21 小时前
WHAT - Remix 入门和基本实践:理解两套产物
前端·remix
mayaairi1 天前
Vue2 生命周期完全指南:从创建到销毁的8个钩子函数
前端·javascript·vue.js
研☆香1 天前
一个简单的气泡弹窗制作
javascript
xy34531 天前
axure9.0 如何打造一个计时器(简单版)
前端·ui·html·axure·原型·产品设计
大模型丫丫1 天前
用 TypeScript、NestJS 和 LangGraph 搭建一个可控的 AI Agent
javascript·人工智能·typescript
IMPYLH1 天前
HTML 的 <pre> 元素
前端·javascript·html
shmily麻瓜小菜鸡1 天前
JavaScript / TypeScript 易踩坑知识点 —— 异步编程类
开发语言·javascript·typescript
tsumikistep1 天前
【前端】Vue + Axios 跨域问题实战:7070 代理转发 8080 + 401 报错分析(黑马外卖)
前端·javascript·vue.js
lichenyang4531 天前
鸿蒙首页从等高商品 Grid 到双列瀑布流:同一张图也能做出小红书式浏览节奏
前端