【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教程

相关推荐
阿珊和她的猫3 小时前
v-scale-scree: 根据屏幕尺寸缩放内容
开发语言·前端·javascript
加班是不可能的,除非双倍日工资7 小时前
css预编译器实现星空背景图
前端·css·vue3
wyiyiyi7 小时前
【Web后端】Django、flask及其场景——以构建系统原型为例
前端·数据库·后端·python·django·flask
gnip8 小时前
vite和webpack打包结构控制
前端·javascript
excel8 小时前
在二维 Canvas 中模拟三角形绕 X、Y 轴旋转
前端
阿华的代码王国8 小时前
【Android】RecyclerView复用CheckBox的异常状态
android·xml·java·前端·后端
一条上岸小咸鱼8 小时前
Kotlin 基本数据类型(三):Booleans、Characters
android·前端·kotlin
Jimmy8 小时前
AI 代理是什么,其有助于我们实现更智能编程
前端·后端·ai编程
ZXT9 小时前
promise & async await总结
前端
Jerry说前后端9 小时前
RecyclerView 性能优化:从原理到实践的深度优化方案
android·前端·性能优化