我有一个使用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,其中一些组件也失败了,但组件没有强制重新安装,我认为这是本案中的主要问题。
赞赏任何见解