React 第三方状态管理库相关 -- Redux & MobX 篇

一、redux

首先安装依赖:

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

示例代码:

javascript 复制代码
// src/store/index.js
import { configureStore } from '@reduxjs/toolkit'
import couterSlice from './couterSlice'

const store  = configureStore({
    reducer:{
        couterSlice
    }
})

export default store
javascript 复制代码
// src/store/couterSlice.js
import { createSlice } from '@reduxjs/toolkit';

const couterSlice = createSlice({
    name:'couterSlice',
    initialState:{ count: 0 },
    reducers:{
        increment: (state) => { state.count++ },
        decrement: (state) => { state.count++ }
    },
    extraReducers:(builder) => { }
})
export const { increment,decrement } = couterSlice.actions
export default couterSlice.reducer
javascript 复制代码
// src/main.jsx
import { StrictMode } from 'react'
import { createRoot } from 'react-dom/client'
import './index.css'
import App from './App.jsx'
import { Provider } from 'react-redux'
import store from '@/store'

createRoot(document.getElementById('root')).render(
  <StrictMode>
    <Provider store={store}>
      <App />
    </Provider>
  </StrictMode>,
)

具体使用示例:

javascript 复制代码
// src/App.jsx
import { useState } from 'react'
import reactLogo from './assets/react.svg'
import viteLogo from '/vite.svg'
import './App.css'
import { useSelector, useDispatch } from 'react-redux'
import { increment } from '@/store/couterSlice.js'

function App() {
  const [count, setCount] = useState(0)
  const dispatch = useDispatch()
  const counter = useSelector((state) => state.couterSlice)
  console.log(counter);
  return (
    <>
      <div>
        <a href="https://vite.dev" target="_blank">
          <img src={viteLogo} className="logo" alt="Vite logo" />
        </a>
        <a href="https://react.dev" target="_blank">
          <img src={reactLogo} className="logo react" alt="React logo" />
        </a>
      </div>
      <h1>Vite + React</h1>
      <div className="card">
        <button onClick={() => dispatch(increment())}>
          count is {counter.count}
        </button>
        <p>
          Edit <code>src/App.jsx</code> and save to test HMR
        </p>
      </div>
      <p className="read-the-docs">
        Click on the Vite and React logos to learn more
      </p>
    </>
  )
}

export default App

持久化存储参考: react-redux 数据持久化-CSDN博客

二、MobX

首先安装依赖:

javascript 复制代码
npm install mobx mobx-react-lite

示例代码:

javascript 复制代码
// src/store/index.js
import React from 'react'
import counter from './counterStore'

class RootStore {
    constructor() {
        this.counterStore = counter
    }
}

const rootStore = new RootStore()
const context = React.createContext(rootStore)
const useStore = () => React.useContext(context)
export { useStore }
javascript 复制代码
// src/store/counterStore.js
import { makeAutoObservable } from 'mobx'

class CounterStore {
    count = 0
    constructor() {
        makeAutoObservable(this)
    }
    addCount = () => {
        this.count++
    }
    get Count() {
        return this.count
    }
}

const counter = new CounterStore()
export default counter
javascript 复制代码
// src/App.jsx
import { observer } from 'mobx-react-lite'
import { useStore } from './store'
function App() {
  const store = useStore()
  return (
    <div className="App">
      <button onClick={() => store.counterStore.addCount()}>
        {store.counterStore.count}
      </button>
    </div>
  )
}
export default observer(App)
相关推荐
天宇&嘘月2 小时前
web第三次作业
前端·javascript·css
小王不会写code2 小时前
axios
前端·javascript·axios
发呆的薇薇°3 小时前
vue3 配置@根路径
前端·vue.js
luckyext4 小时前
HBuilderX中,VUE生成随机数字,vue调用随机数函数
前端·javascript·vue.js·微信小程序·小程序
小小码农(找工作版)4 小时前
JavaScript 前端面试 4(作用域链、this)
前端·javascript·面试
前端没钱4 小时前
前端需要学习 Docker 吗?
前端·学习·docker
前端郭德纲4 小时前
前端自动化部署的极简方案
运维·前端·自动化
海绵宝宝_4 小时前
【HarmonyOS NEXT】获取正式应用签名证书的签名信息
android·前端·华为·harmonyos·鸿蒙·鸿蒙应用开发
码农土豆5 小时前
chrome V3插件开发,调用 chrome.action.setIcon,提示路径找不到
前端·chrome
鱼樱前端5 小时前
深入JavaScript引擎与模块加载机制:从V8原理到模块化实战
前端·javascript