React和Vite集成Dva.js

578 阅读1分钟

React和Vite集成Dva.js

Dva是比较好用的状态管理工具,官方案例是脚手架模板,不方便用来参考集成现有项目,于是写个极简案例记录一下,帮助用户3分钟就能学会配置。

案例分为以下4步:

1.安装dva

// 安装
yarn add dva dva-core react-redux

2.配置models

// models/global.js
export default {
    // model名称
    namespace: 'global',
    // model变量
    state: {
        count: 0
    },
    // 异步函数
    effects: {
        // * getData({ params }, { put, call }) {
        // const res = yield api.getData(params)
        // if (res && res.status === 200) {
        //     return res.data || {}
        // } else {
        //     return {};
        // }
        // },
    },
    // 同步函数
    reducers: {
        saveGlobalState(state, { params }) {
            return { ...state, ...params };
        },
    },
};
// models/index.js
import { create } from 'dva-core';
import global from './global';
import user from './user'; // 与global类似

// 初始化app和models
const models = [global, user];
const app = create();
models.forEach(item => app.model(item));
app.start();

// 返回store
const store = app._store;
export default store;

3.挂载models

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

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

4.使用models

// 组件使用
import { useSelector, useDispatch } from 'react-redux';
import './App.css'

function App() {
  const { count } = useSelector((state) => state.global);
  const dispatch = useDispatch();
  return (
    <>
      <div>{count}</div>
      <button
        onClick={() => {
          dispatch({
            type: 'global/saveGlobalState',
            params: { count: count + 1 }
          });
        }}
      >
        add
      </button>
    </>
  )
}

export default App