仅在 useMutation 成功执行后如何使用 apolloClient 的“onSuccess”

Posted

技术标签:

【中文标题】仅在 useMutation 成功执行后如何使用 apolloClient 的“onSuccess”【英文标题】:How to use apolloClient's 'onSuccess' only once the useMutation has executed successfully 【发布时间】:2021-12-06 09:39:29 【问题描述】:

当 useMutation(插入/更新查询)成功执行时,以及在每次重新渲染之前或之后,我需要能够执行功能(closeModal)。

如果我从“useMutation”函数中取消注释 onClose 函数中的代码,那么从父级我无法打开模式 (打开关闭和切换由父级处理,..见下文)

模态孩子:

 export default function DeviceModal(props) 
    const device = useQuery(getDevice_query, variables: id: dataRowId);
    const [dbUpdate, data, loading, error ] = useMutation(insertDevice_query,
    
        //onSuccess: onClose(),
    );

    const onClose = () => 
        props.closeModal();
    ;

return ( ModalMarkup );

家长:

const [isModalShown, toggleModal] = React.useState(false);
const closeModal = () => 
    toggleModal(false)

const openModal = () => 
    toggleModal(true)

【问题讨论】:

【参考方案1】:

您将错误的选项传递给 useQuery 挂钩。 appolo 客户端 v3 中没有onSuccess 参数。您需要将其替换为onCompleted。现在当你使用useMutationuseQuery 你应该传递onCompleted 而不是onSucess。所以你的代码会是这样的。

    export default function DeviceModal(props) 
    const device = useQuery(getDevice_query, variables: id: dataRowId);
    const [dbUpdate, data, loading, error ] = useMutation(insertDevice_query,
    
        onCompleted: ()=>
         onClose();
    ,
    );

    const onClose = () => 
        props.closeModal();
    ;

      return ( ModalMarkup );
    

Check hereuseQuery 参数。

Check hereuseMutation 参数。

【讨论】:

【参考方案2】:

一种选择是将函数作为道具传递给DeviceModal,然后在您的成功处理程序中调用它。例如:

<DeviceModal closeModal=closeModal />
onSuccess: props.closeModal()

【讨论】:

【参考方案3】:

答案是在调用钩子的地方使用返回承诺,即使用 .then 如下

const [dbUpdate, data, loading, error ] = useMutation(insertDevice_query);

const handleSubmit = (evt) => 
    evt.preventDefault();
    const deviceRec = recState;
    dbUpdate( variables: device: deviceRec)
        .then( onClose() );
;

【讨论】:

虽然此代码可能会回答问题,但提供有关它如何和/或为什么解决问题的额外上下文将提高​​答案的长期价值。您可以在帮助中心找到更多关于如何写好答案的信息:***.com/help/how-to-answer。祝你好运?

以上是关于仅在 useMutation 成功执行后如何使用 apolloClient 的“onSuccess”的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 5.2 - 用户仅在成功登录重定向后登录,一旦我执行操作用户不再登录

即使出现错误,onCompleted 的 useMutation 也会被执行

带有等待和承诺的 useMutation 问题

UseQuery 在通过 apollo react 使用 useMutations 重定向后不起作用

如何在 withFormik() 形式中使用 useMutation 钩子

useMutation 后 useQuery 未正确更新并设置 cookie 以进行授权