全栈的自我修养 ———— redux入门(看这么一篇就够了!!!)

redux时react中负责状态管理的工具

一、下载

复制代码
npm I @reduxjs/toolkit react-redux

二、配置

1、目录

复制代码
modules里面可以定义多个store,index内负责收集这些store

2、store配置

这里定义了一个count参数和关于count的方法,一会用来测试

js 复制代码
import { createSlice } from '@reduxjs/toolkit'
const counterStore = createSlice({
    name: 'counter',
    initialState: {
        count: 0,
    },
    reducers: {
        setChannels (state,action){
            state.channelList = action.payload
        },
        increment(state) {
            state.count++
        },
        decrement(state) {
            state.count--
        },
        addToNum(state,action){
            console.log(state,action);
            state.count = action.payload
        }
    }
})
const { increment, decrement,addToNum } = counterStore.actions
const counterReducer = counterStore.reducer
export { increment, decrement,addToNum }
export default counterReducer

3、redux中index.js配置

js 复制代码
import { configureStore } from "@reduxjs/toolkit";
import counterReducer from "./modules/counterStore";
const store = configureStore({
    reducer: {
        counter: counterReducer,
    }
})
export default store

4、启动类中index.js配置

js 复制代码
import React from 'react';
import ReactDOM from 'react-dom/client';
import App from './App';
import store from './store';
import { Provider } from 'react-redux';
import './global.css'
const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
  <Provider store={store}>
    <App />
  </Provider>
);

三、使用

1、调用store的数据

js 复制代码
import { useSelector } from 'react-redux'
function App() {
  const { count } = useSelector(state => state.counter)
  return (
    <div>
      <div className='App'>
        {count}
      </div>
    </div>
  )
}
export default App;

2、调用store里面的方法

js 复制代码
import { useDispatch, useSelector } from 'react-redux'
import { increment, decrement } from './store/modules/counterStore'
function App() {
  const { count } = useSelector(state => state.counter)
  const dispatch = useDispatch()
  return (
    <div>
      <div className='App'>
        <button onClick={() => dispatch(decrement())}>-</button>
        <button onClick={() => dispatch(increment())}>+</button>
        {count}
      </div>
    </div>
  )
}
export default App;

3、改变store里面的值

js 复制代码
import { useDispatch, useSelector } from 'react-redux'
import { increment, decrement, addToNum } from './store/modules/counterStore'
function App() {
  const { count } = useSelector(state => state.counter)
  const dispatch = useDispatch()
  return (
    <div>
      <div className='App'>
        <button onClick={() => dispatch(decrement())}>-</button>
        <button onClick={() => dispatch(increment())}>+</button>
        {count}
        <button onClick={() => dispatch(addToNum(20))}>add To 20</button>
      </div>
    </div>
  )
}
export default App;
相关推荐
星夜离尘5610 小时前
MATLAB 工程实验:不等间隔流量积分,先把缺口与覆盖率说清楚
开发语言·matlab·时间戳·数据质量·数值积分
Ai-_Man10 小时前
Meta Muse还是不可以导出左侧所有对话,只能点进去单条内容导出,方法不对吗?
开发语言·人工智能·ai·小程序·c#·1024程序员节
梓豪csd10 小时前
消息订阅中心:谁该收到哪条通知
java·开发语言·人工智能·低代码·自动化·1024程序员节
学逆向的11 小时前
C 枚举变量
c语言·开发语言·网络安全
Sakura_j_h_11 小时前
Python 在定时任务里输出 emoji,UnicodeEncodeError 从哪来
开发语言·字符编码·windows·python·定时任务
paopaokaka_luck13 小时前
宠物门店经营管理系统(销售与库存联动、进货自动记账、 退换与退款关联、员工个人业绩、ECharts 经营分析、滞销识别与客户分层、宠物档案年龄计算)
前端·javascript·spring boot·mysql·echarts·mybatis·1024程序员节
空中湖13 小时前
用 React 写数据大屏:为什么我不建议用图表库
前端·react.js·前端框架
小成2023032026516 小时前
C++~07补充
开发语言·c++
鶴哥只手遮天17 小时前
jQuery 4.0 源码架构与工程实践-第 10 章 尺寸、几何与显隐
前端·javascript·jquery