【发布时间】:2022-01-26 00:58:46
【问题描述】:
我想将响应式数据对象传递给子级,但应用程序显示空白页面而没有任何错误消息。我想使用合成 api。
家长:
<template>
<Landscape :viewData="viewData"/>
</template>
<script>
import { onMounted, onUnmounted, ref, inject } from 'vue';
export default {
name: 'App',
setup() {
const resizeView = ref(false)
const mobileView = ref(false)
const viewData = reactive({resizeView, mobileView})
viewData.resizeView.value = false
viewData.mobileView.value = false
// lets do sth to change viewData
return {
viewData
}
},
components: {
Landscape
}
}
</script>
孩子:
<template>resize- {{viewData.resizeView}} mob {{viewData.mobileView}}
</template>
<script>
export default {
name: 'Header',
props: {
viewData: Object,
},
setup() {
return {
}
}
}
</script>
一切正常,当在父级时,数据对象像这样直接传递
<Landscape :viewData="{resizeView: false, mobileView: false}"/>
【问题讨论】:
-
const viewData = reactive({resizeView: false, mobileView: true})您可以删除两个 ref 并使用单个反应变量。还有其他选择。 -
直接改
viewData.resizeView = true;,是反应式的。 -
传递可写对象作为道具不是一个好习惯。
viewData.resizeView.value- 它不是 ref,refs 被解包在响应对象中,否则保留它没有多大意义reactive。
标签: javascript vue.js vue-component vuejs3 vue-composition-api