中继:缓存还原失败的重新启动组件

时间:2017-01-30 00:45:09

标签: reactjs graphql relay

我有一个使用React / Relay / GraphQL构建的Node应用程序。我的一个组件需要调用relay.setVariables作为输入更改,我遇到了以下问题:

用户更改输入,并调用setVariables。由于setVariables终止了组件状态,我在ReadyStateChange回调中设置了状态值:

setVariables({
    something: value,
}, state => {
    if (state.done) {
        this.setState({
            value,
        });
    }
});

第一次调用时,会发生以下就绪状态更改:

  • NETWORK_QUERY_START
  • CACHE_RESTORE_START
  • CACHE_RESTORE_FAILED
  • ABORT

接下来是组件卸载,然后重新安装

在深入研究GraphQLQueryRunner后,似乎此中继查询失败,因为 pendingFetch 已添加到 remainingRequiredFetchMap 。然后它开始缓存恢复,检查是否有足够的数据来满足查询,在这种情况下,没有缓存恢复失败。

此时,如果输入被删除,然后再次更改为相同的值,则数据将成功添加到商店。如果输入不同,则再次失败。因此,似乎数据已从GraphQL查询成功返回并添加到商店 - 它只是为时已晚。

所以我的主要问题是为什么查询失败,即使GraphQL返回所需的数据,为什么要重新安装我的组件?

注意:我确实在其他组件中使用了relay.setVariables,其中一些组件也失败了,但组件没有强制重新安装,我认为这是本案中的主要问题。

赞赏任何见解

0 个答案:

没有答案