React Relay总是强制获取Route或RelayContainer

时间:2016-05-26 14:59:09

标签: reactjs relayjs

是否可以在安装时(或之前)定义中继容器或<Route/>始终强制获取?

我可以在this.props.relay.forceFetch()中执行componentDidMount,但如果它是初始页面加载,那么它有点难看+会发出两个请求。

2 个答案:

答案 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}
/>