阿波罗、乐观创造和重定向

Posted

技术标签:

【中文标题】阿波罗、乐观创造和重定向【英文标题】:Apollo, optimistic creation, and redirection 【发布时间】:2020-09-07 06:50:06 【问题描述】:

我的 GraphQL 乐观渲染遇到了一些问题。我用的是Apollo Client,比如:

const history = useHistory();
const [addItem] = useMutation(ADD_ITEM_QUERY);

const onClick = () => 
    addItem(
        variables: 
            id: '16b1119a-9d96-4bc8-96a3-12df349a0c4d',
            name: 'Foo Bar'
        ,
        optimisticResponse: 
            addItem 
                id: '16b1119a-9d96-4bc8-96a3-12df349a0c4d',
                name: 'Foo Bar',
                __typename: 'Item'
            
        ,
        update: () => 
            // Update item cached queries

            history.push(`/items);
        
    );
;

问题来自重定向。据我了解,update 函数被调用了两次:第一次使用optimisticResponse,第二次使用网络响应(通常应该相同)。

但是,让我们考虑以下场景:

    我创建了一个新项目, 我收到了乐观的响应,我被重定向到项目列表, 我单击“添加项目”以重定向到表单 我收到服务器响应,因此我再次被重定向到列表。

防止这种双重重定向的正确方法是什么?

我想检查当前的缓存值。如果该值已经是最新的,我不会应用重定向。不知道有没有更好的方法?你如何处理这样的场景?

【问题讨论】:

【参考方案1】:

您应该在更新函数之外调用 history.push。你可以这样做

addItem(...).then(() => history.push('/items')). 

【讨论】:

以上是关于阿波罗、乐观创造和重定向的主要内容,如果未能解决你的问题,请参考以下文章

java中转发和重定向的区别

转发和重定向的区别

转发和重定向的区别

转发和重定向

转发和重定向

转发和重定向的区别