react umi+dva开发基本流程(1)
认识UMI,一个企业级的React应用框架,官网地址:umijs.org/zh/guide/.它以路由为核心,支持类Next.js的越局源码约定式路由,以及各种进阶功能,如路由级别的按需加载。同时,UMI配备了完善的插件体系,覆盖从源码到构建产物的每个生命周期,支持各种功能扩展和业务需求,已拥有超过个插件。股活跃性源码
作为蚂蚁金服的底层前端框架,UMI已服务于超过个应用,包括Java、Node、H5无线、梦雪头像源码离线(Hybrid)应用、纯前端资产应用、CMS应用等。UMI旨在为内部及外部用户提供高效、稳定的独立主机域名源码前端解决方案。
使用UMI搭建项目的步骤如下:
1. 全局安装环境
2. 构建项目并创建src目录
3. 创建页面或路由组件
4. 运行项目
5. 构建生产环境
这些步骤涵盖了基本的页面构建和项目启动。
在UMI中,pages中的js组件并列,文件名即为路由路径。通过导航标签可实现路由切换。合集房卡源码
路由传参有三种形式: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 对象ã
2024-11-20 16:27
2024-11-20 15:15
2024-11-20 14:54
2024-11-20 14:25
2024-11-20 14:14