动态组件传入 computed 属性解析出现问题
Vue version
3.2.47
Link to minimal reproduction
Steps to reproduce
动态组件传入 computed 属性解析出现问题,可以在上面的地址中看到:
- 刚进入页面时,应当显示红色的 isRedText: true 的文本。
- 2s 后页面将显示红色的 isRedText: false
What is expected?
预期 2s 后的行为应该是绿色的 isRedText: false
What is actually happening?
mustache 语法中正确地移除了 ref,但属性判断中并没有。
我暂时没有找到相似问题。 我不知道这是不是一个问题,或者是我的用法有误,希望可以解惑,谢谢🙏。
System Info
No response
Any additional comments?
在页面中需要添加几个相似组件,使用 v-for + 动态组件完成,但是在改变这些组件中的值的时候,遇到了这个问题
你应该是将props弄成响应式 而不是里面的值弄成响应式
<template>
<component :is="Comp" v-bind="props" />
</template>
<script setup>
import { onMounted, ref, computed, defineComponent } from 'vue'
import Comp from './Comp.vue'
const tmp = ref(true)
const props = computed(()=>{
return {
isRedText:tmp.value
}
})
setTimeout(() => {
tmp.value = false
}, 2000)
</script>
这样就可以了
你应该是将props弄成响应式 而不是里面的值弄成响应式
<template> <component :is="Comp" v-bind="props" /> </template> <script setup> import { onMounted, ref, computed, defineComponent } from 'vue' import Comp from './Comp.vue' const tmp = ref(true) const props = computed(()=>{ return { isRedText:tmp.value } }) setTimeout(() => { tmp.value = false }, 2000) </script>
这样就可以了
谢谢 这样可以使用了。 但我想知道这个行为是一个问题吗
你应该是将props弄成响应式 而不是里面的值弄成响应式
<template> <component :is="Comp" v-bind="props" /> </template> <script setup> import { onMounted, ref, computed, defineComponent } from 'vue' import Comp from './Comp.vue' const tmp = ref(true) const props = computed(()=>{ return { isRedText:tmp.value } }) setTimeout(() => { tmp.value = false }, 2000) </script>
这样就可以了
谢谢 这样可以使用了。 但我想知道这个行为是一个问题吗
你这样的行为没什么问题,只是需要注意一下取值。
<template>
<component :is="Comp" v-bind="props" />
</template>
<script setup>
import { onMounted, ref, computed, defineComponent } from 'vue'
import Comp from './Comp.vue'
const tmp = ref(true)
const props = {
isRedText: computed(() => tmp.value) // 加上.value即可
}
setTimeout(() => {
tmp.value = false
}, 2000)
</script>