【问题标题】:React-Apollo Query refetch causes children to unmountReact-Apollo 查询重新获取导致子级卸载
【发布时间】:2019-05-10 17:01:54
【问题描述】:

我有一个封装在 Query 组件中的显示组件,用于接收来自 GraphQL 查询的数据。执行突变后,我必须重新获取数据以更新商店。问题是调用refetch() 会导致子组件被卸载,从而破坏了用户一直在进行的交互和滚动以导致突变。

有没有办法调用refetch() 而不会导致孩子卸载?如果没有,是否有更好的方法来更新不会导致卸载的商店?下面是带有Query 组件及其子组件的代码。

<Query
  query={query}
  variables={{videoId}}
>
  {
    ({loading, error, data, refetch }) => {
      if (loading) 
        return <p>Loading...</p>;
      if (error) {
        console.log(error);
        return <p>Error :(</p>;
      }

      const onChange = () => {
        console.log("refetching");
        return refetch();
      }

      const {timestampCollection} = data;
      return(
          <TimestampCollection onChange={onChange} player={this.state.player} timestampCollection={timestampCollection[0]} />
      )
    }
  }
</Query>

谢谢大家的帮助!

【问题讨论】:

标签: reactjs graphql apollo react-apollo apollo-client


【解决方案1】:

尝试使用fetchPolicy="network-only",如下所示。

<Query
  query={query}
  variables={{videoId}}
  fetchPolicy="network-only"
>

【讨论】:

  • 另一种可能性是,当 refetch 被触发时,它可能会设置 loading=true 并会破坏 组件。
  • 您可以通过({loading, error, data, refetch, networkStatus }) =&gt; { ...识别refetch并检查networkStatus=4。请参考apollographql.com/docs/react/api/…
猜你喜欢
  • 2019-12-20
  • 1970-01-01
  • 2019-08-15
  • 2019-12-13
  • 2018-05-04
  • 2021-01-27
  • 2018-12-31
  • 2020-01-07
  • 2019-11-19
相关资源
最近更新 更多