Reactjs/Apollo/AppSync Mutation 触发了两次

Posted

技术标签:

【中文标题】Reactjs/Apollo/AppSync Mutation 触发了两次【英文标题】:Reactjs/Apollo/AppSync Mutation triggered twice 【发布时间】:2018-06-28 11:23:00 【问题描述】:

我遇到了 React/Apollo/AppSync 的问题,突变触发了两次(或更多)。我有一个 React 应用程序,它的更新突变由通常的 UI 按钮 onClick 触发。

<button className=`btn btn-sm` onClick=(event) =>  that.toggleSubscription(event, subscriptionid, serviceid, status); >
    <i className=`fas $icon fa-fw` />
    title
</button>

toggleSubscription 函数如下所示:

toggleSubscription = async (event, subscriptionid, serviceid, currentStatus) => 
    event.preventDefault();
    event.stopPropagation();

    if (currentStatus === "mandatory") return;
    console.log(serviceid);
    await this.props.toggleSubscription(this.props.match.params.id, serviceid);

还有所讨论的 graphql 突变(尽管这似乎发生在所有突变上)。这是在出口声明上:

export default compose(
    graphql(
        MutationToggleSubscription,
        
            props: ( ownProps, mutate ) => (
                toggleSubscription: (personid, serviceid) => mutate(
                    variables:  personid: personid, serviceid: serviceid 
                )
            ),
        
    ),
...

Shows multiple and simultaneous calls to the GraphQL server 这些调用几乎相同,但还有一些额外的堆栈跟踪调用: The two requests are almost identical. The calls highlighted in Red seem to be the difference between the two

任何帮助将不胜感激!

【问题讨论】:

你能再试一次吗? AppSync javascript SDK 有一个更新,不再要求您使用乐观响应,这在当时可能就是发生这种情况的原因。如果您不需要离线功能,您现在也可以在构造函数中使用disableOffline:true。更多信息在这里:docs.aws.amazon.com/appsync/latest/devguide/… 【参考方案1】:

您可以尝试提供乐观响应吗?

例如https://github.com/aws-samples/aws-mobile-appsync-events-starter-react/blob/362efe95af89c01af46696cc356d0f5922d27bf5/src/Components/NewEvent.js#L122-L126

AppSync 客户端当前需要一个乐观响应作为突变的一部分

【讨论】:

【参考方案2】:

我也有同样的问题。就我而言,突变运行了很长时间。突变解析器被调用了两次,因为正在向服务器发出第二个 POST 请求。但是客户端只发出一个请求,这可以从浏览器开发者工具的“网络”选项卡中看出。

我发现问题不是由 apollo 服务器或客户端引起的。

经过大量研究,我发现 Node.js 服务器默认会在 120 秒后超时 并关闭与客户端的连接。这反过来会导致 browser to retry the request,但浏览器不会在开发人员工具的网络选项卡中记录该重试请求,这是造成很多混乱的原因。

所以,ExpressJS 服务器中的 changing the request timeout duration 为我解决了这个问题。

原帖here

【讨论】:

以上是关于Reactjs/Apollo/AppSync Mutation 触发了两次的主要内容,如果未能解决你的问题,请参考以下文章

MU-MIMO学习

sh 备用git repos,mu mu_repo

Lyapunov凸性定理

Luogu5348 密码解锁

[探究] $mu$函数的性质应用

Mertens