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

相关推荐
我是天龙_绍7 分钟前
Easing 曲线 easings.net
前端
知识分享小能手10 分钟前
微信小程序入门学习教程,从入门到精通,电影之家小程序项目知识点详解 (17)
前端·javascript·学习·微信小程序·小程序·前端框架·vue
訾博ZiBo12 分钟前
React组件复用导致的闪烁问题及通用解决方案
前端
Dever13 分钟前
记一次 CORS 深水坑:开启 withCredentials 后Response headers 只剩 content-type
前端·javascript
临江仙45516 分钟前
流式 Markdown 渲染在 AI 应用中的应用探秘:从原理到优雅实现
前端·vue.js
Hilaku27 分钟前
为什么我开始减少逛技术社区,而是去读非技术的书?
前端·javascript·面试
m0_7280331343 分钟前
JavaWeb——(web.xml)中的(url-pattern)
xml·前端
猪哥帅过吴彦祖1 小时前
第 8 篇:更广阔的世界 - 加载 3D 模型
前端·javascript·webgl
七月十二1 小时前
[Js]使用highlight.js高亮vue代码
前端
Asort1 小时前
JavaScript设计模式(十二)——代理模式 (Proxy)
前端·javascript·设计模式