React_Route5

一、路由的基本使用

1.使用npm i react-router-dom@5 安装路由5
2.引入需要使用的组件import { Link, Route } from 'react-router-dom'
3.路由链接

{/* 在react中,靠路由链接实现切换组件---编写路由链接*/}
<Link className="list-group-item" to="/about">About</Link>     

4.注册路由

<Route path='/about' component={About} />

5.给组件最外侧包裹了一个<BrowserRouter><HashRouter>

reactDom.render(
    <BrowserRouter>
        <App />
    </BrowserRouter>
    , document.getElementById('root'))

二、navLink的使用

1.引入navLinkimport { NavLink, Route } from 'react-router-dom'
2.编写路由链接

<NavLink activeClassName='content' className="list-group-item" to="/about">About</NavLink>

注: activeClassName='content',content为自定义激活样式。
3.注册路由

<Route path='/about' component={About} />

三、封装navLink

封装一个NavLink命名为MyNavLink
1.引入NavLinkimport {NavLink} from 'react-router-dom'
2.封装MyNavLink组件

class MyNavLink extends Component {
    render() {
        return (
            // 当接收的属性很多时,用...this.props
            <NavLink activeClassName='atguigu' className="list-group-item" {...this.props} />
        );
    }
}

3.公开MyNavLink组件

export default MyNavLink;

4.在需要使用MyNavLink组件的文件引入MyNavLink组件

import MyNavLink from './components/MyNavLink'

5.使用MyNavLink组件

 <MyNavLink to='/about'>About</MyNavLink>

6.注册路由

<Route path='/about' component={About} />

四、switch的使用

Switch的使用
1.通常情况下,path和component是一一对应的关系。
2. Switch可以提高路由匹配效率(单一匹配)。

 <Switch>
    <Route path='/about' component={About} />
    <Route path='/home' component={Home} />
    <Route path='/home' component={Text} />
 </Switch>

五、解决样式丢失问题

解决多级路径刷新页面样式丢失的问题
1.public/index.html中引入样式时不写’./‘写’/’(常用)
2.public/index.html中引入样式时不写’./‘写’%PUBLIC_URL%’
3.使用HashRouter

六、精确匹配与模糊匹配

1.默认使用的是模糊匹配(简单记: [输入的路径]必须包含要[匹配的路径],且顺序要-)
2.开启严格匹配: <Route exact={true} path=" /about" component={About}/>
3.严格匹配不要随便开启,需要再开,有些时候开启会导致无法继续匹配二级路由

使用精确匹配exact=true

<Route exact path='/about' component={About} />

七、Redirect的使用

 1.一般写在所有路由注册的最下方,当所有路由都无法匹配时,跳转到Redirect指定的路由
 2.具体编码:
     <Switch>
         <Route exact path='/about' component={About} />
         <Route exact path='/home' component={Home} />
         <Redirect to='/home'/>
     </Switch>

八、嵌套路由的使用

嵌套路由
     1.注册子路由时要写上父路由的path值
     2.路由的匹配是按照注册路由的顺序进行的(APP中进行匹配)

代码:

<Route path="/home/news"component={News} />

九、组件传参

1.params参数
(1)路由链接(携带参数)

<Link to={`/home/message/detail/${msgObj.id}/${msgObj.title}`}>{msgObj.title}</Link> 

(2)注册路由(声明接收)

<Route path='/home/message/detail/:id/:title' component={Detail}></Route>

(3)接收参数

const { id, title } = this.props.match.params

2.search参数
(1)路由链接(携带参数)

<Link to={`/home/message/detail/?name=tom&age=18`}>详情</Link>

(2)注册路由(无需声明,正常注册即可)

<Route path='/home/message/detail' component={Detail}></Route>

(3)接收参数

const { search } = this.props.location

3.state参数
(1)路由链接(携带参数)

<Link 
	to={{pathname: "/home/message/detail",
		 state: { id: msgObj.id, title: msgObj.title }}}
>
	{msgObj.title}
</Link>

(2)注册路由(无需声明,正常注册即可)

<Route path="/home/message/detail" component={Detail} />

(3)接收参数

const {id,title}=this.props.location.state || {}

十、push模式

默认模式,可以记录浏览记录,回退到上一次操作页面记录
1.携带params参数

this.props.history.push(`/home/message/detail/${id}/${title}`)

2.携带search参数

this.props.history.push(`/home/message/detail/?id=${id}&title=${title}`)

3.携带state参数

this.props.history.push(`/home/message/detail`,{id:id,title:title})

十一、replace模式

会替换掉当前路由,回不到上一级路由
1.携带params参数

this.props.history.replace(`/home/message/detail/${id}/${title}`)

2.携带search参数

this.props.history.replace(`/home/message/detail/?id=${id}&title=${title}`)

3.携带state参数

this.props.history.replace(`/home/message/detail`,{id:id,title:title})

十二、withRouter的使用

withRouter可以加工一般组件,让一般组件具备路由组件所特有的API
withRouter的返回值是一个新组件

使用:export default withRouter(Header)

一般组件与路由组件

1.写法不同:
   一般组件: <Demo/>
    路由组件: <Route path="/demo" component={Demo}/>

2.存放位置不同:
    一般组件:components
    路由组件: pages

3.接收到的props不同:
    一般组件:写组件标签时传递了什么,就能收到什么

    路由组件:接收到三个固定的属性
        history:
            go: f go(n)
            goBack: f goBack()
            goForward: f goForward( )
            push: f push(path, state)
            replace: f replace(path, state)

        location :
            pathname: " /about'
            search:
            state: undefined

        match :
            params: {}
            path: "/about"
            url: "/about"
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值