反应 - 对作为提示传递的组件的引用
react - reference to component passed as a prompt
我在我的测试组件中渲染了 EditModal 组件。我通过 'this.edit' 引用它。
我将 UserForm 组件作为提示传递给 EditModal。我也尝试引用它。但是 'this.form' returns 未定义。
为什么?有什么办法可以解决这个问题吗?
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
将在安装 UserForm
组件(大概在 EditModal
内部)并且仅当 EditModal
不克隆表单属性和覆盖 ref
。
因此,如果 this.form
未定义,要么尚未安装,要么已卸载(在调用测试方法时),或者 ref
已被覆盖。
如果没有 EditModal
的代码,任何人都无法确定是上述哪种情况。
我在我的测试组件中渲染了 EditModal 组件。我通过 'this.edit' 引用它。 我将 UserForm 组件作为提示传递给 EditModal。我也尝试引用它。但是 'this.form' returns 未定义。
为什么?有什么办法可以解决这个问题吗?
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
将在安装 UserForm
组件(大概在 EditModal
内部)并且仅当 EditModal
不克隆表单属性和覆盖 ref
。
因此,如果 this.form
未定义,要么尚未安装,要么已卸载(在调用测试方法时),或者 ref
已被覆盖。
如果没有 EditModal
的代码,任何人都无法确定是上述哪种情况。