React全家桶打造共享单车后台管理系统项目_第1篇_项目环境搭建_首页编写
1.项目介绍
项目github地址:https://github.com/replaceroot/React-manageSystem
项目整体架构:



补充:调用setState之后会并列调用should update,will update,did update生命周期函数
Babel插件的作用:解析E6达到兼容效果
2.项目环境搭建
2.1 安装包
yarn add react-router-dom axios --dev
2.2 安装支付宝UI组件
yarn add antd
2.3 配置antd组件按需加载
yarn add react-app-rewired customize-cra
修改`package.json`配置文件的`scripts`字段
"scripts": {
"start": "react-app-rewired start",
"build": "react-app-rewired build",
"test": "react-app-rewired test",
"eject": "react-scripts eject"
}
然后在项目根目录创建一个 config-overrides.js 用于修改默认配置。
module.exports = function override(config, env) {
// do stuff with the webpack config...
return config;
};
使用 babel-plugin-import
babel-plugin-import 是一个用于按需加载组件代码和样式的 babel 插件(原理),现在我们尝试安装它并修改 config-overrides.js 文件。
yarn add babel-plugin-import
+ const { override, fixBabelImports } = require('customize-cra');
- module.exports = function override(config, env) {
- // do stuff with the webpack config...
- return config;
- };
+ module.exports = override(
+ fixBabelImports('import', {
+ libraryName: 'antd',
+ libraryDirectory: 'es',
+ style: 'css',
+ }),
+ );
记录一个小坑:

如果遇到错误,将 react-scripts添加到dev依赖中。
yarn add react-scripts --dev
如果遇到找不到babel模块的错误,就将整个 modules删除,然后重新yarn install安装一下就能解决。

重新运行项目,此时就能正常显示Button按钮了。
import React from "react";
import Child from "./Child";
import { Button } from 'antd';
import "./index.less"; export default class Life extends React.Component {
state = {
count:
}; handleAdd = () => {
this.setState({
count: this.state.count +
});
}; render(){
return (
<div className="demo">
<input type="text" placeholder="请输入内容..."/>
<Button onClick={this.handleAdd}>点击一下</Button>
<p>{this.state.count}</p>
{/* 给子组件传参 */}
<Child name={this.state.count}></Child>
</div>
)
}
}

但是有一个问题,就是我们配置的less没有生效,下面解决Less和按钮主题颜色问题。
yarn add less less-loader
按照 配置主题 的要求,自定义主题需要用到 less 变量覆盖功能。我们可以引入 customize-cra 中提供的 less 相关的函数 addLessLoader 来帮助加载 less 样式,同时修改 config-overrides.js 文件如下。
- const { override, fixBabelImports } = require('customize-cra');
+ const { override, fixBabelImports, addLessLoader } = require('customize-cra');
module.exports = override(
fixBabelImports('import', {
libraryName: 'antd',
libraryDirectory: 'es',
- style: 'css',
+ style: true,
}),
+ addLessLoader({
+ javascriptEnabled: true,
+ modifyVars: { '@primary-color': '#1DA57A' },
+ }),
);
修改后重启 yarn start,如果看到一个绿色的按钮就说明配置成功了。

到这里, 基本的环境算是搭建好了,坑是真的多,也只能自己摸索,百度、Google查文档,做记录总结。
3.项目主页面编写
3.1 目录结构

具体代码参考我的github的commit代码
布局使用的栅格系统:https://ant.design/components/grid-cn/

左侧菜单渲染:https://ant.design/components/menu-cn/

具体实现可以参考我github上的源码和官网给出的demo的源码进行对比就知道我如何使用的。
3.2左侧菜单动态渲染
重点就是动态渲染的代码
import React from "react";
import { Menu, Icon, Divider } from "antd";
import menuConfig from "../../config/menuConfig";
import "./index.less";
const { SubMenu } = Menu; export default class NavLeft extends React.Component {
// 加载时的生命周期函数
componentWillMount() {
const menuTreeNode = this.renderMenu(menuConfig);
this.setState({
menuTreeNode
});
} // 菜单动态渲染
renderMenu = data => {
return data.map(item=>{
// 如果item中还有子项,那么就把子项递归遍历渲染到页面
if(item.children){
return (
<SubMenu title={item.title} key={item.key}>
{this.renderMenu(item.children)}
</SubMenu>
);
}
return <Menu.Item title={item.title} key={item.key}>{item.title}</Menu.Item>
})
}; render() {
return (
<div>
<div className="logo">
<img src="assets/logo-ant.svg" alt="" />
<h1>木子单车管理系统</h1>
</div>
<Menu theme="dark">{this.state.menuTreeNode}</Menu>
</div>
);
}
}
index.js

