React Query 的竞争条件
P粉364642019
P粉364642019 2023-09-03 09:51:21
[React讨论组]

我正在尝试使用反应查询创建一个 Todo 应用程序,但我面临竞争条件问题。 我有一个待办事项页面,用户更新/创建新的待办事项,然后单击保存。 保存过程可能需要大约 3 秒,具体取决于用户的互联网连接。 编辑待办事项后,用户仍保留在待办事项页面中。 创建新的待办事项后,用户将导航到待办事项页面。

问题是, 当用户创建/更新待办事项然后单击显示待办事项模式(这是外部组件,我无法编辑它) 模式显示编辑前的待办事项/如果是新待办事项则为空

当我调试问题时,我可以看到在模式打开后反应查询获取待办事项。 如果我关闭模式并再次打开它,它将显示更新的待办事项。

const {todo} = useTodoQuery()

const openModal = () => modal.open(todo)

return (
   <TodoModalButton onClick={openModal}>Open Todo Preview Modal</TodoModalButton>
)
const useTodoQuery = () => {
  const {data, ...rest} = useQuery(['todo', todoId], async () => {
    if (todoId) {
      return await getTodo(todoId)
    }
    return null;
  })

  return {data, ...rest}
}
const queryClient = new QueryClient({
  defaultOptions: {
    suspense: false,
    keepPreviousData: true,
  }
})

如果我删除 keepPreviousData,待办事项将是未定义的。

const todoMutation = useMutation(
    ['todo'],
    getUpdatedTodo,
    {onSuccess: () => queryClient.invalidateQueries(['todo', todoId])}
  );

我尝试过使用 {onSuccess: (todo) => queryClient.setQueryData(['todo', todoId], todo)} 但效果并不理想。

P粉364642019
P粉364642019

全部回复(1)
P粉775723722

只需等待 onSuccess 回调并打开模型后:)解决:D

如果不可能,请提供更多详细信息

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号