reactjs - 将路由器历史记录传递给 onClick 组件

标签 reactjs react-router

尝试使用容器和演示组件来清理我的 React 应用程序。我正在使用 react-router v4,之前我对每个 job 使用了 onClick 事件来显示特定的作业页面:

<div onClick={() => this.props.history.push('/jobs/' + job.slug)}>
  //The job info
</div>

现在我在一个单独的文件中为这样的作业创建了一个愚蠢的组件:

const Jobs = (props) => (
  <div>
  {
    props.jobs.map(job =>
      <div key={job.slug} onClick(//todo)>
        <p>{job.title} at <Link to="/">{job.company}</Link></p>
      </div>
    )
  }
  </div>
)

但我无法再访问 this.props.history

如何解决这个问题?我应该在下面传递另一个 Prop 吗:

<Jobs jobs={jobs}/>

最佳答案

要通过组件的 props 访问路由器对象(matchhistorylocation),必须通过 Route 渲染组件或者它应该用 withRouter 包裹起来高阶组件。

检查您的 Jobs 组件是否是通过 Route 直接渲染的,如下所示。

<Route path="/jobs" component={Jobs} />

如果不是这种情况,并且 Jobs 组件是在另一个组件的 render 方法中使用 JSX 渲染的,则用 withRouter 包装它在导出高阶组件之前,如下所示。

export default withRouter(Jobs);

这将确保 Jobs 组件可以访问所有 router props。

此外,请确保使用 props.history 而不是 this.props.history,因为它现在是功能组件。

关于reactjs - 将路由器历史记录传递给 onClick 组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44098665/

相关文章:

javascript - 从外部函数渲染后改变 ReactJS 类的状态

reactjs - 如何正确设置axios默认标题

javascript - react悬念如何保持在同一页面-LazyLoading

javascript - 更改 react 路由器链接的顺序

reactjs - 嵌套路由的 React Router 整页

reactjs - componentDidUpdate 是否在所有子项更新后运行?

javascript - ReactJS需要从外部类组件调用函数

reactjs - 如何使用reactjs、redux和redux-simple-router根据auth状态共享根URL?

reactjs - Semantic-ui-react:搜索结果不可见

reactjs - 更改react-native-router-flux中的场景背景颜色