[英]How to toggle the state to false on component unmount using react?
我正在使用上下文切换对话框的 state。 最初 state isOpen 设置为 false。 单击添加按钮时,state isOpen 为 true,单击取消按钮会将 state isOpen 设置为 false。
现在,当用户不单击取消按钮时,即使用户导航到另一个页面,state isOpen 仍然为真。
下面是我的代码,
function Main() {
return(
<DialogContextProvider>
<Parent/>
</DialogContextProvider>
);
}
function Parent() {
return (
<AddButton/>
);
}
function AddButton() {
const { isOpen, toggleDialog } = useDialogs();
return(
<Icon
onClick={() => {
toggleDialog(true); //isOpen set to true
}}/>
{isOpen &&
<Dialog
onCancel={() => {
toggleDialog(false); //isOpen set to false
}}
);
}
interface DialogsState {
isOpen: boolean;
setOpen: React.Dispatch<React.SetStateAction<boolean>>;
}
const initialState: DialogsState = {
isOpen: false,
setIsOpen: () => {},
};
const DialogsContext = React.createContext<DialogsState>(
initialState
);
export const DialogsContextProvider: React.FC = ({ children }) => {
const [isOpen, setOpen] = React.useState<boolean>(false);
return (
<DialogsContext.Provider
value={{isOpen,setOpen}}>
{children}
</DialogsContext.Provider>
);
};
export function useDialogs() {
const {
isOpen,
setOpen,
} = React.useContext(ScheduleDialogsContext);
const toggleDialog = (toggleValue: boolean) => {
setOpen(toggleValue);
};
return {
isOpen,
toggleDialog,
};
}
当此对话框卸载时,我不确定如何将 state isOpen 设置为 false,这意味着当用户打开此对话框时 isOpen state 为 true。 如果用户没有在对话框上单击取消并移动到另一个页面,这 isOpen state 是真的。 在这种情况下它应该是错误的。
我怎样才能解决这个问题。 有人可以帮我吗? 谢谢。
您可以使用useEffect
并从中返回 function ,卸载组件时将调用此 fn,例如
useEffect(() => {
// called on mount
return () => {
// called on unmount
}
}, [])
useEffect 钩子有return
,当组件卸载时触发。
export const DialogsContextProvider: React.FC = ({ children }) => {
const [isOpen, setOpen] = React.useState<boolean>(false);
useEffect(() => {
return () => {
setOpen(false);
}
}, []);
return (
<DialogsContext.Provider
value={{isOpen,setOpen}}>
{children}
</DialogsContext.Provider>
);
};
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.