【问题标题】:react - reference to component passed as a promptreact - 对作为提示传递的组件的引用
【发布时间】:2018-04-21 17:56:26
【问题描述】:

我在我的测试组件中渲染了 EditModal 组件。我通过“this.edit”引用它。 我将 UserForm 组件作为提示传递给 EditModal。我也尝试参考它。但是“this.form”返回未定义。

为什么?有没有办法解决这个问题?

class Test extends React.Component {

   test(){
     this.form.someMethod();
   }

    render() {   
      return (
        <div>            
          <EditModal form={<UserForm ref={(form) => { this.form = form; }} />} ref={(edit) => { this.edit = edit; }}/>                        
        </div>
      );
    }
  }
export default Test;

//EditModal.js

class EditModal extends React.Component {
    constructor() {
        super();
        this.handleShow = this.handleShow.bind(this);
        this.handleClose = this.handleClose.bind(this);
        this.state = { show: false};
    }

    handleClose() {
        this.setState({ show: false });
    }

    handleShow(id) {
        this.setState({ show: true, currentId: id});
    }

  render() {
    return (
        <Modal show={this.state.show} onHide={this.handleClose}>
            <Modal.Header closeButton={false}>
            <Modal.Title>Uprav zaznam</Modal.Title>
            </Modal.Header>
        <Modal.Body>
           {this.props.form}
        </Modal.Body>
            <Modal.Footer>
            <Button onClick={this.handleClose}>Zatvorit</Button>
            </Modal.Footer>
      </Modal>
    );
  }
}

export default EditModal;

【问题讨论】:

  • this.form 和 this.edit 是什么?它们在哪里定义。请发布包含它们的代码。
  • 在 EditModal 组件中被引用。
  • 我不熟悉,不好意思……
  • 你什么时候给this.form.someMethod();打电话的?

标签: reactjs react-props react-component


【解决方案1】:

this.form 将在安装UserForm 组件后(可能在EditModal 内)并且仅当EditModal 不克隆表单属性并覆盖ref 时才可访问。

因此,如果this.form 未定义,则它可能尚未安装,或已卸载(在调用测试方法时)或ref 已被覆盖。

如果没有EditModal 的代码,任何人都无法确定上述哪种情况。

【讨论】:

  • setTimeout(function(){ console.log(this.form); }.bind(this), 3000);现在它在测试方法中返回对象。谢谢。
  • 您可能希望找到比使用 setTimeout 更好的方法。当您收到组件实例时,您也许可以在 ref 回调本身中启动依赖于 this.editForm 的操作。
猜你喜欢
  • 1970-01-01
  • 2015-02-08
  • 1970-01-01
  • 1970-01-01
  • 2018-08-01
  • 2016-06-06
  • 1970-01-01
  • 2019-06-04
  • 1970-01-01
相关资源
最近更新 更多