是否可以从 graphQL 中的变异完成回调中检索有效负载?

Is it possible to retrieve the payload from a mutation completion callback in graphQL?

使用 Reactreact-apollo,我有一个向服务器发送一堆值的突变,服务器 returns OKNOT OK.

我想仅在操作时更新值,但为此,我需要在 OnComplete 回调中访问负载。

例如:

  const [updateCardRate] = useMutation<UpdateInfluencerRateCard, UpdateInfluencerRateCardVariables>(UPDATE_CARD_RATE, {
    onCompleted: (e) => {
      // Can I have the variables (not just the response) here ? 
    },
  });


  const handlePriceChange = async (socialAccountType: SocialMediaTypeForRateCard, price: number) => {
    await updateCardRate({ variables: { input: { price, socialAccountType } } });
  };

  return (<button onClick(SocialMediaTypeForRateCard.FACEBOOK, 122) />

看起来如果没有像使用状态这样的“棘手”方法是不可能的?

编辑:尝试使用状态,但不起作用,状态为空:

  const [getPayload, setPayload] = useState<any>(null);
  const [prices, setPrices] = useState<any>(priceCards);

  const [updateCardRate] = useMutation<UpdateInfluencerRateCard, UpdateInfluencerRateCardVariables>(UPDATE_CARD_RATE, {
    onError: useCallback((error: ApolloError) => {
      enqueueSnackbar(t(error.message || 'UnexpectedError'), { variant: 'error' });
      setPrices(priceCards);
    }, []),
    onCompleted: useCallback(() => {
      console.log(getPayload); // this is null
    }, []),
  });

  const handlePriceChange = (socialAccountType: SocialMediaTypeForRateCard, price: number) => {
    setPayload({ price, socialAccountType }); // but it s set here
    updateCardRate({
      variables: { input: { price, socialAccountType } },
    });
  };
  1. 您不需要在 handlePriceChange
  2. 上使用 asyncawait
  3. 即使这样做,您也需要在调用突变之前设置状态
  4. 正如您在评论中提到的,如果您使用 useCallback,请确保状态是依赖列表的一部分。