withRouter

withRouter 是组件的装饰器(HoC,高阶组件),可以给业务组件的 props 中注入 router 对象进而控制路由跳转,用法与 redux 的 connect 相同,如:

  1. const App = () => <div>hello</div>
  2. // 普通装饰方式
  3. export default withRouter(App)
  4. // 类装饰方式
  5. @withRouter
  6. class App extends Component {}

如果 withRef 设置为 true,装饰后的组件可以通过 getWrappedInstance 方法获得低阶组件的 ref

如果 lifecycle 设置为 true,被装饰的组件将获得四个生命周期:

  • inited:对应 hy 的 getInitData 方法,获取参数内容为:{ type: 'push', payload: data }
  • actived:对应 hy 的 onShow 方法,获取参数内容为:{ type: 'show' }
  • received:对应 hy 的 onReceiveData 方法,获取参数内容为:{ type: 'pop', payload: data }
  • deactived:对应 hy 的 onHide 方法; 这四个生命周期在单页和 Hy 下的对应完全相同,在多页场景下仅拥有 inited、actived 和 received 方法(因为多页的页面会被销毁,因此不推荐使用 deactived)。
  1. class Hello extends Component {
  2. constructor(props) {
  3. super(props)
  4. this.state = { list: [] }
  5. }
  6. actived(data) {
  7. console.log(`actived ` + data.type)
  8. }
  9. deactived() {
  10. console.log(`deactived`)
  11. }
  12. render() {
  13. return <div>hello</div>
  14. }
  15. }
  16. class H = withRouter(Hello, { lifecycle: true })
  17. <Route path="/hello" component={H} />

方法

withRouter

方法参数:

参数名类型描述必选支持版本
WrappedComponentComponent被装饰的组件
optionsobject选项,可配置 withRef 与 lifecycle