1.安装react-router-dom
1.1 在项目命令行中,执行
npm install react-router-dom-S
下载到生产环境依赖中。
2.路由内置组件
HashRouter
表示一个路由的跟容器,将来所有跟路由相关的东西,都要包裹在HashRouter中,一个网站中,只需要使用一次HashRouter就好了。
Link
表示一个路由的连接;
Route
表示一个路由规则;
1 render(){ 2 return ( 34 16 ); 17 }515这是网站的根目录
6
7 "/new">首页 8 "/movie/">新闻 9 "/about">关于我们 10
11"/home" component={HOME} >
12"/new" component={New} exact>
13"/about" component={About}>
14
由Route创建的标签,就是路由规则,其中path表示要匹配的路由,component表示要展示的组件。
Route具有两种身份:
1.它是一个路由匹配规则;
2.它是一个占位符,表示将来匹配到的组件都放到这个位置
注意:
Link to属性的地址也是/开头,Link在页面渲染的是a标签;
Route 组件path地址是以/开头 ,配置component属性,是显示的组件,这个属性不可以大写;
3.嵌套路由
嵌套路由:在路由组件中,使用Link,Route,配置子路由,实现跳转,切换;
下面为一级路由,在一级路由New为路由组件
1"/new" component={ New }> 2 3 render (){ 4 return( 56 《新闻》 7 23 ) 24 }8
18- 9 "/new/act">今日聚焦 10
11- 12 "/new/three">三农信息 13
14- 15 "/new/week">新闻周刊 16
17"/new/act" component={Act}> 19"/new/three" component={Three}> 20"/new/week" component={Week}> 21 22
4.带参数路由和获取参数
通过配置路由的地址,在Link跳转时
Route path路径后面 /:id (key)
Link to 路径后面 /top/10 (value)
接收传值:
class类组件,this.props.match.params.属性名
函数组件:形参.match.params.属性名
代码实例:
1 render(){ 2 return ( 34 12 ); 13 }511网站根目录
6
7 "/about/add/5497">关于我们 8
9"/about/:type/:id" component={Movie} exact> 10
在Route内置组件中,配置path地址
1"/about/:type/:id" component={Movie}> 2 3 //在Link内置组件中,配置to属性,进行跳转: 4 5 "/about/active/5497"> 6 7 //类组件中通过声明周期进行接收this.props传递过来的数据 8 9 render(){ 10 console.log(this); 11 return ( 1213 电影--{this.props.match.params.type}--{this.props.match.params.id} 1415 ); 16 }
5. HashRouter和BrowserRouter的区别
React-Router 是建立在 history 之上的,常见的history路由方案有三种形式,分别是:
- hashHistory
- hashHistory 使用 URL 中的 hash(#)部分去创建路由,举例来说,用户访问http://www.example.com/,实际会看到的是http://www.example.com/#/。
- browserHistory
- browserHistory 是使用 React-Router 的应用推荐的 history方案。它使用浏览器中的 History API 用于处理 URL,创建一个像example.com/list/123这样真实的 URL
- 当刷新页面时,浏览器会向服务器请求,服务器实际会去找根目录下对应的文件,发现找不到,因为实际上我们的服务器并没有这样的 物理路径/文件 或没有配置处理这个路由,所有内容都是通过React-Router去渲染React组件,自然会报404错误。
- createMemoryHistory
- Memory history 不会在地址栏被操作或读取。这就解释了我们是如何实现服务器渲染的。同时它也非常适合测试和其他的渲染环境(像 React Native )。和另外两种history的一点不同是你必须创建它,这种方式便于测试。
两种解决方法
- 使用hashHistory,不用做额外处理
- 使用browserHistory,服务器需要进行相关路由配置
方法见这里