本文共 5777 字,大约阅读时间需要 19 分钟。
开发环境和生产环境打包希望看到的效果肯定不一样,比如生产环境需要压缩代码,去除注释,开发环境需要热更新,不压缩代码,所以需要存在一套开发环境版本和一套生产环境版本
webpack.config.common.js:webpack公用文件
webpack.config.dev.js:webpack开发环境文件
webpack.config.prod.js:webpack生产环境文件
开发一个页面的流程:
功能:存放开发的业务组件
包含:import React from 'react'; // 引用react组件// import './less/test.less';const param = 1; // 定义常量// 名称必须大写class Test extends React.Component { constructor(props) { super(props); // 定义state,在页面或者传递数据使用 this.state = { num: 1, }; } // 定义事件 clickFunc = () => { let { num } = this.state; num++; this.setState({ num }); } render() { // 获取state const { num } = this.state; return ({/*渲染元素*/}) }}export default Test{num}{/*点击修改元素*/}
// 设置样式.content{ // 可设置嵌套样式 .count{ }}
1.state:内部定义,它只是用来控制这个组件本身自己的状态,页面渲染通过setState进行完成。
2.setState:
3.props:外部传入,包括父子组件之间的通信,全局数据流的传递
定义每个页面交互的命名空间以及dispatch发起的行为方法和数据的处理
import * as lightMemberRightsManage from '../services/lightMemberRightsManage';export default { //表示对于整个应用不同的命名空间,以便通过this.props.lightMemberRightsManage,规范保证命名空间和当前页面js名称相同 namespace: 'lightMemberRightsManage', state: {}, // 表示当前的example中的state状态,这里可以给初始值 effects: { *lightMemberRightsManageGetList({ payload, callback }, { call, put }) { const testRes = yield call(lightMemberRightsManage.lightMemberRightsManageGetList, payload); //这里的put表示存储在当前命名空间lightMemberRightsManage中,通过success方法存在当前state中 yield put({ type: 'success', payload: { lightMemberRightsManageGetListResult: testRes } }); // 回调函数 callback && callback(testRes); // 可以promise.then使用 return testRes; } }, //用来保存更新state值 上面的put方法调用这里的方法 reducers: { success(state, { payload }) { return { ...state, ...payload } } }}
// 异步请求的中转文件import axios from '../utils/axios';// 请求地址的文件import Api from '../configs/api';export function lightMemberRightsManageGetList(params) { return axios.get(configs.host.test + Api.lightMemberRightsManageGetList, { 'params': params });}
定义自己写的工具库,例如异步请求axios、数据截取的公用函数js
页面路由
import React from 'react';import PropTypes from 'prop-types';import { Switch, Route, routerRedux,} from 'dva/router';import dynamic from 'dva/dynamic';const { ConnectedRouter } = routerRedux;const RouterWrapper = ({ history, app }) => { // 开发的组件 const Home = dynamic({ app, component: () => import('./components/Home'), }); return (}; // 加载路由
// 全局安装fl-hscli,生成商户侧脚手架的命令(目前写入的是mall商户侧)npm i fl-hscli -g// 进入想要创建项目的文件夹创建项目(projectName是你的项目名称)create-react-app-fl projectName// package.json中fl-pro、fulu-method是公司内部组件库,安装模块包之前,先安装公内部组件,不然会报错npm --registry http://10.0.1.244:8081/repository/npm-group/ install fl-pro@1.8.59 --save // 安装成功后,执行安装模块包的命令,因为package.json模块非常多,可以使用淘宝镜像进行安装,安装速度快npm icnpm i(需要先安装淘宝镜像)// 安装成功后,启动项目npm start
后续会做更加详细的讲解
转载地址:http://easuz.baihongyu.com/