react中router使用方式

react路由有两种:BrowserRouterHashRouter

BrowserRouter原理是H5的historyAPI

地址栏没有#号

通过高阶组件的属性代理方式,将match, location, history以props的形式传递给route

import {Switch, Route, Link, BrowserRouter as Router} from 'react-router-dom'

		render() {
		let obj = {
			pathname: '/component',
			search: 'sort=name',//可以加?也可以不加;放在url上,获取在location中;
			test: { fromDashboard: 123 },//刷新报错。
			state: { fromDashboard: 123 },
			query: { fromDashboard: 123 }
		  }
		var state = {
			pathname: '/state',
			state: '我是通过state传值'
		}
		return (
			<Router>
				<div className="App">
					<header className="App-header">
						<img src={logo} className="App-logo" alt="logo"/>
						<h1 className="App-title">Welcome to React</h1>
					</header>
					<div className="App-intro">
						<div><Link to="/path/通配符">通配符</Link></div>//在match中,获取值;在地址栏显示;
						<div><Link to={obj}>component</Link></div>
						<div><Link to={state}>state</Link></div>
					</div>
					<div>
						<h3>内容</h3>
						<Switch>
						    
							<Route path='/path/:name' component={Path}/>
							<Route path="/component" component={Query}/>
							<Route path='/state' component={State}/>
							<Route path='/*' component={Home}/>
						</Switch>
					</div>
				</div>
			</Router>
		);
	}




		let obj = {
			pathname: '/component',
			search: '?sort=name',
			test: { fromDashboard: 123 },
			state: { fromDashboard: 123 },
			query: { fromDashboard: 123 }
		  }
这些参数都可以在location中找到,但是search可以显示在标题栏中;并且用该参数可以刷新,search中的值,会自动添加?


 match, location上面代码已经讲了,history是传递给route路由js方法

可以前进后退,跳转;

如果要设置默认路由,有三种方式:

<Route path='/*' component={Home}/>

<Route   component={Home}/>

<Route  path='/' component={Home}/>

都加到Switch的末尾;

 

路由权限认证

 

随便写了一个demo

import React, {Component} from 'react';
import {Switch, Route, Link, HashRouter as Router} from 'react-router-dom'
import Path from './Path'
import Query from './Query'
import State from './State'
import Home from './Home'
import logo from './logo.svg';
import './App.css';



// HOC.js

const withAuth = Route => {

    return class WithAuth extends Component {

        state = {

            permission: false,

        }

        async componentWillMount() {

			var random=Math.random();
			if(random<0.5){//在这里判断是否有权限查看该component;
				this.setState({
					permission: true
				});
			}else{
				
			}



        }

        render() {

            if (this.state.permission) {

                return <Route {...this.props} />;

            } else {

                return (<div>您没有权限查看该页面,请联系管理员!</div>);

            }

        }

    };

}


var WithAuth=withAuth(Route)


class App extends Component {

	render() {
		let obj = {
			pathname: '/component',
			search: 'sort=name',
			test: { fromDashboard: 123 },
			state: { fromDashboard: 123 },
			query: { fromDashboard: 123 }
		  }
		var state = {
			pathname: '/state',
			state: '我是通过state传值'
		}
		return (
			<Router>
				<div className="App">
					<header className="App-header">
						<img src={logo} className="App-logo" alt="logo"/>
						<h1 className="App-title">Welcome to React</h1>
					</header>
					<div className="App-intro">
						<div><Link to="/path/通配符">通配符</Link></div>
						<div><Link to={obj}>component</Link></div>
						<div><Link to={state}>state</Link></div>
					</div>
					<div>
						<h3>内容</h3>
						<Switch>
						    
							<Route path='/path/:name' component={Path}/>
							<WithAuth path="/component" component={Query}/>
							<Route path='/state' component={State}/>
							<Route path='/*' component={Home}/>
						</Switch>
					</div>
				</div>
			</Router>
		);
	}
}

export default App;

相关代码:https://github.com/newway7/react-router-test

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值