dva学习笔记

Model:

model是dva最重要的概念,以下是经典的例子:

app.model({
  namespace: 'todo',
    state: [],
  reducers: {
    add(state, { payload: todo }) {
      // 保存数据到 state
      return [...state, todo];
    },
  },
  effects: {
    *save({ payload: todo }, { put, call }) {
      // 调用 saveTodoToServer,成功后触发 `add` action 保存到 state
      yield call(saveTodoToServer, todo);
      yield put({ type: 'add', payload: todo });
    },
  },
  subscriptions: {
    setup({ history, dispatch }) {
      // 监听 history 变化,当进入 `/` 时触发 `load` action
      return history.listen(({ pathname }) => {
        if (pathname === '/') {
          dispatch({ type: 'load' });
        }
      });
    },
  },
});

Model包括五个属性:

namespace:

model的命名空间,同时namespace也是在全局state上的属性,只能用字符串,不支持通过.的方式创建多层命名空间。

type:String

state:

初始值

reducers

以key/value的格式来定义reducer。用于处理同步操作,唯一可以修改state的地方,由action触发。格式为:(state, action) => newState 或者 [(state, action) => newState, enhancer]

effects:

以key/value格式定义effect。用于处理异步操作和业务逻辑,不直接修改state。由action触发,可以触发 action,可以和服务器交互,可以获取全局 state 的数据等等。

subscriptions:

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,997评论 19 139
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,779评论 18 399
  • 一. Java基础部分.................................................
    wy_sure阅读 3,839评论 0 11
  • 早上埋怨老公情人节没有送我东西也就算了,我给他发了红包,还做了她喜欢的饭,他连一点表示都没有,还埋怨老公在家能摆谱...
    碧霞阅读 209评论 0 0
  • 范例一: FABE塑造价值(产品) F特征:沙棘酵素纤之冻是以优质海藻胶为载体,融入沙棘提取物、综合果蔬酵素汁多种...
    钟月娥阅读 228评论 0 0