dva基础&&入门

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_41539074/article/details/102742121
数据流向

在这里插入图片描述

  • 数据的改变通常是通过用户交互行为或者浏览器行为(如路由跳转等)触发的
  • 此类行为会改变数据的时候可以通过dispatch发起一个action
  • 如果是同步行为直接通过Reducers改变state
  • 如果是异步行为(副作用)会先触发Effects然后流向Reducer最终改变State
核心概念
  • State:一个对象,保存整个应用状态
  • View: React组件构成的视图层
  • Action:一个对象,描述事件
  • connect方法:一个函数,绑定State到View
  • dispatch方法: 一个函数,发送Action到State

State

  • State是一个JavaScript对象
  • State表示Model的状态数据
  • 操作时每次都要当作不可变(immutable data)数据对待
  • 保证每次都是全新对象,没有引用关系,这样才能保证State的独立性,便于测试和追踪变化

Action

  • Action是一个JavaScript对象
  • 它是改变State的唯一途径
  • action必须带有type属性指明具体的行为,其他字段可以自定义
  • 如果要发起一个action需要使用dispatch函数
  • 需要注意的是,dispatch是在组件connect Models以后,通过props传入的
dispatch ({
  type: 'add',
  })

dispatch函数

  • dispatch function是一个用于触发action的函数
  • action是改变state的唯一途径,但是他只描述了一个行为,而dispatch可以看作是触发这个行为的方式

Reducer

  • Reducer(也称为reducing function)函数接受两个参数
  • Reducer描述如何改变数据
  • Reducer的概念来自函数式编程,在dva中,reducers聚合积累的结果是当前model的state对象
  • 通过action中传入的值,与当前reducers中的值进行运算获得新的值(也就是新的state)
  • Reducer必须是纯函数

Effect

  • Effect被称为副作用
  • dva为了控制副作用的操作,底层引入了redux-sagas做异步流程控制,由于采用generator的相关概念,所以将异步转成同步写法,从而将effects转为纯函数
  • 关于纯函数:Mostly adequate guide to FP

Subscription

  • Subscription是一种从源获取数据的方法
  • 它来自与elm
  • Subscription语义是订阅,用于订阅一个数据源,根据条件dispatch需要的action
  • 数据源可以是当前的时间、服务器的websocket连接、keyboard输入、geolocation变化、history路由变化等等

Router

  • 这里的路由通常指的是前端路由
  • 通过浏览器提供的History API可以监听浏览器url的变化,从而控制相关操作
  • dva实例提供了router方法来控制路由,使用的是react-router

RouteComponent

app.model

  • dva提供app.model这个对象,所有的应用逻辑都定义在它上面

Model对象的属性

  • namespace:当前model的名称。整个应用的state,由多少个小的Model的State以namespace为key合成
  • state: 该model当前的状态。数据保存在这里,直接决定了视图层的输出
  • reducers: Action处理器,处理同步动作,用来算出最新的State
  • effects: Action处理器,处理异步动作

Generator函数

  • Effect是一个Generator函数,内部使用yield关键字,标示每一步的操作(不管是异步或同步)
    call和pu他
  • call: 执行异步函数
  • put: 发出一个action,类似于dispatch

猜你喜欢

转载自blog.csdn.net/qq_41539074/article/details/102742121
dva