【发布时间】:2021-02-17 04:31:44
【问题描述】:
当 iPad 方向使用 react 和 javascript 从横向更改为纵向以及从纵向更改为横向时,我想将变量设置为 false。
我有两个状态变量 isPopupOpen,isClicked 最初设置为 false。单击按钮时,这些设置为 true。当用户点击 Popup 之外的任何位置时,这些状态 isPopupOpen 和 isClicked 设置为 false。
下面是我的代码,它工作正常。
function Parent({setIsPopupOpen, isPopupOpen}: Props) {
const {isClicked, setIsClicked} = React.useState(false);
const handleButtonClick = () => {
setIsPopupOpen(!isPopupOpen);
setIsClicked(!isClicked);
}
return () {
<button onClick={handleButtonClick}>click me </button>
<Popup>
<Overlay onClick={() => {
setIsPopupOpen(false);
setIsClicked(false);
}/>
</Popup>
}
};
现在的问题是当用户在横向模式下使用 iPad 时单击弹出窗口打开的按钮,现在没有关闭弹出窗口切换到纵向模式弹出窗口会自行关闭。现在,当用户单击按钮时,弹出窗口不会出现。
我认为这里的问题是,当用户切换到纵向模式时,弹出窗口会自行关闭,并且 isClicked 状态值设置为 false。但 isPopupOpen 状态值仍然为真。
我认为由于 isPopupOpen 是从其他组件传递的,因此在切换到不同模式时,它的值不会自动设置为 false。而 isClicked 状态值设置为 false。
我该如何解决这个问题?当用户切换模式时,如何将 isPopupOpen 也设置为 false。 React.useEffect 是否以某种方式用于这种情况。
有人可以帮我解决这个问题吗?谢谢。
编辑:
根据提供的答案,我尝试过类似的方法
const onOrientationChange = React.useCallback(() => {
setIsPopupOpen(false);
}, [setIsPopupOpen]);
React.useEffect(() => {
window.addEventListener('orientationchange', onOrientationChange);
return () => {
window.removeEventListener('orientationchange', onOrientationChange);
};
}, [onOrientationChange]);
但这仍然没有显示弹出窗口。
【问题讨论】:
标签: javascript reactjs