P粉2877263082023-08-31 10:43:01
在花了这么多时间来解决这个问题后,我感觉自己很愚蠢,但是我想把答案发出来,以防其他人遇到类似的问题。
问题与React的渲染过程有关。每当媒体查询更新时,<Modal/>
会重新渲染,这在移动设备上更改方向时会发生。因此,当模态框在方向更改时重新渲染时,视频会关闭。我不确定为什么媒体查询会导致重新渲染(可能与ChakraUI hooks的设置有关),如果有人遇到这个问题,也许可以详细说明一下。但是,切换到状态解决了问题。
解决方法很简单:
const [wIsSmallerThan48em] = useMediaQuery("(max-width: 48em)"); const [hIsSmallerThan30em] = useMediaQuery("(max-height: 30em)"); const [showModal, setShowModal] = useState(false); useEffect(() => { if (wIsSmallerThan48em || hIsSmallerThan30em){ setShowModal(true) } else { setShowModal(false) } }, [wIsSmallerThan48em, hIsSmallerThan30em]) // 在移动设备上无论是纵向还是横向都渲染“错误”模态框 if (showModal){ return ( <Modal> <Video src={MyVideo} /> </Modal> ) } else { return ( <Visualizer /> ) }