我有sometimes seen个人在出口组件时将其包装在withRouter中:

import { withRouter } from 'react-router-dom';

class Foo extends React.Component {
  // ...
}

export default withRouter(Foo);

这是干什么用的?我什么时候用?

推荐答案

当你在应用程序中包含一个主页组件时,它通常被包装在一个<Route>组件中,如下所示:

<Route path="/movies" component={MoviesIndex} />

通过这样做,MoviesIndex组件可以访问this.props.history,从而可以用this.props.history.push重定向用户.

有些组件(通常是页眉组件)出现在每页上,因此没有包装在<Route>中:

render() {
  return (<Header />);
}

这意味着标头无法重定向用户.

为了解决这个问题,可以在导出头组件时将其包装在withRouter函数中:

export default withRouter(Header)

这使Header组件可以访问this.props.history,这意味着报头现在可以重定向用户.

Reactjs相关问答推荐

从另一个组件更改组件中const的状态

关于同一位置的不同组件实例的react S规则被视为相同组件

使用下一步中的路由/导航不会立即加载路由

试图从Amazon-Cogito-Identity-js模拟CogitoUser.authateUser,并将其获取为未定义的S

使用VITE的Reaction应用程序的配置是否正确?

useRef()的钩子调用无效

StrictMode+SetInterval=双重渲染(即使使用useEffect清理)

生产部署:控制台中 Firebase 无效 api 密钥错误

提前输入错误:选项类型上不存在属性名称

解决在React测试库中的act()警告

如何在 ReactJS 中提交后删除 URL 中的查询参数

react-router v6 中的 BrowserRouter 和 createBrowserRouter 有什么区别?我可以在不使用数据 API 的情况下使用 createBrowserRouter 吗?

如何在 React 中使用 debounce hooks

下一次导出:未捕获的语法错误:标识符注册表已被声明

调用 Statsig.updateUser 时 UI 不呈现

如何解决在 react.js 中找不到模块错误

如何通过 Material ui select 使下拉菜单下拉

如何在react 日历中自定义带有圆形边框的日期项?

在 React 中使用使用状态挂钩合并两个数组

在 redux 状态更改时更新react 按钮禁用状态