React Query的useQuery数据更新后页面为什么没反应?
我在Vue项目里用React Query的useQuery请求数据,初始加载没问题,但后端数据更新后页面没变化,手动刷新才显示最新数据。尝试过加staleTime:0和refetchQueries但都没用。
代码大概是这样写的:
{{ items }}
import { useQuery } from 'vue-react-query'
import { ref } from 'vue'
const { data } = useQuery(['items'], () => fetch('/api/items').then(res => res.json()))
const items = data.value // 这里是不是哪里错了?
数据确实在控制台返回了新值,但页面显示一直是旧数据。是不是响应式变量绑定有问题?或者React Query在Vue里需要特殊处理?
data.value赋值给items,会导致失去响应式特性,所以页面不会自动更新。正确做法是把查询结果绑定到一个 Vue 的响应式变量上,比如用
ref或reactive包装一下。修改后的代码如下:这样就确保了
items是响应式的,当后端数据更新时,页面会自动重新渲染。另外提醒一下,
staleTime: 0和refetchQueries只是控制数据刷新策略的,跟 Vue 的响应式绑定没关系。如果服务端数据变了但查询没触发,可以检查下是不是缓存策略导致的。