是否可以在安装时(或之前)定义中继容器或<Route/>
始终强制获取?
我可以在this.props.relay.forceFetch()
中执行componentDidMount
,但如果它是初始页面加载,那么它有点难看+会发出两个请求。
答案 0 :(得分:2)
像这样定义片段:
export default Relay.createContainer(Component, {
initialVariables: { show: false },
fragments: {
viewer: (): string => Relay.QL`
fragment on Viewer {
messages @include(if: $show) {
id
}
}
`,
},
})
然后
componentDidMount() {
this.props.relay.forceFetch({ show: true })
}
这种方式组件只会加载一次。当你重新安装它时,它将一直重新获取。 请注意,如果这是一个顶级组件,您可能会收到错误,因为您没有获取任何数据。 我添加了用户ID请求作为临时hack,我的graphql服务器可以更快地解决它。
答案 1 :(得分:1)
更优雅的解决方案是使用Relay.Renderer forceFetch
,它将从服务器提取新数据,而不管组件的当前数据状态如何。
它可以像在文档中那样与react-relay-router一起使用:
<Router
history={history}
routes={routes}
render={applyRouterMiddleware(useRelay)}
forceFetch={true}
environment={Relay.Store}
/>