1、在model文件夹下创建.js文件其中这些文件会识别为model文件src/models下的文件src/pages/models下的文件src/pages下所有model.ts文件2、创建model(即reducer)export default{namespace:'model名称',state:数据初始值,   其中:优先级低于app中设置的初始值const app = dva({initialState: { count: 1 },});reducers:{  同步方法xx(state,action){改变state的方法},xxx(state,action){改变state的方法}},effects:{  异步方法*xx({获取参数名1,获取参数名2,...},{call,put}){const res=yield call(异步方法,参数1,参数2,...);异步请求数据后,调用同步方法改变model中的数据yield put({type:'同步方法名',数据})}},subscriptions:{  订阅监听,在app.start()时被执行xx({ history, dispatch }) {监听路由history.listen(({ pathname }) => { if (pathname === '/') {...dispatch({ type: 'xx' });}});监听窗口变化window.onresize=()=>{...}}}3、在主入口文件index.js中注册modelapp.model(require('./models/model文件').default);4、组件连接model(和react-redux写法相同)import {connect} from 'dva'import React,{Component} from 'react'import {connect} from 'dva'class App extends Component{render(){...}}获取model中的状态const mapStateToProps=(state)=>{return {productList:state.模块名}}分发action(若添加了该参数,则this.props.dispatch无效,不添加可以获取)const mapDispatchToProps=(dispatch)=>{return {x(){dispatch({type:'模块名/方法名',数据})}}}this.props.名称调用export default connect(mapStateToProps,mapDispatchToProps)(App)5、合并多个model(1)在models下创建index.js入口文件,并添加以下内容const context=require.context('./',false,/\.js$/);export default context.keys().filter(item=>item!=='./index.js').map(key=>context(key));(2)在index主入口文件,修改app.model为require('./models').default.forEach(key=>app.model(key.default));

代码示例:
model:

import * as api from '../services/example'export default{namespace:'product',state:{productList:[{name:'jeff'},{name:'jack'}]},reducers:{updateList(state,action){let currenProductList=deepClone(state);currenProductList.productList.push(action.payload);return currenProductList;}},effects:{*asyncFun({payload},{call,put}){yield put({type:'updateList',payload})},*asyncPro({payload},{call,put}){const res=yield call(api.getProduct,payload);yield put({type:'updateList',payload:res.data})}},subscriptions: {setup({ history, dispatch, }) {// 监听 history 变化,当进入 `/` 时触发 `load` actionhistory.listen(({ pathname }) => {if (pathname === '/') {console.log('aa');//   dispatch({ type: 'load' });}});}}
}//深拷贝方法
function deepClone(arr){let _obj=JSON.stringify(arr),objClone=JSON.parse(_obj);return objClone;
}

组件:

import React,{Component} from 'react'
import {connect} from 'dva'
import Product from '../../components/Product'
import {Link,NavLink,routerRedux} from 'dva/router'class App extends Component{go=()=>{this.props.history.push('/');}go2=()=>{this.props.dispatch(routerRedux.push('/'));}go3=()=>{this.props.addAsync({name:'eason'});}render(){const {productList,dispatch}=this.propsreturn(<div><Product dispatch={dispatch} productList={productList}/><button onClick={()=>{this.props.add()}}>添加2</button><Link to='/'>跳转</Link><NavLink to='/'>跳转2</NavLink><button onClick={this.go}>编程式跳转</button><button onClick={this.go2}>router-redux</button><button onClick={this.go3}>异步</button></div>)}
}const mapStateToProps=(state)=>{return {productList:state.product}
}const mapDispatchToProps=(dispatch)=>{return {add(){dispatch({type:'product/updateList',payload:{name:'tom'}})},addAsync(payload){console.log(payload);dispatch({type:'product/asyncFun',payload:payload})}}
}export default connect(mapStateToProps,mapDispatchToProps)(App)

index.js:

import dva from 'dva';
import './index.css';
// import createHistory from 'history/createBrowserHistory';
import { createBrowserHistory as createHistory } from 'history';// 1. Initialize
const app = dva({history: createHistory(),
});
// const app=dva();// 2. Plugins
// app.use({});// 3. Model
app.model(require('./models/example').default);
app.model(require('./models/product').default);// 4. Router
app.router(require('./router').default);// 5. Start
app.start('#root');

dva model数据管理相关推荐

  1. Dva model层的自己的理解

    刚接触Dva的时候,对于model感觉一片茫然,看不懂不知道是什么意思.在之后的公司一个项目中慢慢的对model有了基本的理解. model.js: model层一般包含几个部分: namespace ...

  2. dva model里面的effects函数可以调用effects函数

    在fetchIndCreate函数中调用refreshTree函数: effects: { *refreshTree({ payload }, { call, put }){const datas = ...

  3. dva 打包多个html,使用dva+umi+antd构建页面(一)

    使用dva+umi+antd构建页面 首先确保安装npm或者yarnhtml 建立新应用 首先建立应用目录node mkdir myapp && cd myapp 推荐使用 yarn ...

  4. dcmm认证的条件_DCMM认证 数据管理能力成熟度模型评估

    DCMM认证 数据管理能力成熟度评估模型 添加时间:2020-04-01 16:00:04   浏览: DCMM认证:数据管理能力成熟度评估模型(Data Management Capability ...

  5. 200行代码写一个简易的dva

    在美团实习的时候,第一次接触到dva这样的react框架,回学校的时候,就想有机会自己实现一下这样的框架,虽然自己水平有限,但是可以试一试哈. 目标是实现dva model的同步和异步 dispatc ...

  6. dva源码解析(一)

    转载 :原文 https://blog.csdn.net/zp1996323/article/details/73315096 写在前面 dva是蚂蚁金服推出的一个单页应用框架,对redux,reac ...

  7. dva的用法_dva入门讲解

    这里有一份简洁的前端知识体系等待你查收,看看吧,会有惊喜哦~如果觉得不错,恳求star哈~ dva是什么? DVA 是基于 redux.redux-saga 和 react-router 的轻量级前端 ...

  8. dva的简单使用(一)

    一.前言 在实际的前端开发中,像 cardList 中包含的那些数据,一般都是通过发起异步 http 请求从后端服务中获得. 我们希望把数据逻辑(cardList 相关逻辑)和视图逻辑(PuzzleC ...

  9. 关于umi dva的使用

    1.配置,在config.js中开启配置 dva: {immer: true, // 表示是否启用 immer 以方便修改 reducerhmr: true, // 表示是否启用 dva model ...

最新文章

  1. 中职计算机php学啥,计算机专业都学什么主要课程有什么_中职中专网
  2. stk在计算机仿真中的应用_浅析仿真技术在激光系统设计中的应用
  3. 每日一笑 | 程序员千万不能轻易去网吧!
  4. 巩固知识体系!淘宝秒杀脚本java
  5. 如何用matlab编辑热方程,MATLAB编辑一维热传导方程的模拟程序
  6. Git小乌龟分支操作
  7. 《经典书籍推荐》程序员修炼之道
  8. WebClient Exceeded limit on max bytes to buffer : 262144 异常解决
  9. 编译原理实验三 自下而上语法分析
  10. 英文面试:自我介绍篇
  11. 蓝牙耳机什么牌子的好?口碑、销量双高的十大蓝牙耳机品牌!
  12. 百度搜索限定时间_看别人用百度搜东西,让我怀疑自己用了假的百度
  13. 角度,弧度,三角函数
  14. 高分辨率影像卫星之美国
  15. ChatGPT教程之 06 ChatGPT 和 DevOps 用例概述
  16. 蓝桥杯2021年第十二届省赛-杨辉三角形
  17. python 声音基频f0_【aubio】音频处理笔记
  18. Python机器学习笔记 Grid SearchCV(网格搜索)
  19. 量子计算机与人脑接口,首次实现25个量子接口之间量子纠缠 清华刷新纪录
  20. android标题栏添加按钮_2019最新Android常用开源库总结(持续更新,建议收藏)

热门文章

  1. linux磁盘检测和修复
  2. DAY 4 | 自学前端第四天
  3. c语言程序设计精髓 第13周练兵题
  4. Light OJ 1197
  5. 打开html文件是文字模式,为什么我打开的有些网页成了全文字格式的?
  6. 万字长文:用Python轻轻松松操作Excel、Word、CSV!
  7. 一根木根随机折成三截能拼成三角形的概率
  8. 学以致用——微博文章内容统计分析之一(Excel+GraphLab)
  9. 计算机网络进入特权模式在哪里,计算机四级考试网络工程师考点一
  10. 采样定理与奈奎斯特极限