改变 setQueryData 中的先前数据

Mutate previous data in setQueryData

在 react-query 中,setQueryData 有一个重载,它接受这样的更新函数

setQueryData('myQuery', oldData => newData);

在这个函数中可以改变 oldData 和 return 的状态吗? 例如

setQueryData('myQuery', oldData => {
    oldData.foo = 42;
    return oldData
}

Or 是 oldData 不可变的,必须用 rest/spread 运算符修改,例如immer?

examples all 显示 return 一个新实例,但文档没有明确说明一种方式。

就地变异似乎可行,但我不确定是否存在任何陷阱。我知道例如setState 我必须 return 一个新值。

为什么不return一个新实例以防万一?查询数据很大,只需要修改一个字段

更新

查看 query::setData 的源代码,这是 setQueryData 调用的内容,据我所知,查询的观察者将通过调用 dispatch 得到通知setQueryData 被调用的所有情况;当 oldData 引用等于 newData 时,我没有看到早出。这样做有没有风险?

不鼓励使用变异,不应使用。问题在于,虽然乍一看它可能有效,因为缓存值确实发生了变化,但引用保持不变,因此 react-query 将 不会 通知观察者改变。

与 React 中的大多数数据结构一样,最好不可变地工作。