【在线网页客服源码】【电子海图引擎源码】【python 资产管理源码】dva源码分析

时间:2024-11-26 08:39:25 来源:zk config配置源码 分类:休闲

1.react umi+dva开发基本流程(1)
2.dva 2.0中如何使用代码进行路由跳转

dva源码分析

react umi+dva开发基本流程(1)

       认识UMI,码分一个企业级的码分React应用框架,官网地址:umijs.org/zh/guide/.它以路由为核心,码分支持类Next.js的码分在线网页客服源码约定式路由,以及各种进阶功能,码分如路由级别的码分按需加载。同时,码分UMI配备了完善的码分插件体系,覆盖从源码到构建产物的码分每个生命周期,支持各种功能扩展和业务需求,码分已拥有超过个插件。码分电子海图引擎源码

       作为蚂蚁金服的码分底层前端框架,UMI已服务于超过个应用,码分包括Java、码分Node、码分H5无线、python 资产管理源码离线(Hybrid)应用、纯前端资产应用、CMS应用等。UMI旨在为内部及外部用户提供高效、稳定的朔源码燕窝排行前端解决方案。

       使用UMI搭建项目的步骤如下:

       1. 全局安装环境

       2. 构建项目并创建src目录

       3. 创建页面或路由组件

       4. 运行项目

       5. 构建生产环境

       这些步骤涵盖了基本的页面构建和项目启动。

       在UMI中,pages中的js组件并列,文件名即为路由路径。通过导航标签可实现路由切换。横盘突破Spyder源码

       路由传参有三种形式:params、query、state。接收参数时,根据传参形式进行对应处理。

       嵌套路由时,构建_layout.js用于展示子组件。通过{ props.children}展示子组件。

       HTML模版定义包括定义title、meta等设置,构建document.ejs。全局公共的css编写,构建global.css,无需引入,所有pages组件均可用。

dva 2.0中如何使用代码进行路由跳转

       ç†æ¸…关系

       dva 升级到 2.0 版本以后,也将内部使用的 dva/router 从 react-router@3.0 升级到了 react-router@4.0。react-router@4.0 文档 API

       react-router@4.0 让路由变得更简单,最大特点就是可以路由嵌套,可是如果照搬使用 react-router@4.0 的写法,你会发现在 dva 中是行不通的,查看 dva/router 的源码可以看到:

       // dva/router.js

       module.exports = require('react-router-dom');

       module.exports.routerRedux = require('react-router-redux');

       å…¶ä¸­ç¬¬ä¸€è¡Œå¯¼å‡ºçš„react-router-dom就是 react-router@4.0 文件,第二行导出的react-router-redux是 react-router 配合 redux 使用的中间库。因为 dva 中使用到了 redux,所以我们在配置的时候还需要注意到这一点。

       ç”±äºŽ dva 将react-router-dom和react-router-redux都封装到了 dva/router 中,在使用 react-router@4.0 和 redux 里面的东西时只需引入 dva/router 这个包即可。

       è·¯ç”±è·³è½¬

       å¼•å…¥ dva/router,使用 routerReux 对象的 push 方法控制,值为要跳转的路由地址,与根目录下 router.js 中配置的路由地址是相同的。routerReux 就是上面 dva/router 第二个导出的 react-router-redux 包对象。

       æ­¤å¤„示例为跳转到 /user 路由。

       // models > app.js

       import { routerRedux } from 'dva/router';

       export default {

       // ...

       effects: {

       // 路由跳转

       * redirect ({ payload }, { put }) {

       yield put(routerRedux.push('/user'));

       },

       }

       // ...

       }

       æºå¸¦å‚æ•°

       æœ‰æ—¶è·¯ç”±çš„跳转还需要携带参数。

       ä¼ å‚:

       routerRedux.push 方法的第二个参数填写参数对象。此处示例表示跳转到 /user 路由,并携带参数 { name: 'dkvirus', age: }。

       // models > app.js

       import { routerRedux } from 'dva/router';

       export default {

       // ...

       effects: {

       // 路由跳转

       * redirect ({ payload }, { put }) {

       yield put(routerRedux.push('/user', { name: 'dkvirus', age: }));

       },

       }

       // ...

       }

       æŽ¥æ”¶å‚数:

       // models > user.js

       export default {

       subscriptions: {

       /

**

       * 监听浏览器地址,当跳转到 /user 时进入该方法

       * @param dispatch 触发器,用于触发 effects 中的 query 方法

       * @param history 浏览器历史记录,主要用到它的 location 属性以获取地址栏地址

       */

       setup ({ dispatch, history }) {

       history.listen((location) => {

       console.log('location is: %o', location);

       console.log('重定向接收参数:%o', location.state)

       // 调用 effects 属性中的 query 方法,并将 location.state 作为参数传递

       dispatch({

       type: 'query',

       payload: location.state,

       })

       });

       },

       },

       effects: {

       *query ({ payload }, { call, put }) {

       console.log('payload is: %o', payload);

       }

       }

       // ...

       }

       åœ¨ user.js 中 subscriptions 属性会监听路由。当 app.js 中通过代码跳转到 /user 路由,models>user.js>subscriptions 属性中的 setup 方法会被触发,location 记录着相关信息。打印如下。

       location is: Object

       hash: ""

       key: "kss7as"

       pathname: "/user"

       search: ""

       state: { name: "bob", age: }

       é‡å®šå‘接收参数:Object

       age:

       name:"bob"

       å¯ä»¥çœ‹åˆ° location.state 就是传递过来的参数。在 subscriptions 中可以使用 dispatch 触发 effects 中的方法同时传递参数。

       éœ€è¦æ³¨æ„çš„事,在 dva@1.* 版本中,要获取对象还要用 location.query 对象,而到了 dva@2.* 就变成了 location.state 对象。