#reactjs #routes #state #gatsby
#reactjs #маршруты #состояние #gatsby
Вопрос:
Поскольку Gatsby эффективно скрывает маршрутизатор, вы не можете передавать реквизиты на каждую страницу так, как вы бы делали с BrowserRouter в Create-React-App. Есть ли способ сделать это в Gatsby? Я предполагаю, что мне нужно как-то это сделать в Gatsby-browser.js . Я в основном хочу поддерживать состояние с именем Step, доступное для всех страниц. Должен ли я использовать контекст для этого?
Ответ №1:
Вы можете передать состояние на страницу с Link
помощью (docs), но помните о том, что страницы создаются без состояния (т. Е. Статически).
<Link
to={`/photos/`}
state={{ tag }}
>
See more {tag}
</Link>
const PhotosPage = ({ location: { state } }) =>
<div>{state?.tag ? `${tag} photos` : "All photos"}</div>
Ответ №2:
Родной (и самый простой) способ — использовать контекст React, но у вас есть несколько способов поделиться глобальным состоянием в Gatsby:
- Использование глобальных оболочек в
wrapRootElement
открытом API:import React from "react" import { ThemeProvider } from "./src/context/ThemeContext" export const wrapRootElement = ({ element }) => ( <ThemeProvider>{element}</ThemeProvider> )
Если вы будете следовать этому подходу, вам также потребуется использовать
wrapRootElement
обаgatsby-browser.js
gatsby-ssr.js
, поскольку это общий API.
Имейте в виду, что маршрутизатор Gatsby простирается от @reach/router
(от React).
Таким образом, вы сохраните свое step
состояние во всем приложении.