我的顶级组件包含一个包含用户凭据的设置对话框。当在该对话框中进行更改并且对话框被取消(状态更改为dialogOpen=false
)时,我想强制从服务器进行新的提取,因为凭据可能已更改。在Relay classic中,顶级组件包含一个Relay.RootContainer,所以我只是将forceFetch=true
传递给了RootContainer。在Relay modern中,我的顶级组件包括QueryRenderer。那么在这种情况下如何强制重新获取?
我发现了这个问题https://github.com/facebook/relay/issues/1684,这似乎表明QueryRenderer 总是重新获取,但在我的测试中似乎并非如此。至少,当关闭设置对话框时,我没有看到在状态更改/刷新后调用fetchQuery。我想我可能不完全理解那个问题中的陈述。
任何人都可以澄清吗?
答案 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