Vue3 Composition API下Axios请求后Datatable不更新问题排查
问题分析与解决
你的核心问题是在reactive对象内部使用了ref来定义tableData,这破坏了响应式更新机制。
错误原因
reactive本身会让对象的所有属性变成响应式,不需要再给属性套一层ref。当你在state里定义tableData: ref<fieldDefinitions[]>([])时,state.tableData实际上是一个Ref实例。后续赋值state.tableData = [{'name':'test2'},{'name':'test3'}]时,你直接把这个Ref实例替换成了普通数组,原来的响应式关联被切断,所以视图无法感知到数据变化。
修正方案
直接在reactive对象里定义普通数组类型的tableData即可:
修改后的TS代码关键部分
const state = reactive({ tableData: [] as fieldDefinitions[], // 去掉ref,直接用数组并指定类型 tableHeader: [{ name: "Naam", key: "name", sortable: true, }] });
后续的赋值逻辑state.tableData = [{'name':'test2'},{'name':'test3'}]保持不变即可,此时reactive会检测到tableData的变化,自动更新视图。
额外说明
如果想单独使用ref管理tableData,也可以这么写:
const tableData = ref<fieldDefinitions[]>([]); const state = reactive({ tableData, tableHeader: [...] });
这种方式下,赋值时需要用tableData.value = [...]或者state.tableData.value = [...],前者更简洁,适合单独管理某个响应式变量的场景。
内容的提问来源于stack exchange,提问作者Rob
相关产品推荐
相关产品推荐

