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 /> ) }