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

相关推荐
菜鸟一枚在这1 小时前
深入解析设计模式之单例模式
开发语言·javascript·单例模式
CL_IN1 小时前
企业数据集成:实现高效调拨出库自动化
java·前端·自动化
浪九天2 小时前
Vue 不同大版本与 Node.js 版本匹配的详细参数
前端·vue.js·node.js
Java知识技术分享2 小时前
使用LangChain构建第一个ReAct Agent
python·react.js·ai·语言模型·langchain
qianmoQ3 小时前
第五章:工程化实践 - 第三节 - Tailwind CSS 大型项目最佳实践
前端·css
C#Thread3 小时前
C#上位机--流程控制(IF语句)
开发语言·javascript·ecmascript
椰果uu3 小时前
前端八股万文总结——JS+ES6
前端·javascript·es6
微wx笑3 小时前
chrome扩展程序如何实现国际化
前端·chrome
~废弃回忆 �༄3 小时前
CSS中伪类选择器
前端·javascript·css·css中伪类选择器
CUIYD_19894 小时前
Chrome 浏览器(版本号49之后)‌解决跨域问题
前端·chrome