vue.js - 如何在使用带有反应 url 的 axios 操作结果之前等待异步调用 - Vue.js 3
问题描述
我有以下获取数据的代码。url 应该是响应式的,如果是改变一个新的调用完成。:
const apiClient = axios.create({
baseURL: 'https://vue-http-demo-some-number.firebaseio.com',
withCredentials: false,
headers: {
Accept: 'application/json',
'Content-Type': 'application-json'
}
});
function useFetch(getRelativeURL) {
const data = ref(null);
const error = ref(null);
const isPending = ref(true);
watchEffect(() => {
apiClient.get(getRelativeURL())
.then(response => {
data.value = response.data;
})
.catch(err => {
error.value = err;
})
.finally(() => {
isPending.value = false;
});
});
return {
data,
error,
isPending
}
}
和电话:
setup() {
const books = [];
const {data, error, isPending} = useFetch(() => '/books.json');
for (const key in data.value) {
for (const u in data.value[key]) {
const book = {
id: key,
title: data.value[key][u].title,
description: data.value[key][u].description,
};
books.push(book);
}
}
return {
books,
error,
isPending
}
}
我的问题是,来自的响应userFecth
延迟到来,并且在我有非空数据之前提取了书籍。我必须有哪些选项来保持 url 反应性并更新书籍。
解决方案
您可以观看data
来自组合功能的内容:
import {watch} from 'vue'
setup() {
const books = [];
const {data, error, isPending} = useFetch(() => '/books.json');
watch(()=>data,()=>{
for (const key in data.value) {
for (const u in data.value[key]) {
const book = {
id: key,
title: data.value[key][u].title,
description: data.value[key][u].description,
};
books.push(book);
}
}
}
,{
deep:true
})
return {
books,
error,
isPending
}
}
推荐阅读
- java - 从 MongoDB 数据库 (JAVA) 更新/刷新 JavaFX 标签
- python-3.x - 有没有计算六面体质心的函数
- excel - 在 Excek VBA 代码中使用 SUM 函数时出错
- javascript - 如何让 JHipster 使用 Javascript 而不是 Typescript 进行 React
- java - Android Studio`找不到ID为'com.android.application'的插件`
- angular - 未识别角度组件
- reactjs - Source map error: Error: Invalid URL 如何解决?
- kotlin - 我们可以用 kotlin 构建一个全栈 webapp 吗?
- c# - 如何在不阻塞线程的情况下使用 SendInput key_down 和 key_up 事件?
- javascript - 用于重命名某些值的多个 if 语句的简写