我想你用其中的一些击中了头部。
有一小段时间您的数据未定义,这意味着您的某些代码可能会中断。
一个非常简单的例子
const MyComponent = () => {
const { data, loading } = useQuery(..)
if (loading) return <LoadingComponent />
return (<table> { data.map((item) => <tr>{item.name}</tr>)} </table>)
}
如果数据未定义,则 data.map 将中断。但是,您要指出的是,您可以只检查数据是否存在。
if (!data) return <LoadingComponent/>
但!如果您的查询出错,那么数据将是未定义的,并且当您真的应该抛出错误消息时,您将永远陷入加载状态。
所以你也可以利用错误道具来解决这个问题
const { data, error } = useQuery(..)
if !(data || error) return <LoadingComponent />
现在你没有那么多用于加载,除非你想让你的用户知道你的数据正在后台更新,如果你已经有缓存数据。
例如,假设您已经调用了查询,并且 reactquery 立即使用缓存填充数据,但它会进行后台检查以确保缓存数据是最新的,然后您可以使用加载道具来显示一个小微调器您的数据正在同步!