vue hooks怎么返回异步数据到template?
问题
vue hooks怎么返回异步数据到template?
代码
hooks
import { reactive } from 'vue'
import axios from 'axios'
export default function () {
let tableData = reactive()
const getData = async () => {
const res = await axios.get('https://cnodejs.org/api/v1/topics')
tableData = res.data.data
console.log('tableData', tableData)
}
return { tableData, getData }
}
组件
<template>
<el-table :data="tableData" style="width: 100%">
<el-table-column prop="id" label="id" width="180" />
<el-table-column prop="title" label="标题" width="180" />
<el-table-column prop="create_at" label="create_at" />
</el-table>
</template>
<script setup>
import { onMounted } from 'vue'
import useTable from '../../hooks/useTable'
const { tableData, getData } = useTable()
onMounted(async () => {
await getData()
})
</script>
数据返回了,但是没有显示在template上
回复
1个回答
test
2024-06-23
tableData = res.data.data;这一串代码你知道什么意思吗?你把一个指向响应式的变量改变指向了一个字符串还是别的对象,让这个tableDate这个变量失去了响应式。你应该修改成这样:
import { reactive } from "vue";
import axios from "axios";
export default function () {
let tableData = reactive({ tableData: [] });
const getData = async () => {
const res = await axios.get("https://cnodejs.org/api/v1/topics");
tableData.tableData = res.data.data;
console.log("tableData", tableData);
};
return { tableData, getData };
}
或者这样:
import { ref } from "vue";
import axios from "axios";
export default function () {
let tableData = ref([]);
const getData = async () => {
const res = await axios.get("https://cnodejs.org/api/v1/topics");
tableData.value = res.data.data;
console.log("tableData", tableData);
};
return { tableData, getData };
}
请你牢记!!不要不要不要不要改变响应式变量的指向!!!!!!!!!!
回复
适合作为回答的
- 经过验证的有效解决办法
- 自己的经验指引,对解决问题有帮助
- 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
- 询问内容细节或回复楼层
- 与题目无关的内容
- “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容