【发布时间】:2020-05-07 03:24:05
【问题描述】:
我正在使用来自 https://react-bootstrap.netlify.app/components/modal/ 的模式,基本上我已经设法从我单击的按钮显示模式。然而,在模式中有另一个按钮,当我单击时应该执行我已经在函数中定义的任务。现在,当我在模式中单击此按钮时,我收到错误 cannot read property 'confirm_booking' of undefined 这是我的代码。
constructor(props){
super(props)
this.state={
setModalShow_available_room: false,
modalShow_available_room: false
}
this.confirm_booking = this.confirm_booking.bind(this)
}
render (){
function Available_room_modal(props) {
return (
<Modal
{...props}
size="sm"
aria-labelledby="contained-modal-title-vcenter"
centered>
<Modal.Body>
<Button block onClick={() => { this.confirm_booking() }} >Confirm</Button>
</Modal.Body>
</Modal>
);
}
return(
<div>
<Button block onClick={() => { this.open_modal() }} >Show modal</Button>
<Available_room_modal
show={this.state.modalShow_available_room}
onHide={() => {
this.setState({ setModalShow_available_room: false })
this.setState({ modalShow_available_room: false })
}} />
</div>
)
}
/**then for my functions **/
/**this opens the modal **/
open_modal() {
this.setState({ setModalShow_available_room: true })
this.setState({ modalShow_available_room: true })
}
/**this is the function assigned to the button inside the modal which throws an error when i click it**/
confirm_booking() {
this.setState({ setModalShow_available_room: false })
this.setState({ modalShow_available_room: false })
}
【问题讨论】:
-
Creating a component in the render function is an anti-pattern. 将
Available_room_modal移出您的组件。你甚至可以把它做成自己的文件。 -
问题是
function Available_room_modal创建了自己的上下文(在上面的链接中解释),这意味着在这个函数内部,this.confirm_booking是未定义的。 -
快速解决方法是将一些
this.confirm_booking作为道具传递给Available_room_modal:<Available_room_modal onConfirm={this.confirm_booking} /* etc. */ />
标签: javascript reactjs