vue3中使用reactive进行将数据对象转换成可变化响应,reactive等同于vue2的observable。
在vue3中增加了组件setup方法,这个是在组件创建前和接收到传入参数后,这阶段调用。然后此方法返回的对象是可以被自身或其他组件调用,达到API的效果。
正常来说,setup是这样使用的。
setup (props) {
const repositories = ref([])
const getUserRepositories = async () => {
repositories.value = await fetchUserRepositories(props.user)
}
return {
repositories,
getUserRepositories
}
} 但如果说,有个属性是需要异步获取,加载后才能再执行。那么setup的写法需要修改一下。
async setup(props) {
console.log(props);
const repositories = ref([])
const getUserRepositories = async () => {
repositories.value = await fetchUserRepositories(props.user)
}
const asyncData = reactive({
p1: null
});
asyncData.p1 = await fetch("http://127.0.0.1/data/d1.json").then(function(response) {
return response.json();
});
return {
repositories,
getUserRepositories,
asyncData
}
}同时,拥有异步setup的组件,在被使用时,需要嵌套在<Suspense>里面。
//如果HelloWorld.vue 是有async setup的组件 //app.vue是使用helloworld组件的父组件 <template> <img alt="Vue logo" src="./assets/logo.png"> <Suspense> <HelloWorld msg="Welcome to Your Vue.js App"/> </Suspense> </template>
<Suspense>还能在局部内容等待数据时显示加载中的自定义界面。