3.3 header头部页面实现
这个部分需要发送跨域请求百度天气的API来获取数据渲染,需要安装一个JsonP。
yarn add jsonp
这里部分需要使用jsonp封装一个axios来发送跨域请求,这里涉及了jsonp使用和ES6中promise的使用方法,如果忘记了这些技术,赶紧翻下以前的笔记,百度看下博客吧。
简单的jsonp demo
getjsonp(){
// jsonp能发起跨域请求
this.$http.jsonp('http://127.0.0.1:3003/getlist')
.then((res) => {
console.log(res)
},(err) => {
console.log(err)
})
}
// 封装axios发送跨域请求
import JsonP from 'jsonp'
export default class Axios {
/* 这里使用static关键字声明了一个静态方法,实例不能直接调用,只能通过类来调用 */
static jsonp(options){
// 成功就是resolve,失败就是reject
return new Promise((resolve, reject)=>{
JsonP(options.url, {
params: 'callback'
}, function(err, response){
if(response.status === 'success'){
resolve(response)
}else {
reject(response.message);
}
})
})
}
}
给axios封装jsonp方法
/* 封装一个格式化时间戳的方法 */
export default {
formateDate(time) {
// 如果为空就返回空字符串
if (!time) return "";
let date = new Date(time);
return (
date.getFullYear() +
"-" +
(date.getMonth() + 1) +
"-" +
date.getDate() +
" " +
date.getHours() +
":" +
date.getMinutes() +
":" +
date.getSeconds()
);
}
};
封装格式化日期方法

3.4 Footer页面以及content内容区域实现
增加小箭头样式
/* 实现小箭头 */
&:after{
position: absolute;
content: '';
left: 110px;
top:39px;
border-top: 9px solid @colorM;
border-left: 12px solid transparent;
border-right: 12px solid transparent; }
Header/index.less

