代码如下:
<If condition={show}>
<div>一些静态内容</div>
<FixDataModal visible={visible} cancel={setUnvisible} confirm={setUnvisible} />
</If>
其中,show是个常量,visible是一个自定义hook,控制自定义弹层的显隐。
问题描述:当我将弹层放到div里时,不能正常关闭弹层,父组件中visible确认被更新了,但没有触发弹层组件的更新。放在div外面时却能正常更新。
本次回答借鉴于GPT
这是由React的Render阻塞导致的。当Modal被Render在condition为true的div内部时:
<If condition={show}>
<div key={show}>
{/* ... */}
<FixDataModal visible={visible} />
</div>
</If>
添加key值后,React会认为这是一个全新的div,不会对其子内容Render进行阻塞,Modal可以获取到最新visible值正常响应。所以,总结来说,这个问题的根源在于:当 If 条件变化时重新 Render,如果 modal 存在于 If 条件为 true 的 div 内,那么 modal 的 Props 并不会随之更新。解决方法是:
望采纳!