.png)
五、设置路由模块
1、安装路由模块
cnpm i react-router-dom -S
2、创建路由模块router/index.js
import Home from '@/components/home/index';
import Kind from '@/components/kind/index';
import Cart from '@/components/cart/index';
import User from '@/components/user/index';
const routes = [
{
path: '/home',
component: Home
},
{
path: '/kind',
component: Kind
},
{
path: '/cart',
component: Cart
},
{
path: '/user',
component: User
}
]
export default routes;
3、程序入口地址修改index.js
import React from 'react';
import ReactDOM from 'react-dom';
import {Provider} from 'react-redux';
import store from '@/store/index';
import App from '@/components/App';
import ErrorBoundary from '@/components/ErrorBoundary';
import registerServiceWorker from './registerServiceWorker';
import {HashRouter as Router, Switch, Route} from 'react-router-dom';
function render(){
ReactDOM.render(
<Provider store = {store}>
<ErrorBoundary>
<Router>
<Switch>
<Route path = '/' component = {App} />
</Switch>
</Router>
</ErrorBoundary>
</Provider>
, document.getElementById('root'));
}
render();
store.subscribe(render);
registerServiceWorker();
4、修改App.jsx
import React, {Component} from 'react';
import routes from '@/router/index';
import {Switch, Route, Redirect} from 'react-router-dom';
export default class App extends Component {
render () {
return (
<div>
<Switch >
{
routes.map((item, index) => {
return (
)
})
}
<Redirect to={{pathname:'/home'}} />
</Switch>
</div>
)
}
}
5、地址栏输入相关路由测试可行性
6、路由跳转
6.1 声明式跳转
<Link> ----- 不含有样式----列表进入详情
<NavLink> ----- 选中的路由会自带有一个active的样式 ---- 底部切换
import {NavLink, Link} from 'react-router-dom';
<NavLink to='/home'>首页</NavLink><Link to='/detail/123'>详情</Link>
6.2 编程式跳转 ---- 一定要注意写的地方
this.props.history.push('/home')
7、假设你的项目中有一些页面结构不一致的情况下,比如说详情页面有自己的底部,那么可以在入口文件处和App组件同样配置,index.js
import React from 'react';
import ReactDOM from 'react-dom';
import {Provider} from 'react-redux';
import store from '@/store/index';
import App from '@/components/App';
import Detail from '@/components/detail/index';
import ErrorBoundary from '@/components/ErrorBoundary';
import registerServiceWorker from './registerServiceWorker';
import {HashRouter as Router, Switch, Route} from 'react-router-dom';
function render(){
ReactDOM.render(
<Provider store = {store}>
<ErrorBoundary>
<Router>
<Switch>
<Route path = '/detail' component = {Detail} />
<Route path = '/' component = {App} />
</Switch>
</Router>
</ErrorBoundary>
</Provider>
, document.getElementById('root'));
}
render();
store.subscribe(render);
registerServiceWorker();
六、UI库的配置
pc: cnpm i antd -S
mobile: cnpm i antd-mobile -S
虽然UI组件库可以全部引入,但是我们还是强烈建议使用按需引入模式
cnpm i babel-plugin-import -D
cnpm i babel-preset-env babel-preset-react -D
创建一个.babelrc文件,写入如下内容
{
"presets": [
["env", {
"modules": false,
"targets": {
"browsers": ["> 1%", "last 2 versions", "not ie <= 8"]
}
}],
"react"
],
"plugins": [
["import", { "libraryName": "antd-mobile", "style": "css" }]
]
}
然后!!!最重要的一步,把package.json中的babel配置给删掉,尤其是:react-app!!!
假设我们要使用时间选择器,需要用到模块 DatePicker
import { DatePicker, List } from 'antd-mobile';
<DatePicker
value={this.state.date}
onChange={date => this.setState({ date })}
>
<List.Item arrow="horizontal">Datetime</List.Item>
</DatePicker>
其余的UI组件类似
七、css的模块化
修改配置文件
webpack.config.dev.js
.png)
webpack.config.prod.js
.png)
组件内部创建style.css
UI组件内部使用
import React, {Component} from 'react';
import style from './style.css';
export default class UI extends Component {
componentDidMount () {
this.props.getBannerList();
this.props.getProList();
}
render () {
console.log('props', this.props)
return (
<div className = "container">
<div className = {style.box}>
<ul>
{
this.props.prolist.map((item,index) => {
return (
<li key = {item.id}>{item.title}</li>
)
})
}
</ul>
</div>
<footer>页面底部</footer>
</div>
)
}
}
- 【React自制全家桶】六、React性能优化(持续更新总结)
一.通过虚拟DOM来提升性能(自动) 底层讲解见[React自制全家桶]二.分析React的虚拟DOM和Diff算法 二.将多次setState合并为一次执行(自动) 底层讲解见[React自制全 ...
- 【React自制全家桶】九、Redux入手
一.React项目中为什么要用Redux 上图: 左图当使用纯React开发稍微大点的项目,因为React数据是瀑布式的,只能通过父子组件传递数据,所以实现关系不大的两React的组件之间的数据传递就 ...
- 【React自制全家桶】七、React实现ajax请求以及本地数据mock
一.下载axios插件 yarn add axios 二.React的ajax请求代码如何放置 建议放置在生命周期函数之componentDidMount()中 三.ajax之get请求 axios. ...
- 【React自制全家桶】一、Webstrom+React+Ant Design+echarts搭建react项目
前言 一.React是Facebook推出的一个前端框架,之前被用于著名的社交媒体Instagram中,后来由于取得了不错的反响,于是Facebook决定将其开源.出身名门的React也不负众望,成功 ...
- 【React自制全家桶】八、React动画以及react-transition-group动画库的使用
React动画通常有三种方法实现从易到难为: 1.transition(CSS3自带) 2.animation(CSS3自带) 3.react-transition-group动画库(需要引入插件) ...
- 【React自制全家桶】五、React组件的生命周期函数详解
一.总览React组件的生命周期函数 什么是生命周期函数:简单的来说就是 在某个时刻会自动执行的函数 二.React的生命周期函数主要由四块组成 分别是:组件初始化.组件挂载.组件更新.组件卸载 三. ...
- 【React自制全家桶】四、React中state与props的分析与比较
一.state 1.state的作用 state是React中组件的一个对象.React把用户界面当做是状态机,想象它有不同的状态然后渲染这些状态,可以轻松让用户界面与数据保持一致. React中,更 ...
- 【React自制全家桶】三、React使用ref操作DOM与setState遇到的问题
在React中同时使用ref操作DOM与setState常常会遇到 比如操作的DOM是setState更新之前的DOM内容,与想要的操作不一致.导致这样的原因是setState函数是异步函数. 就是当 ...
- 【React自制全家桶】二、分析React的虚拟DOM和Diff算法
一.React如何更新DOM内容: 1. 获取state 数据 2. 获取JSX模版 3. 通过数据 +模版结合,生成真实的DOM, 来显示,以下行代码为例(简称代码1) <div id= ...
随机推荐
- Visual C++文件扩展名解读
VisualC++文件扩展名解读 [1] .APS:存储二进制资源的资源辅助中间文件(能否加快资源加载速度). [2] .BMP:位图资源文件. [3] .BSC:浏览信息文件.由浏览信息维护工具(B ...
- 受限玻尔兹曼机(RBM)以及对比散度(CD)
1. RBM 的提出 BM 的缺点: 计算时间漫长,尤其是无约束自由迭代的负向阶段: 对抽样噪音敏感: 流行软件的不支持: 受限玻尔兹曼机(Restricted Boltzmann Machine,简 ...
- IP地址的正则表达式
关键字:IP地址 正则表达式作者:txw1958出处:http://www.cnblogs.com/txw1958/archive/2011/10/13/ip_address_regular_expr ...
- stream 文件操作
简单的帮助类: private static byte[] StreamToBytes(Stream fs) { byte[] bArr = new byte[fs.Length]; fs.Read( ...
- win10+vs2008编译比特币1.0版源码总结
https://zhuanlan.zhihu.com/p/25074960 https://zhuanlan.zhihu.com/p/25095222 总体上是参考这两个链接,感谢大神的分享,但是中间 ...
- MSRA专访摘要
前段时间有幸参加微软亚洲研究院之旅,顺便投简历,没想到在两次访谈迎来,并且是连续 的两次被拒绝.严重的刺激到了我.导致我疯狂的复习刷Offer.如今最终算是告于段落.如今也最终有空沉下心来总结 总结近 ...
- 【windows】常见的系统环境变量,如%appdata%表示什么意思
原文:[windows]常见的系统环境变量,如%appdata%表示什么意思 1.介绍 %appdata%就代表了C:Users\用户名\AppData\Roaming这个文件夹. “%”是系统变量的 ...
- linux系统中ls命令的用法
普通文件: -,f目录文件: d链接文件(符号链接): L设备文件:字符设备:c块设备:b命名管道: p套接字文件: s linux文件时间戳 时间分为三种类型:创建时间,修改时间:open访问时间: ...
- 前端PS常用切图技巧
前言:前端涉及到的 ps 操作不算复杂,基本上就是切图,本文总结了常用的几种切图技巧. 工具:photoshop cs6 . photoshop cc 1. 传统切图 01 这是最笨的一种方法,核心就 ...
- WPF 遍历 控件
比较简单的方式是 在设计一个画面时 先添加一个grid 或其他的布局控件 确保要遍历的控件都在这个Grid中时就可以这么写 foreach (UIElement uie in Grid.Childre ...