react-router-dom的使用

router/index.js

import React from 'react'
import {
		BrowserRouter as Router,
		Switch,
		Route,
		Redirect
} from "react-router-dom";
import App from '../App';
import Home from "../views/home";
import Find from "../views/find";
import Detail from "../views/detail";
import {Provider} from 'react-redux'
import store from '../store'
const router = (
		// Provider这个提供器连接了store,那么Provider里面的所有的组件都有能力获取store里面的内容了
		<Provider store={store}>
		<Router>
				<App>
						<Switch>
								<Route exact path="/" component={Home}/>
								<Route path="/find" component={Find}/>
								{/* 路由传参 */}
								<Route path="/detail/:id" component={Detail}/>
								{/* 必须放在Switch中的最后一行当用户访问某界面时,该界面并不存在,
									此时用Redirect重定向,重新跳到一个我们自定义的组件里 */}
								<Redirect from="*" to="/"/>
						</Switch>
				</App>
		</Router>
		</Provider>
);

export default router

对于exact的解释:

 exact是Route下的一条属性,一般而言,react路由会匹配所有匹配到的路由组价,exact能够使得路由的匹配更严格一些。

  exact的值为bool型,为true是表示严格匹配,为false时为正常匹配。

  如在exact为true时,’/link’与’/’是不匹配的,但是在false的情况下它们又是匹配的。

  一个常用的场景是这样的:

<Route path='/' component={Home} />
<Route path='/page' component={Page}>
//这种情况下,如果匹配路由path='/page',那么会把Home也会展示出来。
所以我们经常添加exact来解决上述问题。

<Route exact path='/' component={Home} />
<Route path='/page' component={Page} />

之后我们来到根目录入口文件index.js:

import router from './router'
ReactDOM.render(router, document.getElementById('root'));

附上App.js的代码

import React, { Component } from 'react';
import './App.css';
import TabBar from './components/tabBar'
import ToTop from './components/toTop'

class App extends Component {
  render() {
    return (
      <div id="App">
        {/* 是this.props.children属性。它表示当前App组件的所有子节点。 */}
        {this.props.children}
        <TabBar/>
        <ToTop/>
      </div>
    );
  }
}

export default App;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值