Redux(@reduxjs/toolkit react-redux)

一、安装

// npm
npm i @reduxjs/toolkit react-redux 

// yarn
yarn add @reduxjs/toolkit react-redux 

二、基本使用

1. 在 src 目录下创建 store/index 文件

// store/index.js
import { configureStore } from '@reduxjs/toolkit'

// 通过 configureStore 创建 store
const store = configureStore({
  // 传入 reducer
  reducer: {},
})

export default store

2. 在 main.jsx 中,使用 Provider 组件 传递 store 给组件

import React from 'react'
import ReactDOM from 'react-dom/client'
import { Provider } from 'react-redux' // 导入 Provider
import store from './store/index.js' // 导入 store
import App from './App.jsx'
import './index.css'

ReactDOM.createRoot(document.getElementById('root')).render(
  <React.StrictMode>
    {/* 使用 Provider 传递 store 给组件 */}
    <Provider store={store}>
      <App />
    </Provider>
  </React.StrictMode>,
)

3. 创建 slices(module)

在 store 目录下创建一个 slices 的文件夹,用来存储每一个 切片
在这里我们创建一个 counter 的 slice
在这里插入图片描述

// counter.js
import { createSlice } from '@reduxjs/toolkit'

// 初始化狀態
const initialState = {
  counter: 0,
}

// 创建 slice
const counterSlice = createSlice({
  name: 'counter', // slice 的名稱
  initialState, // 初始化狀態
  // 挂载方法 actions
  reducers: {
    // 对 state.counter 进行 +1 操作
    increment: (state) => {
      state.counter += 1
    },

    // 对 state.counter 进行 -1 操作
    decrement: (state) => {
      state.counter -= 1
    },
  },
})

// 导出 actions
export const { increment, decrement } = counterSlice.actions
// 导出 reducer
export default counterSlice.reducer

这样我们就创建好一个 counter 的 切片了

4.在页面中使用

在 src 目录下的 App.jsx(或 App.js)文件

// App.jsx(或 App.js)
import { Button } from 'antd'
import { useSelector, useDispatch } from 'react-redux'
import { increment, decrement } from './store/slices/counterSlice'

function App() {
  // useSelector 用于从 store 中获取数据
  const counter = useSelector((state) => state.counter.counter)

  // useDispatch 用于获取 dispatch 函数,用于派发 action
  const dispatch = useDispatch()

  return (
    <>
      <section>
        <p>App - {counter}</p>
        <div>
          {/* 使用 dispatch 派发增减 counter 的事件 */}
          <Button onClick={(e) => dispatch(decrement())}>- 1</Button>
          <Button onClick={(e) => dispatch(increment())}>+ 1</Button>
        </div>
      </section>
    </>
  )
}

export default App

下面我们来看一下效果
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值