添加首页
使用IndexRoute设置默认页面(此时App的render中的this.props.children为元素)
路径写法
在多层嵌套路由中使用绝对路径(可能在动态路由中无法使用)
- 使用/message/:id替代message/:id
- 再使用重定向写法将"/inbox/messages/:id"地址都匹配跳转到"/messages/:id"
- 也可以转换成JSX结构
路径语法
- :paramName 其中paramName作为参数
- () 在其内部的内容被认为是可选的
- * 匹配任意字符(非贪婪的)知道命中下一个字符或整个URL的末尾
优先级
根据定义的顺序由上向下匹配路由(要确认前一个路由不会匹配到后一个路由中的路径)
跳转前确认
routerWillLeave生命周期钩子可以使React组件拦截正在发生的跳转或在离开route前提示用户。
-
routerWillLeave有两个返回值:
-
return false 取消此次跳转
-
return "提示信息" 在离开route前提示用户进行确认
-
- 在route组件中引入Lifecycle,并用mixin安装
- 若在深层嵌套的组件中使用routerWillLeave钩子,需要在route组件中引入RouteContext,并用mixin安装
在组件外部使用导航
组件内部使用this.context.router实现导航,在组件外部使用Router组件上的history实现导航
组件生命周期
路由配置:
- 当用户打开"/"页面时,组件生命周期的状态:
- 当用户从 '/' 跳转到 '/invoice/123'时,组件生命周期的状态:
- App 从 router 中接收到新的 props(例如 children、params、location 等数据), 所以 App 触发了 componentWillReceiveProps 和 componentDidUpdate 两个生命周期方法
- Home 不再被渲染,所以它将被移除
- Invoice 首次被挂载
- 当用户从 "/invoice/123" 跳转到 "/invoice/789"
- 所有的组件之前都已经被挂载, 所以只是从 router 更新了 props.
- 当从 "/invoice/789" 跳转到 "/accounts/123"
- Invoice 组件的数据获取功能