• 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'}) });
        },
      }
    });
    

      

        

      

  • 相关阅读:
    POJ 1789:Truck History
    POJ 1258:Agri-Net Prim最小生成树模板题
    POJ 1837:Balance 天平DP。。。
    杭电1754--I Hate It(线段树)
    Poj3259--Wormholes(Spfa 判负环)
    杭电1068--Girls and Boys(二分图最大独立集)
    杭电1010--Tempter of the Bone(Dfs+剪枝)
    杭电2647--Reward(反向拓扑)
    杭电1083--Courses(二分图匹配)
    杭电2063--过山车(二分匹配)
  • 原文地址:https://www.cnblogs.com/xiaomingBlog/p/8820705.html
Copyright © 2020-2023  润新知