React model

有几个基本的属性:
namespace:model 的命名空间,只能用字符串。一个大型应用可能包含多个 model,通过namespace区分。
state:当前 model 状态的初始值,表示当前状态。
reducers:用于处理同步操作,可以修改 state,由 action 触发。reducer 是一个纯函数,它接受当前的 state 及一个 action 对象。action 对象里面可以包含数据体(payload)作为入参,需要返回一个新的 state。
effects:用于处理异步操作(例如:与服务端交互)和业务逻辑,也是由 action 触发。但是,它不可以修改 state,要通过触发 action 调用 reducer 实现对 state 的间接操作。
effects 有三个参数:
put:用于触发 action 。

yield put({ type: 'todos/add', payload: 'Learn Dva' });

call:用于调用异步逻辑,支持 promise 。

const result = yield call(fetch, '/todos');

select:用于从 state 里获取数据。

const todos = yield select(state => state.todos);

action:是 reducers 及 effects 的触发器,一般是一个对象,形如{ type: ‘add’, payload: todo },通过 type 属性可以匹配到具体某个 reducer 或者 effect,payload 属性则是数据体,用于传送给 reducer 或 effect。
例子

import { Effect, Reducer } from 'umi';
​
import { CardListItemDataType } from './data.d';
import { queryFakeList } from './service';
​
export interface StateType {list: CardListItemDataType[];
}
​
export interface ModelType {namespace: string;state: StateType;effects: {fetch: Effect;
};reducers: {queryList: Reducer<StateType>;
};
}
​
const Model: ModelType = {namespace: 'listAndcardList',
​state: {list: [],
},
​effects: {*fetch({ payload }, { call, put }) {const response = yield call(queryFakeList, payload);yield put({type: 'queryList',payload: Array.isArray(response) ? response : [],});},
},
​reducers: {queryList(state, action) {return {...state,list: action.payload,};},
},
};
​
export default Model;

React model相关推荐

  1. antd + react model自定义footer_使用ESLint+Prettier规范React+Typescript项目

    项目开发过程中,大多数时候我们使用别人搭建好的脚手架编写代码,是项目的参与者.对于一些细节往往被忽略了.其中代码检测本身是一类非常简单的配置,但涉及不同框架和语言组合使用的时候,可能比想象中要困难,本 ...

  2. antd + react model自定义footer_更骚的create-react-app开发环境配置craco

    背景 使用 CRA 脚手架创建的项目,如果想要修改编译配置,通常可能会选择 npm run eject 弹出配置后魔改.但是,eject 是不可逆操作,弹出配置后,你将无法跟随官方的脚步去升级项目的 ...

  3. Backbone React Requirejs 应用实战(一)——RequireJS管理React依赖

    试着用React替换Mustache打造了一个简单的页面,http://backbone-react.phodal.com/,当然Router用的还是Backbone的Router(react-rou ...

  4. 结合vue、react、angular谈谈MVC、MVP、MVVM框架

    首先,在谈这个话题之前, 我们有必要了解一下库和框架的区别. 我们先来看react官网以及vue官网对他们的定位: react: vue: react我们不说了,官网上明明白白说了,人家是一个libr ...

  5. 【转】React Vue MVC MVVM MVP

    首先,在谈这个话题之前, 我们有必要了解一下库和框架的区别. 我们先来看react官网以及vue官网对他们的定位: react: vue: react我们不说了,官网上明明白白说了,人家是一个libr ...

  6. vue笔记1 渐进式、 MVVM 框架

    参考 理解MVVM在react.vue中的使用 结合vue.react.angular谈谈MVC.MVP.MVVM框架 Vue(MVVM).React(MVVM).Angular(MVC)对比 vue ...

  7. http://www.115ps.com/all.html,Tynamo

    Two years ago I read a blog post about some guy writing a Tetris webapp with Clojure in two hours an ...

  8. React最佳实践系列 —— 循序渐进理解 Dva中的model概念

    Dva最佳实践 -- 循序渐进理解 Dva中的model概念 一. 序 二. 在create-react-app中使用redux 1. 开始 2. 安装redux 三.异步action 四. Dva中 ...

  9. antd react dva在model中使用另一个model的state值

    const oldData = yield select(({ baseDictionary }) => {return ([...customPageSetting.list,]) });

最新文章

  1. 机器学习(MACHINE LEARNING)交叉验证(简单交叉验证、k折交叉验证、留一法)
  2. CSS_伪元素_伪类
  3. 如何让人工智能更加实际的辅助网络安全
  4. 使用ReportStudio打开cube模型创建报表出现两个最细粒度名称
  5. curl和wget的区别和使用
  6. protobuf入门教程(三):常用序列化/反序列化接口
  7. 贝叶斯优化神经网络参数_贝叶斯超参数优化:神经网络,TensorFlow,相预测示例
  8. 7-7 六度空间 (30分)_现役球员中,谁最可能成下一位30000分先生?3大前十巨星没戏...
  9. scp命令:服务器间远程复制代码
  10. java 求集合真子集_【每日打卡】新高一数学必修打卡第二天教学视频—集合的基本运算...
  11. Gartner:CIO需破解建立数字化领导力的四大障碍
  12. 如何进行需求矩阵管理
  13. linux的php探针使用,php探针在Linux下的安装过程
  14. 快速使用 Javassist
  15. 罗格斯的计算机科学博士奖学金,本科直博如何“牛”转乾坤斩获全奖博士录取,师兄制胜申请经历大揭秘!...
  16. 计算机操作试题word,2015职称计算机考试Word2003操作试题及答案
  17. Linux 下重新挂载分区方法
  18. 微信小程序最新获取头像以及昵称方法
  19. Unity学习 — 官方中文版本教程详解
  20. obs可以装手机吗?_玻璃杯可以装开水吗 装开水会爆炸吗?现在了解还不晚。

热门文章

  1. memset(G, 0x3f, sizeof(G))涵义
  2. 数学建模进入“新课标”,告别了“刷题”“押题”数学应该怎么学?
  3. 超实用, 程序员,提升英文阅读能力
  4. 2021FME博客大赛 —— 面向海量地貌数据的FME在线质检研究
  5. UI设计思想和工具_1
  6. 手把手教如何搭建一个百度网盘目录站点【保姆级】
  7. 曼哈顿距离(值得收藏)
  8. java培训学习之Java工具的分享
  9. In Search of an Understandable Consensus Algorithm(Extended Version)
  10. Nii转png,Nii转dcm,Dcm转png