无辜React问题在这里。
我有一个useEffect
方法,它在escape
按键上关闭一个模态,在我的代码中重复了几次,看起来像这样:
const [shouldShowModal, setShouldShowModal] = useProfileModal();
useEffect(() => {
const closeModalOnEscape = (e: KeyboardEvent | any): void => {
if (e.key === "Escape") setShouldShowModal(false);
};
document.addEventListener("keydown", closeModalOnEscape);
return () => {
document.removeEventListener("keydown", closeModalOnEscape);
};
}, [setShouldShowModal]);
有没有办法定义useEffect
片段以跨多个组件使用?
3条答案
按热度按时间k3bvogb11#
只需定义一个接受setter的自定义钩子
然后像这样使用它:
您可以重命名
setShouldShowModal
或useCloseModalOnEscape
,使其更准确地适应其他用例,如果它们并不都在关闭模态的上下文中的话。如果
useProfileModal
的每个示例都将在转义时关闭,那么您应该在useProfileModal
中包含useEffect
(来自useCloseModalOnEscape
内部)。u5i3ibmn2#
因为每次使用
useProfileModal
都会用到这个效果,所以只需将这个效果放在useProfileModal
中。且在
useProfileModal
中具有:rkkpypqq3#
可以,useEffect代码可以定义为一个单独的函数,然后从多个组件调用。
useCloseModalOnEscape函数是一个自定义挂钩,它将toggleModal函数作为参数并处理keydown事件。MyComponent组件使用useProfileModal挂钩来获取toggleModal函数,然后调用'useClose