开发者问题收集

Vue 3-反应性道具更新未反映在子组件脚本中

2023-10-27
544

我试图将反应数据作为 prop 传递给 Vue 3 中的子组件。数据在子组件的模板中正确更新,但似乎没有反映在子组件的脚本中。 在父组件中:

<script setup lang="ts">
import { ref } from 'vue'

const someDataId = ref<number | null>()

const someFunction = (id) => {
    someDataId.value = id
}
</script>

<template>
<ChildComponent :dataId="someDataId" />
</template>

在子组件中:

<script setup lang="ts">
const { dataId } = defineProps<{
    dataId: number | null | undefined
}>()

console.log(dataId)
</script>

<template>
{{ dataId }}
</template>

dataId prop 在模板中正确更新,但在记录到控制台时显示为 undefined

我尝试在 onUpdatedwatch 函数中处理 prop,但问题仍然存在。使用 onUpdated 时, dataId 保持 undefined ,使用 watch 时,控制台中甚至没有显示任何内容,因为我猜它没有检测到任何更改。使用 nextTick 也不起作用。

我很感激任何关于如何解决此问题的帮助或见解。谢谢!

1个回答

脚本内容在创建时执行一次,为了看到这里的变化,您应该使用像下面这样的观察者,并且不要破坏道具以免失去反应性:

<script setup lang="ts">
import {watch} from 'vue'

const props = defineProps<{
    dataId: number | null | undefined
}>()



watch(()=>props.dataId, (newVal)=>{
  console.log(newVal)
},{
immediate:true
})

</script>

<template>
{{ dataId }}
</template>

在 Vue 3.3 中,您可以破坏道具,但这仍然是一个实验性的功能。

Boussadjra Brahim
2023-10-27