React + Dva + Antd + Umi 概况
Dva由阿里架构师 sorrycc 带领 team 完成的一套前端框架,在作者的 github 里是这么描述它的:”dva 是 react 和 redux 的最佳实践”。 Antd是阿里的一套开箱即用的中台前端/设计解决方案,UI框架。 Umi一套可插拔的企业级 react 应用框架,同样由dva作者 sorrycc 完成。他在Umi中引入了 UI 工具 antd,打包工具 roadhog,路由 react-router和状态管理器 dva,做到了可插拔机制。 Dva 初实践一般来说,可以分为主要的三个部分,
view层import React,{ Component } from ‘react‘; import { Form,Input } from ‘antd‘; import { connect } from ‘dva/index‘; @Form.create() class View extends Component { render() { return( <div> <Form> <FormItem label="commitMessage" {...formItemLayout}> {getFieldDecorator(‘commitMessage‘,{ rules: [{ type: ‘string‘ }] })(<Input />)} </FormItem> </Form> </div> ); } } const mapStateToProps = state => { const { checkBranches } = state.projects; return { checkBranches }; }; export default connect(mapStateToProps)(View); View层负责页面的展示问题,如React写法一致,最后通过 Service层import request from ‘@src/utils/request‘; export function checkBranches({ id }) { return request(`/projects/${id}/branches`,{ method: ‘GET‘,headers: { ‘Content-type‘: ‘application/json‘ } }); } Service层主要负责存放请求后台接口的方法。 这里的request封装了fetch函数,返回的是一个promise对象。 request中传入两个参数,第一个是url是请求地址,第二个options是请求的参数,看情况传入,比如说这里传入了method和headers。 Model层import * as services from ‘@services/index‘; export default { namespace: ‘‘,state: {},reducers: {},effects: {}. subscriptions: {} } model里面包括以下五部分:namespace、state、reducers、effects、subscriptions,缺一不可。注意,这里也需要从service层导入相应的方法。
namespace: ‘projects‘
state: { projectsData: [] }
reducers: { getProjectAllData(state,action) { return { ...state,...action.payload }; },}
effects: { *getAllProjects({ payload = {} },{ call,put }) { try { const res = yield call(projectsService.checkBranches,payload); yield put({ type: ‘getProjectData‘,payload: { projectsData: res.data } }); } catch (e) { message.warning(e.message); } },}
subscriptions: { setup({ dispatch,history }) { return history.listen(({ pathname }) => { if (pathname === ‘/projects‘) { dispatch({ type: ‘getAllProjects‘ }); } }); } } Dva 数据流向总的来说如下: View层操作 –> 触发models层effect中方法 –> 触发service层请求,获取后台数据 –> 触发model层处理相应数据的方法, 存储至reducer中 –> 更新model层中state –> 触发view层的render方法进行重新渲染 –> 页面更新 相关链接https://ant.design/docs/react/practical-projects-cn https://pro.ant.design/docs/layout-cn (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |