如何强制在Relay中获取现代

时间:2017-06-23 14:23:44

标签: relayjs

我的顶级组件包含一个包含用户凭据的设置对话框。当在该对话框中进行更改并且对话框被取消(状态更改为dialogOpen=false)时,我想强制从服务器进行新的提取,因为凭据可能已更改。在Relay classic中,顶级组件包含一个Relay.RootContainer,所以我只是将forceFetch=true传递给了RootContainer。在Relay modern中,我的顶级组件包括QueryRenderer。那么在这种情况下如何强制重新获取?

我发现了这个问题https://github.com/facebook/relay/issues/1684,这似乎表明QueryRenderer 总是重新获取,但在我的测试中似乎并非如此。至少,当关闭设置对话框时,我没有看到在状态更改/刷新后调用fetchQuery。我想我可能不完全理解那个问题中的陈述。

任何人都可以澄清吗?

2 个答案:

答案 0 :(得分:8)

好的,我想我在这里想出了我的脱节。在检查QueryRenderer的来源时(不知道我为什么不首先这样做),我发现如果props.variables发生变化,将会进行提取。所以我刚刚定义了一个名为refetch的布尔实例变量,并在我的对话框被解除时翻转它的值:

<QueryRenderer
  environment={environment}
  query={query}
  variables={{refetch: this.refetch}}

由于这似乎没有详细记录,我在这里提到QueryRenderer会在满足以下任何条件时重新获取:

  • 当前query参数不等于之前的query参数。
  • 当前environment参数不等于之前的environment参数。
  • 当前variables参数不等于之前的variables参数。

答案 1 :(得分:4)

您可以使用传递给WebDriverWait的{​​{1}}的{​​{3}}。

QueryRenderer