zoukankan      html  css  js  c++  java
  • dva -Model

    一、Action 是js对象,是改变State的唯一途径

      通过dispatch函数分发。

      dispatch({ type: 'user/add', // 如果在 model 外调用,需要添加 namespace payload: {}, // 需要传递的信息 });

    二、dispatch函数

      用于触发action函数,action只是描述一个行为的对象,dispatch 就是触发这个行为的方式。Reducer则描述如何改变数据

    三、Reducer

      在dva中,reducers聚合积累的结果是当前model的state对象。通过actions传入的值域当前reduceres中的值进行运算获得新的值,Reducer必须是纯函数。

      app.model({

        namespace:'todos',//model的namespace

        state:[],//model的初始化数据

        reducers:{

          add(state,{payload:todo}){

            return concat(todo);

          }

        }

      })

     dva-Effect  副作用,异步操作,Effects的最终流向是通过Reducers改变state     这个难理解一点点

      

    app.model({
       namespace:'todos',
       effects:{
           *addRemote({payload:todo},{put,call,select}){
               const todos = yield select(state = >state.todos);//这边的state来源于全局的state,select 方法提供获取全局state的能力,也就是说,在这边如果你有需要其他model的数据,则可以使用 state.modelName 来获取
                yield call(addTodo,todo);用于调用异步逻辑,只支持promise
               yield put({type:'add',payload:todo});这里触发action ,action 所调用的 reducer 或 effects 来源于本 model 那么在 type 中不需要声明命名空间,如果需要触发其他非本 model 的方法,则需要在 type 中声明命名空间,如 yield put({ type: 'namespace/fuc', payload: xxx });
        
             }    
         }  
    })        
    

      

      三、dva - Subscription

        Subscriptions 是一种从 源 获取数据的方法,语义:订阅,用于订阅数据源,然后来根据条件触发dispatch 需要的action。

    import key from 'keymaster';
    ...
    app.model({
      namespace: 'count',
      subscriptions: {
        keyEvent(dispatch) {
          key('⌘+up, ctrl+up', () => { dispatch({type:'add'}) });
        },
      }
    });
    

      

        

      

  • 相关阅读:
    一个Spring的应用看起来象什么?
    IOC的优点是什么?
    解释对象/关系映射集成模块?
    XMLBeanFactory?
    使用Spring框架的好处是什么?
    什么是Spring MVC框架的控制器?
    什么是Spring的MVC框架?
    在Spring AOP 中,关注点和横切关注的区别是什么?
    你更倾向用那种事务管理类型?
    Spring支持的事务管理类型?
  • 原文地址:https://www.cnblogs.com/xiaomingBlog/p/8820705.html
Copyright © 2011-2022 走看看