博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于dva的一些认识
阅读量:7112 次
发布时间:2019-06-28

本文共 1513 字,大约阅读时间需要 5 分钟。

为什么越来越多的人选择使用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

  • effects - 对应 saga,并简化了使用

  • reducers

转载于:https://www.cnblogs.com/mexinyan/p/7221013.html

你可能感兴趣的文章
公有云中追寻区块链的身影
查看>>
1-学习GPRS_Air202(Air202开发板介绍)
查看>>
Scapy 中文文档:二、下载和安装
查看>>
CentOS 6.9下配置安装KVM
查看>>
专访地平线余凯:如果现在盈利了,说明我们没有未来 | 封面人物
查看>>
斯坦福大学华人教授研发柔性电子材料,软似皮肤并且可拉伸
查看>>
使用Spring Data Redis操作Redis(单机版)
查看>>
结合AI与IoT技术,日本研发出可英语会话的小鸟学习型机器人
查看>>
NumPy 特殊例程
查看>>
“高大上”的机器人世界杯RoboCup也能如此“接地气”
查看>>
阿里云ECS服务器活动99元一年,最高可买三年
查看>>
附录C 编译安装Hive
查看>>
Sql Server数据库触发器实例讲解
查看>>
OpenSSL密码算法库: MD5示例小程序
查看>>
Mac各种数据库安装和启动【笔记】
查看>>
HTTP状态码查询简单介绍
查看>>
Codeforces Round #323 (Div. 2) C.GCD Table
查看>>
浅谈Android Fragment嵌套使用存在的一些BUG以及解决方法
查看>>
宅男福利!逼真3DCG虚拟少女Saya亮相
查看>>
统一配置Outlook组策略实现统一管理
查看>>