为什么 useQuery refetch() 有时不起作用?

发布于 2025-01-09 17:13:12 字数 1455 浏览 0 评论 0原文

我将 react-nativegraphql 结合使用。

我有一个查询并尝试使用refetch

  const { data: updatePhoto, refetch } = useQuery(SEE_PHOTO_QUERY, {
    variables: {
      id: photoId,
    },
  });

当我编辑评论后,我想重新获取此查询并将其放在setState上以更改UI。

  const onEditValid = async ({ comments }) => {
    const commentId = await AsyncStorage.getItem("@commentId");
    await editCommentMutation({
      variables: {
        id: parseInt(commentId),
        payload: comments,
      },
      update: updateEditComment,
    });
  };

  const updateEditComment = async (cache, result) => {
    const {
      data: {
        editComment: { error, ok, id },
      },
    } = result;
    if (ok) {
      const commentId = await AsyncStorage.getItem("@commentId");
      const { comments } = getValues();
      await textRef.current.clear();
      await refetch();
      setState(updatePhoto);
      await cache.modify({
        id: `Comment:${commentId}`,
        fields: {
          payload(prev) {
            return comments;
          },
        },
      });
    }
  };

但 UI 没有改变。 我尝试通过修改缓存重新获取数据来更改 UI。但都失败了一个星期..:(

我还提出了关于缓存修改失败的问题 => React Native:`cache.modity`不起作用

但没有人回答。

我真的需要你的帮助..请帮助我

I use react-native with graphql.

I have a query and tried to use refetch.

  const { data: updatePhoto, refetch } = useQuery(SEE_PHOTO_QUERY, {
    variables: {
      id: photoId,
    },
  });

when after I edit my comment, I want to refetch this query and put it on setState in order to change UI.

  const onEditValid = async ({ comments }) => {
    const commentId = await AsyncStorage.getItem("@commentId");
    await editCommentMutation({
      variables: {
        id: parseInt(commentId),
        payload: comments,
      },
      update: updateEditComment,
    });
  };

  const updateEditComment = async (cache, result) => {
    const {
      data: {
        editComment: { error, ok, id },
      },
    } = result;
    if (ok) {
      const commentId = await AsyncStorage.getItem("@commentId");
      const { comments } = getValues();
      await textRef.current.clear();
      await refetch();
      setState(updatePhoto);
      await cache.modify({
        id: `Comment:${commentId}`,
        fields: {
          payload(prev) {
            return comments;
          },
        },
      });
    }
  };

But UI doesn't change.
I tried to change UI by modifying cache and refetching data. But both fails for a week.. :(

I also raised the question about fail of cache modify
=> React Native: `cache.modity` doesn't work

But no one answers.

I really need your help.. please help me

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文