Заставить Гэтсби предварительно загрузить связанную страницу
В моем приложении я сохраняю состояние в глобальном объекте (похожем, но не на 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
компонент там не используется.