【发布时间】:2022-01-07 10:59:19
【问题描述】:
有人能解释一下下面的区别吗?
选项 API 版本
按预期在 DOM 中显示加载的数据
export default {
data() {
return {
config: {},
};
},
async mounted() {
this.config = await fetch('/path/to/file.json');
},
template: `<div>{{ config }}</div>`
}
组合 API 版本
显示配置的初始状态,但不显示加载的数据
import { onMounted, reactive } from 'vue';
export default {
setup() {
let config = reactive({});
onMounted(async () => {
config = await fetch('/path/to/file.json');
});
return {
config,
};
},
template: `<div>{{ config }}</div>`
}
我怀疑reactive() 正在被异步数据加载覆盖(我可以在onMounted 函数中控制台记录新数据),但我在文档中看不到任何内容来指示如何批量-像这样更新一个响应式对象(尤其是当它在 Options API 中工作时)
编辑:最后的想法:
我已经开始使用 reactive 对象在应用程序周围提供/注入数据,然后使用 toRefs 作为 JIT 方式向我的视图提供反应数据。这似乎是两全其美。
示例:
import { onMounted, reactive, toRefs } from 'vue';
export default {
setup() {
const data = reactive({
config: {},
});
onMounted(async () => {
data.config = await fetch('/path/to/file.json');
});
return {
...toRefs(data),
};
},
template: `<div>{{ config }}</div>`
}
【问题讨论】:
-
鉴于
reactive对象中的所有数据本质上都是一个get/set,我是否需要爬取整个对象,最后添加带有ref()的键?
标签: vue.js vuejs3 vue-composition-api vue-options-api