相信不少刚学react的朋友都会和我同样,在使用react来建立路由的时候,发现官网上写的是html
import *** from 'react-router';
而后百度看了不少博客文章 ,发现是react
import *** from 'react-router-dom';
那么这两个玩意儿究竟是什么关系呢?git
那么咱们要怎么用呢?
首先,react-router-dom里包含了react-router的依赖,所以咱们在安装的时候只须要安装后者便可。github
npm install react-router-dom --save
注意:这里使用的是BrowserRouter的路由模式。请根据你的须要选择不一样模式。
各类模式区别请看 react-router中文文档 ,这里不作赘述
新建一个Router.js
文件,至于在哪里新建,你喜欢就好。npm
//引入react jsx写法的必须 import React from 'react'; //引入须要用到的页面组件 import Home from './pages/home'; import About from './pages/about'; //引入一些模块 import { BrowserRouter as Router, Route} from "react-router-dom"; function router(){ return ( <Router> <Route path="/home" component={Home} /> <Route path="/about" component={About} /> </Router>); } export default router;
这里是home组件api
//home.js import React, { Component } from 'react'; export default class Home extends Component { render() { return (<h1> 欢迎,这里是Home </h1>) } }
这里是about
组件浏览器
//about.js import React, { Component } from 'react'; export default class About extends Component { render() { return (<h1> 欢迎,这里是About </h1>) } }
根据咱们上面写的路由,可知页面结构以下react-router
| |--home |--about //那么localhost:3000/home 就会渲染home组件(若是你的项目是react脚手架默认生成的项目) //localhost:3000/about 就会渲染about组件
而后咱们在app.js
中引入这个文件便可app
import Router from './Router' class App extends React.Component { render(){ return ( <Router /> ); } }
当咱们须要页面的局部变换的时候,就须要用到这个了。好比说标题栏不变,内容根据路由地址引入不一样的模块~dom
在须要嵌套路由的地方,加上
{this.props.children} //这里就是嵌套路由展现的地方
好比咱们如今要给about
加一个子路由other
那么咱们首先须要改写about.js
文件
//about.js import React, { Component } from 'react'; export default class About extends Component { render() { return (<h1> 欢迎,这里是About {this.props.children} //这里就是嵌套路由展现的地方 </h1>) } }
而后再更改router.js
路由文件
//前面的引入就省略了,查看上一章节便可 //新引入一个ohter组件,用于渲染嵌套路由,other内容和前面的home.js同样 import Ohter from './pages/other'; function router(){ return ( <Router> <Route path="/home" component={Home} /> <Route path="/about" render={()=>( <About> <Route path="/about/other" component={Other} /> </About> )}> </Route> </Router>); } export default router;
other
组件嵌套在了about
里面注意事项
1/ render={()=>对象} 这里的对象不须要大括号噢,若是你熟悉箭头语法的话,那么应该不用我多说
2/ 拥有子路由的路由不能添加 exact属性,否则会没法访问到子组件
有时候,咱们须要把 "/" 重定向到咱们的主页,这样用户直接输入"www.***.com"就能够了,而不用输入"www.***.com/home"。
//router.js //须要import一下Redirect import {Redirect} from "react-router-dom"; return ( <Router> <Route path="/home" component={Home} /> <Route path="/" render={ ()=> ( <Redirect to="/home"/>)}> </Route> </Router>); } export default router;
我也是刚学react 2天,而后整这个路由整1小时才整明白,官方中文文档的有些东西好像过时了,像IndexRoute,一直引入一直报错,实属蛋疼。若是有写错的地方,或者有更好的写法,欢迎给我留言~谢谢