Заставить Гэтсби предварительно загрузить связанную страницу

В моем приложении я сохраняю состояние в глобальном объекте (похожем, но не на Redux). Когда пользователи перемещаются по сайту, я хочу, чтобы это состояние сохранялось. Гэтсби разумно пытается предварительно выбрать содержимое страницы для ссылок, которые он находит на странице, но иногда при переходе по определенному маршруту страница загружается с сервера, окно перезагружается, и я теряю свое состояние.

Еще немного контекста: я уже использую Gatsby Link компонент для каждой ссылки в приложении, и если нужно изменить маршруты программно, я использую Gatsby navigateфункция. Я пробовал сохранить состояние вlocation.state, но он также стирается, если страница не загружается предварительно.

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

ОБНОВИТЬ:

Добавление фрагмента кода из моего gatsby-ssr.js в случае, если это может быть связано:

// gatsby-ssr.js

import React from "react";
import wrapWithState from "@state/wrapWithState"; <-- this is a React context provider

import { SearchConfig } from "@modules/search/index";
import { DefaultLayout, HeaderWrap, Lang } from "@layout";

export const wrapRootElement = wrapWithState;

export const wrapPageElement = ({ element, props }) => {
  const { location } = props;

  return (
    <>
      <Lang currentPath={location.href} />
      <SearchConfig />
      <HeaderWrap currentPath={location.href} />
      <DefaultLayout {...props}>{element}</DefaultLayout>
    </>
  );
};

1 ответ

Все действительно просто. Если ссылка не создается с использованиемLinkкомпонент, он будет вести себя так же, как обычный якорь, и браузер выполнит загрузку страницы (сброс вашего состояния). Сначала определите, какие ссылки действуют как обычные, и выясните, почемуLink компонент там не используется.

Другие вопросы по тегам