到此为止首页就编写完成了,以后会根据课程的目录来更新React路由相关的知识,其他业务功能的实现。
总结一下:很多都是基础知识,稍微难一点的就是Promise、jsonp、还有初期的环境搭建遇到的几个坑,几乎没有太难的知识点,结构和flex布局相关的内容就是一个熟练度的问题,代码量上去了,看到一个效果就知道要怎么实现,多敲多练多思考就完事了。
React全家桶打造共享单车后台管理系统项目_第1篇_项目环境搭建_首页编写的更多相关文章
- React全家桶+AntD 共享单车后台管理系统开发
第1章 课程导学对课程整体进行介绍,并且说明学习的必要性.第2章 React基础知识React基础知识以及生命周期的介绍,并使用React官方脚手架初始化基础项目,同时介绍了新一代打包工具Yarn.第 ...
- 使用react全家桶制作博客后台管理系统 网站PWA升级 移动端常见问题处理 循序渐进学.Net Core Web Api开发系列【4】:前端访问WebApi [Abp 源码分析]四、模块配置 [Abp 源码分析]三、依赖注入
使用react全家桶制作博客后台管理系统 前面的话 笔者在做一个完整的博客上线项目,包括前台.后台.后端接口和服务器配置.本文将详细介绍使用react全家桶制作的博客后台管理系统 概述 该项目是基 ...
- 使用react全家桶制作博客后台管理系统
前面的话 笔者在做一个完整的博客上线项目,包括前台.后台.后端接口和服务器配置.本文将详细介绍使用react全家桶制作的博客后台管理系统 概述 该项目是基于react全家桶(React.React-r ...
- React全家桶+Material-ui构建的后台管理系统
一.简介 一个使用React全家桶(react-router-dom,redux,redux-actions,redux-saga,reselect)+Material-ui构建的后来管理中心. 二. ...
- Vuejs实例-00Vuejs2.0全家桶结合ELementUI制作后台管理系统
Vuejs2.0全家桶结合ELementUI制作后台管理系统 0: 系统环境的介绍 1: Vuejs实例-01使用vue-cli脚手架搭建Vue.js项目 2: Vuejs实例-02Vue.js项目集 ...
- Guns(开源后台管理系统框架)实战(一)——开发环境搭建
1. 开发环境搭建 1.1. 开发环境要求 1.2. 配置Maven 1.3. 配置MySQL 1.4. Git克隆项目 1.5. Eclipse导入系统 2. 小结 3. 参考引用 1. 开发环境搭 ...
- 使用React全家桶搭建一个后台管理系统
引子 学生时代为了掌握某个知识点会不断地做习题,做总结,步入岗位之后何尝不是一样呢?做业务就如同做习题,如果‘课后’适当地进行总结,必然更快地提升自己的水平. 由于公司采用的react+node的技术 ...
- 基于react全家桶+antd-design+webpack2+node+express+mongodb开发的前后台博客系统
很久没更新博客,最近也有点忙,然后业余时间搞了一个比较完整基于react全家桶+antd-design+webpack2+node+express+mongodb开发的前后台博客系统的流程系统,希望对 ...
- react-music React全家桶项目,精品之作!
React-Music 全家桶项目,精品之作! 一.简介 该项目是基于React全家桶开发的一个音乐播放器,技术栈采用:Webpack + React + React-redux + React-ro ...
随机推荐
- MySQL系列(五)--二进制日志对主从复制的影响
MySQL复制是基于主库上的二进制日志来完成,复制是异步的,可能存在延迟 MySQL日志分为: 1.服务层日志:二进制日志.通用日志.慢查日志 2.存储引擎层日志:innodb中重做日志和回滚日志 二 ...
- 【python之路32】python异常处理
一.捕获异常 1.try except #!usr/bin/env python # -*- coding:utf-8 -*- num = input("请输入一个数字:") t ...
- uni-app开发微信小程序引入UI组件库(Vant-weapp)步骤
uni-app开发微信小程序引入UI组件库(Vant-weapp)步骤 这里以vant-weapp为例 uni-app官方文档介绍引入组件的方法 1. 新建相关目录 根目录下创建 wxcomponen ...
- 20190811-Recover
好点了. 恍惚中,是她么? 考试前,我感觉很差. 考试频繁于我改题速度. 考试过程: 首先通看三题,太棒了,没有tenggang了 T1,前缀和(我终于提升了??) T2,明显不会,但是我想用贪心, ...
- CSS中ul li居中的问题
一直以为对ul li居中对齐已经掌握了.但最近做项目时发现之前li的float:left方法显然有一个问题,就是无法居中(水平),只能使用padding-left或margin-right的方法方法来 ...
- python基础--线程、进程
并发编程: 操作系统:(基于单核研究) 多道技术: 1.空间上的复用 多个程序共用一个计算机 2.时间上的复用 切换+保存状态 例如:洗衣 烧水 做饭 切换: 1.程序遇到IO操作系统会立刻剥夺着CP ...
- python基础--socket套接字、粘包问题
本地回环地址:127.0.0.1 简易版服务端: import socket server = socket.socket() # 就比如买了一个手机 server.bind(("127 ...
- golang之vscode环境配置
go语言开发,选择vscode作为IDE工具也是一个不错的选择,毕竟goland收费,老是破解也挺麻烦,除了这点,不过说实话挺好用的.vscode的话相对来说就毕竟原始,适合初学者. 1.vscode ...
- CURL POST PHP
function SendPostCurl($url,$post_data){ $curl = curl_init(); //初始化 curl_setopt($curl, CURLOPT_URL, $ ...
- 关于Vector CANoe的讨论
默认排序 踩猫尾巴 汽车电子攻城狮 27 人赞同了该回答 好像是很久以前的问题啊,为什么会现在收到邀请. 我觉得 @lijuqqkiko 介绍的足够啦. 我再额外发散一点吧. 目前在CAN总线测试和 ...