【发布时间】:2021-11-15 15:06:17
【问题描述】:
我使用onMounted + watchEffect 进行一些昂贵的渲染
现在每次应用挂载时,watchEffect 函数也会运行
如何仅在应用挂载时运行函数
并防止watchEffect自动运行-->只运行它
props 值变化后
// parent
<template>
<child :data="data" />
<button type="button" @click="changeData">click to change</button>
</template>
<script>
import Child from "./components/child.vue";
export default {
name: "App",
components: {
Child,
},
data() {
return {
data: [1],
};
},
methods: {
changeData() {
this.data = [1, 2];
},
},
};
</script>
// Child
<template>
<h1>I have this prop</h1>
</template>
<script>
import { onMounted, ref, watchEffect } from "@vue/runtime-core";
export default {
name: "Child",
props: ["data"],
setup(props) {
onMounted(() => {
// do this
watchEffect(() => {
// if props.data data changes do this
});
});
return {};
},
};
</script>
【问题讨论】:
-
watchEffect将在设置时立即触发,并且在它的依赖项发生更改时也会触发。因此,如果您想在设置期间停止第一次调用,请改用watch。
标签: javascript vue-component vuejs3 vue-composition-api vue-reactivity