This.props.history 未定义,如果从子组件调用[重复]

Posted

技术标签:

【中文标题】This.props.history 未定义,如果从子组件调用[重复]【英文标题】:This.props.history is undefined, if called from child component [duplicate] 【发布时间】:2018-08-18 00:15:50 【问题描述】:

我正在尝试从父组件内部验证答案。 validateAnswer 函数被触发并且几乎可以正常工作。

但如果网站经过验证,我想更改它。所以我从父母那里打电话给this.props.history.push。 这给了我一个错误,因为历史是未定义的。

<Answers handleClick=e => this.validateAnswer(e) />

//Function to validate the Answer in the parent
    validateAnswer = (event) => 
    if (true) 
      //navigate to /email
      this.props.history.push(
        pathname: '/email',
        state:  lastPage: 'question' ,
      );

    //Child component
         <Button
          name="1"
          label="Afrika"
          handleClick=props.handleClick
        />

我该如何解决这个问题?我应该直接在 Answer 组件中验证答案吗?

【问题讨论】:

validateAnswer() 函数中记录this 会返回什么? 你试过使用 withRouter HoC 吗? 【参考方案1】:

试试这个:

<Answers handleClick=this.validateAnswer />

// Function to validate the Answer in the parent
validateAnswer(event)
if (true) 
  //navigate to /email
  this.props.history.push(
    pathname: '/email',
    state:  lastPage: 'question' ,
  );

// Child component
 <Button
  name="1"
  label="Afrika"
  handleClick=(e) => props.handleClick(e) 
/>

【讨论】:

我试过这样,但仍然得到完全相同的错误。

以上是关于This.props.history 未定义,如果从子组件调用[重复]的主要内容,如果未能解决你的问题,请参考以下文章

React Router:替换位置状态然后返回,位置状态未定义

如何使用 this.props.history 发送的数据?

在 React 中,渲染重定向总是比使用 this.props.history.push 更好吗?

React-router v4 this.props.history.push(...) 不工作

this.props.history.push 在刷新后工作

this.props.history.push() 似乎不再适用于 React Router v4,有啥替代方案?