为什么不会触发道具的 Vue3 观察者? (作文API)
Why would a Vue3 watcher of a prop not be triggered? (Composition API)
我正在拼命地尝试 watch
一个 prop
in Vue3 (3.2.31, Composition API):
<script lang="ts" setup>
import { toRef, watch } from 'vue'
const props = defineProps({
'trigger-refresh': {
type: String
}
})
const triggerRefresh = toRef(props, 'trigger-refresh')
watch(triggerRefresh, (a, b) => console.log('props triggered refresh'))
</script>
我触发了 trigger-refresh
的发射,它通过上面的代码传递给组件并且 我看到 triggerRefresh
在 DevTools→Vue 中发生变化。
所以除了 watch
没有触发 (即控制台上没有消息)之外,组件内部的一切都很好。
我阅读了 documentation for Watchers and responses to a (其中一个回复与我所做的几乎相同)但我只是不明白为什么这对我的情况不起作用。
道具名称已标准化为驼峰式大小写。正如问题中所述,看到更新的是 triggerRefresh
而不是 trigger-refresh
。所以应该是:
const triggerRefresh = toRef(props, 'triggerRefresh')
watch(triggerRefresh, ...)
或者只是:
watch(() => props.triggerRefresh, ...)
尝试添加 immediate
选项,以便在第一次道具更改时触发手表:
watch(triggerRefresh, (a, b) => console.log('props triggered refresh'), {
immediate: true
})
我正在拼命地尝试 watch
一个 prop
in Vue3 (3.2.31, Composition API):
<script lang="ts" setup>
import { toRef, watch } from 'vue'
const props = defineProps({
'trigger-refresh': {
type: String
}
})
const triggerRefresh = toRef(props, 'trigger-refresh')
watch(triggerRefresh, (a, b) => console.log('props triggered refresh'))
</script>
我触发了 trigger-refresh
的发射,它通过上面的代码传递给组件并且 我看到 triggerRefresh
在 DevTools→Vue 中发生变化。
所以除了 watch
没有触发 (即控制台上没有消息)之外,组件内部的一切都很好。
我阅读了 documentation for Watchers and responses to a
道具名称已标准化为驼峰式大小写。正如问题中所述,看到更新的是 triggerRefresh
而不是 trigger-refresh
。所以应该是:
const triggerRefresh = toRef(props, 'triggerRefresh')
watch(triggerRefresh, ...)
或者只是:
watch(() => props.triggerRefresh, ...)
尝试添加 immediate
选项,以便在第一次道具更改时触发手表:
watch(triggerRefresh, (a, b) => console.log('props triggered refresh'), {
immediate: true
})