React:Router

路由基本使用

1、明确好界面中的导航区、展示区
2、导航区的a标签改为Link标签
	import {Link} from 'react-router-dom';
	<Link to="/xxx"></Link>
3、展示区写Route标签进行路径的匹配
	<Route path="/xxx" component={Demo}/>
4<App> 的最外侧包裹一个 <BrowserRouter><HashRouter>

路由组件与一般组件

1、写法不同:
	一般组件:<Demo />
	路由组件:<Route path="/demo" component={Demo} />
2、存放位置不同:
	一般组件:component
	路由组件: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"

路由传递数据

1. params 参数
	路由链接(携带参数):<Link to="/demo/test/tom/18"></Link>
	注册路由(声明接收):<Route path="/demo/test/:name/:age" component={Test} />
	接收参数:const {name, age} = this.props.match.params

2. search 参数
	路由链接(携带参数):<Link to="/demo/test/?name=tom&age=18"></Link>
	注册路由(无需声明,正常注册即可):<Route path="/demo/test" component={Test} />
	接收参数:this.props.location.search
	备注:获取到的 search 是 urlencoded 编码字符串,需要借用querystring解析 
	import qs from "querystring"; 
	qs.parse(this.props.location.search.slice(1));
	
3. state 参数
	路由链接(携带参数):<Link to={{path:"/demo/test", state:{name: 'tom', age: 18}}}></Link>
	注册路由(无需声明,正常注册即可):<Route path="/demo/test" component={Test} />
	接收参数:this.props.location.state
	备注:刷新也可以保留住参数 

一般组件使用 路由组件功能

/**
* withRouter 处理后的一般组件 会加上 路由组件特有的API(history、location等)
**/

import {Component} from "react";
import {withRouter} from "react-router-dom";

class Demo extends Component{
	...
}

export default withRouter(Demo);

BrowserRouter 和 HashRouter 之前的区别

1. 底层原理不一样
	BrowserRouter 使用的是 H5 的 History API,不支持IE9及以下版本;
	HashRouter 使用的是 URL 的哈希值;
2. path表现形式不一样
	BrowserRouter 的url路径中不含 #,如:localhost:3000/demo/test;
	HashRouter 的路径中包含 #,如:localhost:3000/#/demo/test;
3. 刷新后对 state参数的影响
	BrowserRouter 没有任何影响,因为state是存储在 history 对象中;
	HashRouter 刷新后会导致路由state参数的丢失;
4. 备注 HashRouter 可以用于解决一些路径错误相关的问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

前端卡卡西呀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值