承接上一篇文章React学习笔记
安装
找到官方的github,可以看见更新到了4.0版本,虽然我也没有用过之前的版本。
这里有一个坑,虽然叫react-router
,但是安装的是react-router-dom
,因为官方教程,中引用的是react-router-dom
$ cnpm i -S react-router-dom
起步
引用方法,如官方文档所写
|
|
如果有新标签,那么记得引入进来
创建一个简单的路由,我直接引用之前的React项目,继续编写
我在App.js
下新建两个常量来装html标签
|
|
然后再class App
的render()
中写到
|
|
最先的Router
标签只包裹了下面路由的一块,但是出现一个报错
emmmmm,好吧,把<Router>
写在了最外面
Route
传值
各路由的这种发法都一样,在后面添加/:id
这样的方式去传值
这里改动一下,将Dom1
和Dom2
换成外部引入的方式,在src
目录下新建一个文件夹views
,然后写两个文件,Dom1.js
和Dom2.js
|
|
然后再App.js
中引用即可,然后再render()
里面做一个改动
|
|
模糊匹配
因为在React-router
中默认的有模糊匹配,比如/hello
会匹配到/
在App.js
中做一些修改
|
|
这个时候你就会在页面中发现,在这样的路由中,也匹配到了/
解决办法是加一条属性exact={true}
true和false是需要用{}抱起来的,当变量写进去
|
|
末尾斜杠的匹配
<Route />
标签还有一个属性,strict
,如果为true
的时候,path="/one/"
不匹配path="/one"
,但是可以匹配path="/one/two"
Link
无障碍式导航,和vue的<router-link>
是一个东西
地址
to
属性可以使字符串,可以是对象,比如我把之前的例子改一下
|
|
回退
如果将replact
属性写在/dom3
上面,那么从/dom3
返回的时候,会跳过/dom3
前面的一项去返回,比如路由是/dom1
->/dom2
->/dom3
,返回时候就直接从/dom3
->/dom1
|
|
这里需要注意的是,不是说把replace
写在/dom3
上面,/dom3
就会跳过,而是跳过他前面那一项
NavLink
就是<Link>
的升级版
选中时可以改变类名
activeClassName
可以给标签选中时添加一个类名
|
|
activeStyle
可以直接添加样式
|
|
选中导航时做点儿别的
isActive
决定导航是否激活,或者在导航激活时候做点别的事情。不管怎样,它不能决定对应页面是否可以渲染。
|
|
切换路由的时候,都会触发这儿函数,虽然不是进入或者离开/dom3
,就在/dom1
和dom2
之间切换
Switch
只会渲染出来一个相匹配的标签,比如说你的地址是/dom1
,然而你的路由有两个/dom1
和/:id
,这个时候,这个‘dom1’是路径还是id?
这个时候我先把之前的/
路由改动一下
|
|
这个时候就会发现,/:id
这个路由也会被加载,而且后面一项当做‘id’,但是用<Switch>
标签的话
|
|
这里需要注意一下,<Switch>
标签里面是从上到下开始查找,如果前面的匹配到了,那么就不会向下了。感觉这个可以做404页面呀!
Redirect
重定向,和vue里面的重定向一样
|
|
这个标签有一些属性:
- to :要重定到的路径
- push : 为真时就无法使用后退键了,永远在这里重定到的页面
- from : 将要被重定的路径
Prompt
用户离开页面的时候可以发生一些事
需要做的事写在message
属性里面
|
|
or
|
|