React之dva

为什么越来越多的人选择使用dva:

可能大家通过一点时间的学习,已经能够理解 redux 的概念,并认可这种数据流的控制可以让应用更可控,以及让逻辑更清晰。

但随之而来通常会有这样的疑问:概念太多,并且 reducer,  action 都是分离的(分文件)。

这带来的问题是:

  • 编辑成本高,需要在 reducer,  action 之间来回切换
  • 不便于组织业务模型 (或者叫 domain model) 。

而 dva 正是用于解决这些问题!

Diav介绍:

dva 是基于现有应用架构 (redux + react-router + redux-saga 等)的一层轻量封装,没有引入任何新概念,全部代码不到 100 行。( Inspired by elm and choo. )

dva 是 framework,不是 library,类似 emberjs,会很明确地告诉你每个部件应该怎么写,这对于团队而言,会更可控。另外,除了 react 和 react-dom 是 peerDependencies 以外,dva 封装了所有其他依赖。

dva 实现上尽量不创建新语法,而是用依赖库本身的语法,比如 router 的定义还是用 react-router 的 JSX 语法的方式(dynamic config 是性能的考虑层面,之后会支持)。

他最核心的是提供了 app.model 方法,用于把 reducer, initialState, action, saga 封装到一起,比如:

app.model({
  namespace: ‘products‘,
  state: {
    list: [],
    loading: false,
  },
  subscriptions: [        function(dispatch) {            dispatch({type: ‘products/query‘});
    },
  ],
  effects: {
    [‘products/query‘]: function*() {              yield call(delay(800));              yield put({
        type: ‘products/query/success‘,
        payload: [‘ant-tool‘, ‘roof‘],
      });
    },
  },
  reducers: {
    [‘products/query‘](state) {              return { ...state, loading: true, };
    },
    [‘products/query/success‘](state, { payload }) {              return { ...state, loading: false, list: payload };
    },
  },
});

在有 dva 之前,我们通常会创建 sagas/products.jsreducers/products.js 和 actions/products.js,然后在这些文件之间来回切换。

介绍下这些 model 的 key :(假设你已经熟悉了 redux, redux-saga 这一套应用架构)

  • namespace - 对应 reducer 在 combine 到 rootReducer 时的 key 值
  • state - 对应 reducer 的 initialState
  • subscription - [email protected] 的新概念,在 dom ready 后执行,这里不展开解释,详见:A Farewell to FRP
  • effects - 对应 saga,并简化了使用
  • reducers
时间: 2024-11-15 07:53:02

React之dva的相关文章

React+Redux+Dva学习

Redux提供一些api来管理数据,并且只能通过它提供的方式来修改.Redux包括三个部分:store, action,reducer. store:是一个规范的state,就像一个有条理的数据库,Redux将整个应用的state存储在唯一的store中. action:是一个有属性的对象,用来描述发生了什么的对象,用dispatch(action)来触发,并且这是改变state的唯一方式. reducer:是具体通过action更新state的那个函数,基本结构是,reducer(state,

一起学react (1) 10分钟 让你dva从入门到精通

前言 如果文章中有错误的地方的话 可以直接加我QQ:469373256 自己针对一些问题做的优化版本 目前刚启动 还不是很成熟 https://github.com/fangkyi03/fastkit-dva.git 麻烦大家加星鼓励一下 谢谢 原有的项目从码云移植到了github 新的地址:https://github.com/fangkyi03/react-demo 一起学react(2) dva底层源码与案例分析 - 简书 本人自己修改后的dva版本 增加了对网络处理的控制 https:/

前端基于react,后端基于.net core2.0的开发之路(1) 介绍

文章提纲目录 1.前端基于react,后端基于.net core2.0的开发之路(1) 介绍 2.前端基于react,后端基于.net core2.0的开发之路(2) 开发环境的配置,注意事项,后端数据初始化 3.前端基于react,后端基于.net core2.0的开发之路(3) 各个技术栈配置和说明 4.前端基于react,后端基于.net core2.0的开发之路(4) 前端路由,模型,服务的说明 5.前端基于react,后端基于.net core2.0的开发之路(5) 配置node层,s

002-and design-dva.js 知识导图-01JavaScript 语言,React Component

一.概述 参看:https://github.com/dvajs/dva-knowledgemap react 或 dva 时会不会有这样的疑惑: es6 特性那么多,我需要全部学会吗? react component 有 3 种写法,我需要全部学会吗? reducer 的增删改应该怎么写? 怎么做全局/局部的错误处理? 怎么发异步请求? 怎么处理复杂的异步业务逻辑? 怎么配置路由? 二.JavaScript 语言 2.1.变量声明 const 和 let 不要用 var,而是用 const 和

全栈 指北

敬送一些网站 百度FEXantDesign腾讯CDC美团技术团队百度EFE腾讯ISUX阿里ued腾讯mxd阿里妈妈新浪UED腾讯CDC百度UED360-奇舞团腾讯-alloyteam携程UED 前端相关资料 JavaScript ES6:ES6是JS最新的标准,React中使用了较多ES6的特性. http://es6.ruanyifeng.com/#docs/function React:一种可以组件化构建UI的前端框架. https://reactjs.org/tutorial/tutori

004-ant design pro安装、目录结构、项目加载启动

一.概述 1.1.脚手架概念 编程领域中的“脚手架(Scaffolding)”指的是能够快速搭建项目“骨架”的一类工具.例如大多数的React项目都有src,public,webpack配置文件等等,而src目录中又包含components目录等等.每次在新建项目时,手动创建这些固定的文件目录.脚手架的作用就是帮助你完成这些重复性的工作,包括一键生成主要的目录结构.安装依赖等等. 1.2.参考地址 ant design参看地址:https://ant.design/docs/react/intr

单页应用SPA做SEO的一种清奇的方案

单页应用SPA做SEO的一种清奇的方案 网上有好几种单页应用转seo的方案,有服务端渲染ssr.有预渲染prerender.google抓AJAX.静态化...这些方案都各有优劣,开发者可以根据不同的业务场景和环境决定用哪一种方案.本文将介绍另一种思路比较清奇的SEO方案,这个方案也是有优有劣,就看读者觉得适不适合了. 项目分析 我的项目是用react+ts+dva技术栈搭建的单页应用,目前在线上已经有几十个页面,若干个sdk和插件在里面. 考虑想用服务端渲染来做seo,但是我的项目已经开发了这

【重点突破】—— fetch()方法介绍

前言:ant-design-pro的技术组成主要是react+redux+dva+antd+fetch+roadhog,dva在源码包index.js里面导出了fetch,但是如果不想使用fetch库,想换成其他库也是可以的(axios后期扩展性更好些),roadhog主要是基于webpack实现的封装.关于fetch发送请求的代码都封装在了utils/request.js文件中.PS:这里重点梳理对fetch()的使用学习,原文地址:大灰狼的小棉羊哥哥博客 与XMLHttpRequest(XH

dva+react项目搭建

dva 是一个基于 react 和 redux 的轻量应用框架,redux步骤繁杂,更容易出错,搭建成本更高. 1.安装dva-cli:确保版本在0.7.0或以上 $ npm install dva-cli -g $ dva -v 0.7.6 2.创建新应用 $ dva new dva-quickstart 3.启动程序 $ cd dva-quickstart $ npm start 4.使用antd框架 $ npm install antd babel-plugin-import --save