重新获取特定的GraphQL可操作查询的问题

我是React和GraphQL(Apollo)的新手,正在学习堆栈。

我有一个React组件,可以加载一些页面数据,并且页面上有一个“重新加载”按钮。

问题:

  
      
  • 当我单击“重新加载”按钮时,我想重新获取数据。
  •   
  • 但是,我找不到从queryObservable中重新获取数据的方法。
  •   
  • 如何从QueryObservable重新获取数据?反正有调用refetch吗?
  •   

我尝试使用reFetchObservableQueries(),但这会重新加载页面并重新获取所有内容。我可以只重新引用一个可观察对象吗?

这是我的代码:

getPageQueryObservable = (contentId,key,paginated = false) => {
    const query = contentId ? TreeQuery : RootLevelQuery;
    const defaultVariables = 'Test';
    const variablesForPagination = {
      paginationLimit: INITIAL_PAGE_SIZE,...defaultVariables
    };

    return this.props.apolloClient.watchQuery({
      query,variables: paginated === true ? variablesForPagination : defaultVariables
    });
  };

  loadPages = async (paginated = false) => {
    const { pages: localPages } = this.state;
    const { id,key } = this.props;

    const queryObservable = this.getPageQueryObservable(
      id,paginated
    );


    // I want to ideally call this stuff again..When "Reload" button is clicked.
    this.querySubscription = queryObservable.subscribe({
      next: ({ data,loading }) => {
      ....
    });
iseehr 回答:重新获取特定的GraphQL可操作查询的问题

您可以使用相同的查询和变量调用query,但使用fetchPolicy中的network-only来重新获取查询。这应该更新缓存,并因此更新所有相关的Observable。

await client.query({ query,variables,fetchPolicy: 'network-only' })

但是,实际上没有理由直接使用watchQuery。相反,您应该使用hook API来获取和重新获取数据。

const { data,loading,refetch } = useQuery(query,{ variables })

这不仅减少了样板,而且现在重新提取也很简单

await refetch()
本文链接:https://www.f2er.com/3069401.html

大家都在问