vue3中createVNode中传递的prop会失去响应?

VUE3中
SFC中template的props是动态的
createVNode(component,{...})是非动态的
怎么能把第二种变成动态的

child.vue

<script setup>

//child-component 子组件

import { watch } from "vue"

let props = defineProps({

aaa: Boolean,

bb: Object

})

watch(() => { return props.aaa }, function (newVal) {

console.log(newVal)

})

</script>

parent.vue

<script setup>

//parent-component 父组件

import { createVNode, onMounted, reactive, ref, render } from 'vue';

import Child from './child.vue';

const foo = ref(false)

const bar = reactive({ a: 1, b: 2 })

const el = ref();

const div = document.createElement("div")

const vNode = createVNode(Child, { foo: foo.value, bar: bar });

//通过careteVnode 传递的foo不是动态的

onMounted(() => {

el.value.appendChild(div)

})

render(vNode, div)

setInterval(() => {

foo.value = !foo.value;

bar.a++

}, 1000)

</script>

<template>

<Child :foo="foo"></Child> <!--这里的子组件传递的foo是动态的 -->

<div ref="el"></div>

</template>


回答:

你可以用 toRefs :

<script setup>

//parent-component 父组件

import { createVNode, onMounted, reactive, ref, render, toRefs } from 'vue';

import Child from './child.vue';

const foo = ref(false)

const bar = reactive({ a: 1, b: 2 })

const el = ref();

const div = document.createElement("div")

const reactiveRefs = toRefs({ foo, bar })

const vNode = createVNode(Child, reactiveRefs);

onMounted(() => {

el.value.appendChild(div)

})

render(vNode, div)

setInterval(() => {

foo.value = !foo.value;

bar.a++

}, 1000)

</script>

<template>

<Child :foo="foo"></Child> <!--这样子组件传递的foo就是动态的 -->

<div ref="el"></div>

</template>


回答:

我也遇到了相同的问题,使用ref响应式,子组件props 类型警告
请问最后怎么实现的

以上是 vue3中createVNode中传递的prop会失去响应? 的全部内容, 来源链接: utcz.com/p/934231.html

回到顶部