Skip to content

Commit d656a41

Browse files
committed
edit md
1 parent 41e86ba commit d656a41

2 files changed

Lines changed: 90 additions & 1 deletion

File tree

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ React 是 facebook 开源的一套框架,可总结为以下几个特点:
1717
- [生命周期](https://github.com/wscats/react-tutorial/tree/master/react/component/src/lifecycle)
1818
- [模块化(webpack)](https://github.com/wscats/react-tutorial/tree/master/react/webpack)
1919
- [脚手架(create-react-app)](https://github.com/wscats/react-tutorial/tree/master/react/create-react-app)
20-
- [路由(3.0)](https://github.com/wscats/react-tutorial/tree/master/react/router)
20+
- [路由(3.0)](https://github.com/wscats/react-tutorial/tree/master/react/router)[和(4.0)](https://github.com/wscats/react-tutorial/tree/master/react/router4)
2121
- Redux
2222
- [Redux 简介和简单实现](https://github.com/wscats/react-tutorial/tree/master/react/redux)
2323
- [Redux 跨组件通信之入门篇 —— combineReducers](https://github.com/wscats/react-tutorial/tree/master/react/redux/combineReducers)

react/router4/README.md

Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
# 路由
2+
3+
关于路由,我们得先了解,什么是单页面应用程序和多页面应用程序,因为路由是帮助我们实现单页面应用程序的关键
4+
|type|des|
5+
|-|-|
6+
|实现单页面应用程序single page application(SPA)|不刷新整个页面,永远在一个`index.html`,依靠路由切换具体的场景,首次加载大部分大部分东西,后面异步加载具体要更新的内容|
7+
|多页面应用程序|页面跳转,整体刷新,资源文件重新加载|
8+
9+
10+
[React-Router-DOM官方文档](https://reacttraining.com/react-router/web/guides/quick-start)中你会看到关于 React 路由有以下可以选装的模块
11+
12+
|引用|作用|
13+
|-|-|
14+
|react-router|React Router 核心|
15+
|react-router-dom|用于DOM绑定的React Router|
16+
|react-router-native|用于React Native的React Router|
17+
|react-router-redux|React Router和Redux的集成|
18+
|react-router-config|静态路由配置的小助手|
19+
20+
## react-router和react-router-dom的区别
21+
在React的使用中,我们一般要引入两个包,react 和 react-dom,react-router 和react-router-dom 并不是两个都要引用的
22+
他们两个只要引用一个就行了,不同之处就是后者比前者多出了`<Link>``<BrowserRouter>`这样的 DOM 类组件。
23+
因此我们只需引用react-router-dom这个包就行了。当然,如果搭配 redux,你还需要使用 react-router-redux 或者 react-redux
24+
25+
那现在我们选用的是 react-router-dom,所以先安装路由模块 react-router-dom
26+
27+
```bash
28+
npm install react-router-dom
29+
```
30+
31+
## BrowserRouter和HashRouter
32+
33+
**react-router4**[官方文档](https://reacttraining.com/react-router/web/guides/quick-start)默认使用的是`BrowserRouter,BroswerRouter`是需要服务端配合的,服务端重定向到首页,`BrowserRouter`是基于html5的`pushState``replaceState`的,很多浏览器不支持,存在兼容性问题。所以新手推荐使用`HashRouter`
34+
35+
简单总结`BrowserRouter`称为浏览器路由,使用的时候是url上面不带`#`,兼容性比较差,需要后端配合,比较好看,`HashRouter`称之为哈希路由,兼容性比较高
36+
37+
38+
react-router-dom 有三个内置组件
39+
```js
40+
import { HashRouter as Router , Link , Route} from "react-router-dom";
41+
```
42+
`Router`的作用是让包裹的子组件产生路由场景,相当于 Vue 中的`<router-view>`
43+
```js
44+
ReactDOM.render(
45+
<Router>
46+
<App />
47+
</Router>
48+
, document.getElementById('root'));
49+
```
50+
`Link`相当于`<a>`标签,提供跳转路由的功能
51+
```html
52+
<link to = "/xxxx">
53+
```
54+
Route相当于`vue-router`里面的配置参数
55+
```html
56+
<Route path="/" exact component={Index} />
57+
<Route path="/detail/" component={Detail} />
58+
```
59+
上面代码的含义为
60+
61+
url匹配到`#/`切换到`Index`组件
62+
63+
url匹配到`#/detail/`切换到`Detail`组件
64+
65+
## 嵌套路由
66+
67+
68+
路由里面放路由,第一层路由`/home/`
69+
```html
70+
<Route path="/home/" exact component={Index} />
71+
```
72+
嵌套路由就是在Index组件里面在放一个`<Route>`组件,当进入`/home/hot`路径时,既加载`Index`组件,也加载`Wpannel`组件
73+
```html
74+
<Route path="/home/hot/" exact component={Wpannel} />
75+
```
76+
注意,嵌套路由的`path`是要把第一层路由的路径加上
77+
78+
## 编程式导航
79+
80+
除了使用`<Link>`标签跳转路由,还可以使用路由提供给你的`this.props.history`进行跳转
81+
82+
## 路由传参
83+
84+
|状态|方式|
85+
|-|-|
86+
|Route component|以this.props.match方式|
87+
|Route render|以({ match })=>()方式|
88+
|Route children|以({ match })=>()方式|
89+
|withRouter|以this.props.match方式|

0 commit comments

Comments
 (0)