DVAJS(二)使用

2021-01-13  本文已影响0人  Viewwei
$ npm install dva-cli -g
$ dva -v
dva-cli version 0.9.1
$ dva new dva-quickstart
$ npm start
----------------------------src
      |____index //用来创建dva和注册dva的
      |____router // 路由文件
      |____models //保存model文件
import React from 'react';
import { Router, Route, Switch } from 'dva/router';
import IndexPage from './routes/IndexPage';
import User from "./routes/user"
import {UserDynamic} from "./dynamic/index"
function RouterConfig({ history }) {
  return (
    <Router history={history}>
      <Switch>
        <Route path="/" exact component={IndexPage} />
        <Route path="/user" component={UserDynamic}/>
      </Switch>
    </Router>
  );
}

export default RouterConfig;


export default {

  namespace: 'example', //命名必须唯一

  state: { //声明state
    currentState:0
  },

  subscriptions: {
//注册model的时候使用
    setup({ dispatch, history }) {  // eslint-disable-line
      console.log("注册数据");
    },
  },

  effects: {
    //副作用函数,数据同步异步请求在这里进行
    *fetch({ payload }, { call, put }) {  // eslint-disable-line
  //
      yield put({ type: 'save' ,action:payload});
    },
  },

  reducers: {
  //reducers 集中处理数据
    save(state, action) {
     const {action:{type}} =action 
     if (type =="add"){
       state.currentState +=1
       return {...state}
     }
      return { ...state, ...action.payload };
    },
  },

};

-使用组件使用dva

import React from 'react';
import { connect } from 'dva';
import {addAction} from "../action/exampleAction"
function IndexPage(props) {
  const{state,add} = props
  return (
    <div>
        <h2>dva 计算</h2>
        <p>当前值:{state}</p>
        <button onClick={e=>add()}>增加</button>
    </div>
  );
}
IndexPage.propTypes = {
};

export default connect(({example})=>({state:example.currentState}),{add:addAction})(IndexPage);
//使用connect进行组件的高级封装。connect需要mapstate,和mapdispatch
import dynamic from 'dva/dynamic';
import {app} from "../index"
export const UserDynamic = dynamic({
    app,
    models:()=>[import("../models/user"),],
    component:() =>import("../routes/user")
})

然后在路由文件修改为

import React from 'react';
import { Router, Route, Switch } from 'dva/router';
import IndexPage from './routes/IndexPage';
import User from "./routes/user"
import {UserDynamic} from "./dynamic/index"
function RouterConfig({ history }) {
  return (
    <Router history={history}>
      <Switch>
        <Route path="/" exact component={IndexPage} />
        <Route path="/user" component={UserDynamic}/> //使用动态组件
      </Switch>
    </Router>
  );
}
上一篇下一篇

猜你喜欢

热点阅读