基于 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基本用法相关推荐

  1. dva的用法_dva.js 用法详解:列表展示

    这次主要通过在线获取用户数据并且渲染成列表这个案例来演示dva.js. 整个开发流程概括下来应该是: 编写用户列表model(数据模型)->  编写修改model的方法 -> 编写服务接口 ...

  2. (COPY)document.all和document.getElementById用法 document.all用法:

    (COPY)document.all和document.getElementById用法 document.all用法: <html>     <body>       < ...

  3. JObject 用法 、JProperty 用法、JArray 用法 Linq 转 Json

    转: JObject 用法 .JProperty 用法.JArray 用法 Linq 转 Json 1.使用LINQ to JSON前,需要引用Newtonsoft.Json的dll和using Ne ...

  4. C语言task的用法,C# Task 用法

    C# Task 的用法 其实Task跟线程池ThreadPool的功能类似,不过写起来更为简单,直观.代码更简洁了,使用Task来进行操作.可以跟线程一样可以轻松的对执行的方法进行控制. 顺便提一下, ...

  5. mysql日期函数之DATEDIFF() if()用法 case when用法

    mysql日期函数之DATEDIFF() if()用法 case when用法 背景: 用户密码七天后会过期,用户修改密码时会同步添加修改时间进数据库, 登录时校验用户是否需要修改密码, 一开始想的时 ...

  6. c语言(vd6.0) sleep函数用法 及delay用法

    c语言(vd6.0) sleep函数用法 及delay用法 悬赏分:20 | 解决时间:2009-5-20 20:56 | 提问者:杨筱硕 请注明头文件 2个函数都要举例 最佳答案 1.函数名: de ...

  7. C++基础用法—冒号的用法

    C++基础用法-冒号的用法 一.用法一:继承 1.1用法:用在class或struct后面 1.2示例代码 二.用法二:赋值 1.1用法:用在成员函数.构造函数后面 1.2示例代码 1.2.1示例代码 ...

  8. guess在Java中用法_guess的用法

    guess有推测;猜中;以为等意思,那么你知道guess的用法吗?下面跟着学习啦小编一起来学习关于guess的用法及相关知识吧,希望对大家的学习有所帮助! guess的用法 guess的用法1:gue ...

  9. 【Access各种类型变量表示】声明模块变量的用法,变量符号用法,文本型变量.日期型变量,数字型变量,数值型变量的符号表示法

    作 者:麥田   ID:11  城市:上海  QQ:3002789054 摘 要:声明模块变量的用法,变量符号用法,文本型变量.日期型变量,数字型变量,数值型变量的符号用法 正 文: 首先需要在模块声 ...

最新文章

  1. 防火墙 之 iptables 匹配条件讲解
  2. Dalvik VM进程系统(二):分析Zygote的启动过程
  3. 理解和认识udev(转载)
  4. jQeury的日期时分秒生成器插件,使用jQuery的匿名函数,静态方法的使用
  5. Java培训分享void的用法和意义
  6. (七)linux函数接口的使用
  7. jQuery基础学习笔记(中)
  8. Eclipse集成Maven功能
  9. paip.python错误解决 0x64024e96 指令引用的 0x00000135 内存。该内存不能为 read。
  10. apdu 移动sim_SIM卡基础技术规范, ISO-7816协议(APDU指令)
  11. python删除数组元素remove_python如何对数组删除元素
  12. Cellular Automaton UVA - 1386
  13. 全球与中国Epicor渠道合作伙伴市场现状及未来发展趋势
  14. 异地监控组网实战案例(速度快)
  15. 【软件工程】工程经济学期末复习资料
  16. 提取Excel中文字链接地址
  17. JSHOP2算例介绍:blocksworld问题
  18. python系列之---python的起源
  19. C 水仙花数 一个3位数,其中各位数字立方和等于该数本身
  20. mapreduce软件框架中作业与任务的含义

热门文章

  1. 第十三周练兵区——编程题——不计入总分
  2. Software Performance Testing - 全链路压测知识点整理
  3. 1106: [POI2007]立方体大作战tet
  4. Trainning 1 DAY
  5. 解决ios的webview中上/下拉露出黑灰色背景问题
  6. opencv之重映射remap
  7. 网络安全应急响应----8、网页篡改应急响应
  8. ubuntu 20.04 耳机没有声音
  9. 重磅!京东云自研第四代云主机发布;曝国外物理学家开发出用于量子计算机的汇编语言...
  10. 自己想要什么 过什么样的生活