dva的用法_dva基本用法
基于 redux、redux-saga 和 react-router 的轻量级前端框架,是支付宝前端应用架构的发展和选择。
主要代码由4个部分组成:router,modle,routes,service。
此时,我按照我们项目目前应用某一模块举例(安全联动项目二期指标管理)
1、route,添加路由配置,示例代码如下:
{
path: 'indexmanage/editindex',
getComponent (nextState, cb) {
require.ensure([], require => {
registerModel(app, require('./models/indexmanage/editindex'))
cb(null, require('./routes/indexmanage/editindex/'))
}, 'editindex')
},
},
View Code
2、model 是 dva 中最重要的概念,其主要包含 5 个属性:
1)namespace
model 的命名空间,同时也是他在全局 state 上的属性,只能用字符串,不支持通过 . 的方式创建多层命名空间。
2)state
初始值,每当state改变时,重新刷新页面。
3)subscriptions
在初始化时候执行,例如:
subscriptions: {
setup ({ dispatch, history }) {
history.listen((location) => {
if (location.pathname === '/indexmanage/editindex') {
dispatch({ type: 'changeworkModalclose' })
}
})
},
},
View Code
4)reducers
修改state状态,且是唯一能够修改state状态的地方。
5)effects
用于处理异步操作和业务逻辑,不直接修改 state,可以应用call和put调用相关方法,一般情况下call调用service方法,put调用本文件方法。
modle全部示例代码如下:
import { addAssessmentIndex} from 'services/editindex'
import { browserHistory } from 'react-router'
export default {
namespace: 'editindex',
state: {
tableTime: '',
workModal: {
visible: false,
},
},
subscriptions: {
setup ({ dispatch, history }) {
history.listen((location) => {
// 初始进入页面时,根据业务进行相关方法的执行
if (location.pathname === '/indexmanage/editindex') {
location.state.record && dispatch({ type: 'changeworkModal', payload: { ...location.state.record.jobGenerationRule } })
}
})
},
},
effects: {
* changeStates ({
payload,
}, { put }) {
yield put({ type: 'updateStates', payload })
},
* updateSubdivisionIndex ({ payload }, { put, call, select }) {
const { fileModal } = yield select(state => state.editindex)
const { form } = payload
payload = { ...payload, referenceFile: fileModal.selectedRowKeys.join(',') }
const res = yield call(updateSubdivisionIndex, payload)
console.log('res.success', res.success)
if (res.success) {
yield put({ type: 'subdivisionSuccess', payload: { form } })
}
},
// 修改、新增细分指标成功后再跳转
* subdivisionSuccess ({ payload }, { put }) {
const { form } = payload
yield put({ type: 'changefileModalclose' })
yield put({ type: 'changefileModal', payload: { subdivisionloading: false } })
browserHistory.goBack()
form.resetFields
},
},
reducers: {
updateStates (state, { payload }) {
const statr = {
...state,
...payload,
}
return statr
},
// 当state里面对象包含其它对象时,此时应该用如下方法改变state的状态,否则会清空其它值
updatefileModal (state, { payload }) {
const { fileModal } = state
const newState = {
...state,
fileModal: { ...fileModal, ...payload },
}
return newState
},
},
}
View Code
3、routes,主要是渲染页面组件:
import React from 'react'
import PropTypes from 'prop-types'
import { connect } from 'dva'
const Dditindex = ({
editindex,
location,
dispatch,
}) => {
const Parameters = location.state
return (
}
Dditindex.propTypes = {
location: PropTypes.object,
editindex: PropTypes.object,
dispatch: PropTypes.func,
}
export default connect(({ editindex }) => ({ editindex }))(Dditindex)
View Code
4、service,主要用于发送异步请求获取数据:
import { request } from 'utils'
import { api } from './api'
export async function deleteSubdivisionIndex (params) {
return request(api.deleteSubdivisionIndex, { data: params })
}
export async function addSubdivisionIndex (params) {
return request(api.addSubdivisionIndex, { data: params, showMsg: true })
}
View Code
本项目是利用项目封装的request方法通过feach方式发起异步请求,大家可以根据自己需要采用其它方式。
dva的用法_dva基本用法相关推荐
- dva的用法_dva.js 用法详解:列表展示
这次主要通过在线获取用户数据并且渲染成列表这个案例来演示dva.js. 整个开发流程概括下来应该是: 编写用户列表model(数据模型)-> 编写修改model的方法 -> 编写服务接口 ...
- (COPY)document.all和document.getElementById用法 document.all用法:
(COPY)document.all和document.getElementById用法 document.all用法: <html> <body> < ...
- JObject 用法 、JProperty 用法、JArray 用法 Linq 转 Json
转: JObject 用法 .JProperty 用法.JArray 用法 Linq 转 Json 1.使用LINQ to JSON前,需要引用Newtonsoft.Json的dll和using Ne ...
- C语言task的用法,C# Task 用法
C# Task 的用法 其实Task跟线程池ThreadPool的功能类似,不过写起来更为简单,直观.代码更简洁了,使用Task来进行操作.可以跟线程一样可以轻松的对执行的方法进行控制. 顺便提一下, ...
- mysql日期函数之DATEDIFF() if()用法 case when用法
mysql日期函数之DATEDIFF() if()用法 case when用法 背景: 用户密码七天后会过期,用户修改密码时会同步添加修改时间进数据库, 登录时校验用户是否需要修改密码, 一开始想的时 ...
- c语言(vd6.0) sleep函数用法 及delay用法
c语言(vd6.0) sleep函数用法 及delay用法 悬赏分:20 | 解决时间:2009-5-20 20:56 | 提问者:杨筱硕 请注明头文件 2个函数都要举例 最佳答案 1.函数名: de ...
- C++基础用法—冒号的用法
C++基础用法-冒号的用法 一.用法一:继承 1.1用法:用在class或struct后面 1.2示例代码 二.用法二:赋值 1.1用法:用在成员函数.构造函数后面 1.2示例代码 1.2.1示例代码 ...
- guess在Java中用法_guess的用法
guess有推测;猜中;以为等意思,那么你知道guess的用法吗?下面跟着学习啦小编一起来学习关于guess的用法及相关知识吧,希望对大家的学习有所帮助! guess的用法 guess的用法1:gue ...
- 【Access各种类型变量表示】声明模块变量的用法,变量符号用法,文本型变量.日期型变量,数字型变量,数值型变量的符号表示法
作 者:麥田 ID:11 城市:上海 QQ:3002789054 摘 要:声明模块变量的用法,变量符号用法,文本型变量.日期型变量,数字型变量,数值型变量的符号用法 正 文: 首先需要在模块声 ...
最新文章
- 防火墙 之 iptables 匹配条件讲解
- Dalvik VM进程系统(二):分析Zygote的启动过程
- 理解和认识udev(转载)
- jQeury的日期时分秒生成器插件,使用jQuery的匿名函数,静态方法的使用
- Java培训分享void的用法和意义
- (七)linux函数接口的使用
- jQuery基础学习笔记(中)
- Eclipse集成Maven功能
- paip.python错误解决 0x64024e96 指令引用的 0x00000135 内存。该内存不能为 read。
- apdu 移动sim_SIM卡基础技术规范, ISO-7816协议(APDU指令)
- python删除数组元素remove_python如何对数组删除元素
- Cellular Automaton UVA - 1386
- 全球与中国Epicor渠道合作伙伴市场现状及未来发展趋势
- 异地监控组网实战案例(速度快)
- 【软件工程】工程经济学期末复习资料
- 提取Excel中文字链接地址
- JSHOP2算例介绍:blocksworld问题
- python系列之---python的起源
- C 水仙花数 一个3位数,其中各位数字立方和等于该数本身
- mapreduce软件框架中作业与任务的含义