动态路由: 应用程序渲染时发生的路由

三种组件

  1. route component () 创建history对象
  2. route matcching component( )匹配当前path和pathname渲染组件,可做兜底处理
  3. navigation component:
    1. Link: 会渲染 a 元素锚点
    2. 特殊的Link,会判断当前路由是否和to匹配,由此定义自身状态
    3. Redirect 强制进行导航 to

to: string 或者object

在内存当中保存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匹配的第一个子元素

location

永远不会发生变化的对象props.location(而不是history.location)

history

可变的对象,尽量使用 的渲染,从其属性获取location而不是history.location

match

不匹配的时候将为null,同时调用children方法

withRouter

路由渲染,传递最新的 match , location 和 history给包裹组件
可在shouldComponentUpdate中做防止更新阻塞
也可以WrappedComponent获取到包裹的原组件,以及wrappedComponentRef拿到组件的ref

更新受阻

使用shouldComponentUpdate, 对路由的location变化进行比较
组件访问location:通过 组件渲染,有无路径都可以, 或者使用withRouter包裹组件

实现

页面回到顶部: location发生变化,scrollto顶部