运行 涉及突变和组件随 react-query 闪烁的问题

Running into an issue with a mutation and component flickering with react-query

所以,我正在查询我的上下文 API 通过表单选择更新更新的所有内容..

所以,操作顺序是这样的

  1. 用户通过从下拉列表中选择(可能的多个)来更改表单。
  2. 更改更新“上下文 api”,使父组件重新饱和。
  3. 因为形式key/values改变了,我触发了一个突变。
  4. 变异return是一个值。到目前为止,太棒了。
  5. 但是,当我重复步骤 #1 - #4 时,另一个组件闪烁着那个更新后的值,因为在某些时候,期望值的“常量”是未定义的……那么,它有一个值……

所以,像这样..

有一个价值... ...查询 api 呼叫... 没有价值 ...returns查询 有一个值

const ProductPage = (props) => {
  const { question } = useContextStateWhatever();
  /* Queries */
  const { data = {}, isFetched } = useProductUpdatePrice({ questions });

  const value = derivePriceFromResponse(data.products);

  return (
   <SomeComponentRendered value={value} />
  )

因此,您可以看到在查询中的“旧值”和请求之间,传递的“值”将是未定义的。然后查询returns,更新值。

我希望查询会 return 任何以前的值,但是“queryKey”随着每次选择表单而改变。深度查询键。

我希望我不必再将这个值从 useEffect 中放入本地状态,或者使用 useRef 并创建钩子来交回“先前”值,直到新值准备就绪....那不是react-query 是做什么用的,对吧?我的意思是,每当“上下文 api”发生变化时,我不应该能够进行查询调用,并且不要期望这种未定义的延迟差异。有什么策略可以克服这个问题吗?

由于每个查询的“queryKey”是不同的(主要用于正常形式的交互),我可以看出它在解析之前如何不能交回以前的值等等。有什么想法吗?

有什么想法吗?

我认为 keepPreviousData: true 选项正是您要找的。如果查询键发生变化,您将从之前的查询键中获取数据,以及一个 isPreviousData: true 标志。后台更新仍会发生,然后您将在新查询键到达时获取数据。查询将一直保持 isSuccess 状态。