react-router,道具“历史”未定义

Posted

技术标签:

【中文标题】react-router,道具“历史”未定义【英文标题】:react-router, The prop `history` is undefined 【发布时间】:2019-02-06 03:22:07 【问题描述】:

在我的 React 应用程序中,我正在使用 react-router-dom,并且在触发功能后,我想在其中一个组件中路由到主页。 但我得到了错误

The prop `history` is marked as required in `GameElements`, but its value is `undefined`.
    in GameElements (created by Connect(GameElements))

当然还有在致电Uncaught TypeError: Cannot read property 'push' of undefined之后

这是我的 index.js

ReactDOM.render(
  <BrowserRouter>
    <Provider store=store>
      <Route component=App />
    </Provider>
  </BrowserRouter>,
  document.getElementById("root")
);

从主页我到了这样的组件

<Button color="blue" as=Link to="/GameInit">
  START GAME
</Button>

现在从GameInit我想像这样回到主页

  cancel = () => 
    const  history, cancelGame  = this.props;
    cancelGame();
    history.push("/HomePage");
  ;

GameElements.propTypes = 
  cancelGame: PropTypes.func.isRequired,
  history: PropTypes.shape(
    push: PropTypes.func.isRequired
  ).isRequired,
;

取消游戏工作,它的减速器按应有的方式操纵状态

【问题讨论】:

【参考方案1】:

包装你 GameElementswithRouter hoc,将它包含在你的文件中

import  withRouter  from 'react-router'

现在在底部,您导出组件的位置执行此操作。

export default withRouter(Connect(GameElements));

您可以在docs 中阅读更多信息。

【讨论】:

我的导出是通过 redux 'Connect(GameElements)' 我的问题很清楚 谢谢它的工作,但我遵循这个项目风格:github.com/Remchi/bookworm-react,在这里我没有看到导出 withRouter 并且有效。例如页面/登录页面 它在那里工作,因为它是路由器组件的直接后代,用于路由器组件内的嵌套组件。您需要将其包装在 withRouter 的 hoc 中

以上是关于react-router,道具“历史”未定义的主要内容,如果未能解决你的问题,请参考以下文章

在 react-router v4 中将自定义道具传递给路由器组件

无法读取属性历史记录,因为它未定义,但它是

直接导航到组件时未呈现道具 - React Redux

如何使用 onClick 方法通过 react-router 传递道具

如何将自定义道具和历史传递给 Route

如何使用链接(react-router)将道具从一个页面传递到类组件