gpt4 book ai didi

javascript - 为什么 Vue Composition API 设置函数中未定义 "this"?

转载 作者:行者123 更新时间:2023-12-03 06:47:29 24 4
gpt4 key购买 nike

我有一个使用 v3 组合 API 的 Vue 组件:

<template>
<input type="checkbox" v-model="playing" id="playing" @input="$emit('play', $event.target.value)" />
<label for="playing" >{{ playing ? 'Pause' : 'Play' }}</label>
</template>
<script>
export default {
props: {
done: Boolean
},
setup(props) {
const playing = ref(true)
watchEvent(() => {
if (props.done) {
playing.value = false
this.$emit('play', playing.value)
}
}
return { playing }
}
}
</script>
当 watchEvent 运行时,我收到错误 Cannot read property "$emit" of undefined .看起来我没有使用错误类型的函数(箭头与正常函数)。
好像是 this在整个 setup() 中未定义不管是函数还是箭头函数。

最佳答案

setup function in the Vue Composition API接收两个参数:props 和 context。

The second argument provides a context object which exposes a selective list of properties that were previously exposed on this in 2.x APIs:


const MyComponent = {
setup(props, context) {
context.attrs // Previously this.$attrs
context.slots // Previously this.$slots
context.emit // Previously this.$emit
}
}
重要的是要注意,解构 props 是不行的(你会失去 react 性),但是解构上下文是可以的。
所以问题中的代码示例,使用 setup(props, { emit })然后替换 this.$emitemit .

关于javascript - 为什么 Vue Composition API 设置函数中未定义 "this"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63035526/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com