[英]How to use both props and mounted() with NuxtJS?
我是 NuxtJS 的新手,我想在我的頁面上使用的特定組件上使用window.addEventListener
,但在我們更改頁面時也要刪除該事件。
在 React 中,我會做這樣的事情:
export default function MyComponent({ close }) {
useEffect(() => {
const handleKey = (e) => console.log(e.key);
window.addEventListener("keyup", handleKey);
return () => window.removeEventListener("keyup", handleKey);
});
return <div />
}
但是,如何使用 NuxtJS 3 執行相同的行為?
<script setup lang="ts">
interface ComponentProps { close: () => void; }
const props = defineProps<ComponentProps>();
// I want to use `window.addEventListener("keyup", props.close)`;
// I'd do something like this:
if (process.client) {
window.addEventListener("keyup", props.close);
}
</script>
<template>
<div />
</template>
問題是如何在組件卸載后刪除事件? 有一個更好的方法嗎?
特定於 DOM 的初始化的正確位置是掛載鈎子,這不需要process.client
檢查,因為它只發生在客戶端。 它與未安裝的掛鈎鏡像。
最好強制回調在生命周期內保持不變,因為無意中更改道具會阻止事件偵聽器被刪除:
const { close } = props;
onMounted(() => {
window.addEventListener("keyup", close);
})
onUnmounted(() => {
window.removeEventListener("keyup", close);
})
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.