改变 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 中的大多数数据结构一样,最好不可变地工作。
在 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 中的大多数数据结构一样,最好不可变地工作。