остановить повторную выборку современного useLazyLoadQuery в разбивке на страницы, когда данные доступны в кэше?

#reactjs #graphql #relayjs #relaymodern #react-relay

#reactjs #graphql #relayjs #relaymodern #react-relay

Вопрос:

у меня есть эта разбивка на страницы в relay modern:

 const CategoryContent = () => {
  const { categoryQuery } = useRoute<CategoryContentScreenRouteProp>().params;
  const { viewer } = useLazyLoadQuery<CategoryContentQuery>(
    graphql`
      query CategoryContentQuery(
        $count: Int
        $cursor: String
        $category: String
      ) {
        viewer {
          ...InfiniteCategories_viewer
            @arguments(count: $count, cursor: $cursor, category: $category)
        }
      }
    `,
    { count: 7, category: categoryQuery }
  );
  //console.log("CategoryContent viewer", viewer);
  return (
    <Suspense fallback={<LoadingView />}>
      <View>
        <Text>CategoryContent</Text>
      </View>
      <InfiniteCategories viewer={viewer} />
    </Suspense>
  );
};
  

и это бесконечная разбивка на страницы:

 const InfiniteCategories = ({
  viewer,
}: {
  viewer: InfiniteCategories_viewer$key;
}) => {
  const { data, loadNext, hasNext, isLoadingNext } = usePaginationFragment<
    InfiniteCategoriesPaginationQuery,
    any
  >(
    graphql`
      fragment InfiniteCategories_viewer on Viewer
      @argumentDefinitions(
        count: { type: "Int", defaultValue: 7 }
        cursor: { type: "String", defaultValue: null }
        category: { type: "String" }
      )
      @refetchable(queryName: "InfiniteCategoriesPaginationQuery") {
        merchants(first: $count, after: $cursor, category: $category)
          @connection(key: "InfiniteCategories_viewer_merchants") {
          pageInfo {
            startCursor
            endCursor
          }
          edges {
            node {
              id
              category
              logo
              createdAt
              isFavorite
              pk
              name
            }
          }
        }
      }
    `,
    viewer
  );
  console.log("data InfiniteCategories", data);
  return (
    <StyledFlatList
      {...{
        data:
          data amp;amp; data.merchants amp;amp; data.merchants.edges
            ? data.merchants.edges
            : [],
        contentContainerStyle: styles.contentContainerStyle,
        showsVerticalScrollIndicator: false,
        keyExtractor: ({ cursor }) => cursor,
        renderItem: ({ item }) => (
          <View>
            <Text>{item.node.name}</Text>
          </View>
        ),
        ListFooterComponent: () => {
          if (isLoadingNext) return <ActivityIndicator />;
          if (hasNext)
            return (
              <LoadMoreButton
                onPress={() => {
                  loadNext(7);
                }}
              />
            );
          return null;
        },
      }}
    />
  );
};
  

однако моя проблема заключается в каждом рендеринге, например, когда я возвращаюсь к экрану, он снова загружается? как я могу остановить это, поскольку это разбивка на страницы, пользователю придется снова загружать больше, чтобы восстановить свои данные, а я этого не хочу?

Комментарии:

1. Я попытался настроить кеш и gc, но это не помогло. const store = new Store(new RecordSource(), { gcReleaseBufferSize: 100000, queryCacheExpirationTime: 5 * 60 * 1000, log: console.log.bind(console, '[RELAY-NETWORK]') });