React类组件中子模态框点击关闭无响应但ESC可关闭的状态异常问题求助
React类组件中子模态框点击关闭无响应但ESC可关闭的状态异常问题求助
各位大佬好,我最近在React类组件里遇到一个特别诡异的模态框关闭问题,折腾了好久没搞明白,想请大家帮忙看看!
情况是这样的:我有一个传统的类组件父组件RowComponent,还有一个子组件ModalComponent。模态框的开关状态modalIsOpen是存在父组件的state里的:
this.state = { modalIsOpen: false, };
点击按钮触发showRequestModal把modalIsOpen设为true,模态框能正常弹出来,这部分完全没问题:
showRequestModal() { this.setState({ modalIsOpen: true }); }
子组件里的模态框组件用了一个isOpen状态(这个状态是跟着父组件传过来的modalIsOpen走的),模态框的代码如下:
<Modal width={600} destroyOnClose open={isOpen} onCancel={hideModalHandler} />
hideModalHandler是父组件通过props传过来的hideRequestModal函数:
hideModalHandler={this.hideRequestModal}
hideRequestModal我已经正确绑定了this,代码是这样的:
hideRequestModal() { console.log('Executing hideRequestModal'); this.setState({ modalIsOpen: false }, () => { console.log('callback - modalIsOpen:', this.state.modalIsOpen); }); }
现在离谱的事情来了:当我点击子组件里的关闭按钮触发关闭时,控制台能打印出Executing hideRequestModal,甚至setState的回调里也能看到modalIsOpen已经变成false了,但模态框就是没关掉?!可是如果我按ESC键关闭模态框,一切都正常——状态更新,模态框也能消失。
我实在搞不懂这是怎么回事,怀疑是不是事件冒泡、状态同步的问题,或者是子组件的isOpen状态没有正确跟着父组件的modalIsOpen更新?我甚至想过把父组件改成函数组件试试,但还是想先搞明白这个问题的根源。有没有大佬能帮我分析下,怎么才能让点击关闭也正常工作?
备注:内容来源于stack exchange,提问作者Roman Alekseiev
相关产品推荐
相关产品推荐

