三种组件
- route component (
和 ) 创建history对象 - route matcching component(
和 )匹配当前path和pathname渲染组件,可做兜底处理 - navigation component:
- Link: 会渲染 a 元素锚点
特殊的Link,会判断当前路由是否和to匹配,由此定义自身状态 - Redirect 强制进行导航 to
在内存当中保存history, 常用于测试环境debug
匹配location展示对应UI, 不匹配的会留下空注解“react-empty”
三种渲染组件的方式(优先级a > b > c):
a. component: 相当于React.createElement重新创建了一个组件实例
b. render: 内联函数包裹组件
c. children: 通过match来动态渲染UI,即使不匹配也能渲染
如果在Switch里面,那么自身接受的location将被来自switch的覆盖
没有路径将会获取父级的match对象
可用于深度集成Redux的history
子元素应该全部是
location
永远不会发生变化的对象props.location(而不是history.location)
history
可变的对象,尽量使用
match
不匹配的时候将为null,同时调用children方法
withRouter
路由渲染,传递最新的 match , location 和 history给包裹组件
可在shouldComponentUpdate中做防止更新阻塞
也可以WrappedComponent获取到包裹的原组件,以及wrappedComponentRef拿到组件的ref
更新受阻
使用shouldComponentUpdate, 对路由的location变化进行比较
组件访问location:通过
实现
页面回到顶部: location发生变化,scrollto顶部
