Я настроил проект gatsby, используя этот связь. Он работает правильно.
Теперь я знаю, как создать маршрут, определив компонент внутри папки pages. Но теперь у меня есть новая задача, мне нужно создать один динамический маршрут, чтобы я мог передать в нем свой id (прямо как reactjs).
<Route path: "/path/:id"/>
Как это сделать в гэтсби?





Вы должны явно указать Гэтсби, что путь должен быть динамическим. Из документы:
// gatsby-node.js
// Implement the Gatsby API “onCreatePage”. This is
// called after every page is created.
exports.onCreatePage = async ({ page, actions }) => {
const { createPage } = actions
// page.matchPath is a special key that's used for matching pages
// only on the client.
if (page.path.match(/^/app/)) {
page.matchPath = "/app/*"
// Update the page.
createPage(page)
}
}
а затем вы можете использовать динамическую маршрутизацию в src/pages/app.js
import { Router } from "@reach/router"
const SomeSubPage = props => {
return <div>Hi from SubPage with id: {props.id}</div>
}
const App = () => (
<Layout>
<Link to = "/app/1">First item</Link>{" "}
<Link to = "/app/2">Second item</Link>{" "}
<Router>
// ...dynamic routes here
<SomeSubPage path = "/app/:id" />
</Router>
</Layout>
)
export default App
Все, что идет к /app/*, теперь будет обрабатываться динамически. Вы должны найти свой идентификатор, как обычно, в реквизитах.
Взгляните на их пример аутентификации https://github.com/gatsbyjs/gatsby/tree/master/examples/simple-auth
Да, конечно! Настройте конфигурацию в gatsby-node.js (page.path.match(...))
Я пробовал это. Но не знаю, как удалить /app и поставить только /. Не могли бы вы направить меня
По моему скромному мнению, Гэтсби должен работать не так. Если вам нужна полностью динамическая страница, взгляните на create-react-app. Gatsby — это генератор статических сайтов, который генерирует страницы из статического контента. Он может обрабатывать динамический контент, но, если вы спросите меня, это не основная цель.
Gatsby — это больше, чем генератор статических сайтов, вы можете создавать приложения с его помощью так же, как вы делали это с CRA.
Эй, у вас есть какой-нибудь репозиторий GitHub, чтобы просто узнать, как добавить внешние файлы CSS и js в проект gatsby?
можно ли использовать параметры в createPage? например: createPage({путь: "/blog/:blogId/:slug", matchPath: "/blog/:blogId/:slug", компонент: path.resolve("src/components/layouts/BlogLayout.jsx"), })
Не нужно трогать gatsby-node.js вообще. Просто нужно добавить файл с квадратными скобками в папку pages. Например, пользователи/[id].js.
Вы можете использовать gatsby-plugin-create-client-paths. Он использует matchPath. Для получения дополнительной информации проверьте
не совсем, я не думаю, что это дает гибкость динамических путей, просто упрощает добавление новых. См.: «Используйте этот плагин, чтобы упростить создание «гибридного» приложения Gatsby как со статически отображаемыми страницами, так и с «клиентскими путями».»
Вы можете использовать квадратные скобки ([ ]) в пути к файлу, чтобы отметить любые динамические сегменты URL-адреса. Например, чтобы отредактировать пользователя, вам может понадобиться такой маршрут, как /user/:id, чтобы получить данные для любого идентификатора, переданного в URL-адрес.
src/pages/users/[id].js сгенерирует маршрут типа /users/:idsrc/pages/users/[id]/group/[groupId].js сгенерирует маршрут типа /users/:id/group/:groupId
Ссылка: https://www.gatsbyjs.com/docs/reference/routing/file-system-route-api#creating-client-only-routes
Почему это не принятый ответ?
Этот ответ очень поздний, но для тех, кто в будущем столкнется с этой проблемой, у меня есть более простое решение.
В терминах Гэтсби это называется Сплат Маршрут.
Например, если вам нужна какая-то страница «domain.com/profile/[id]», где id может быть любым числом, которое будет использоваться для отображения различных данных внутри веб-сайта, вы должны назвать свою страницу как [...id ].
Теперь внутри страницы вы можете получить доступ к этому идентификатору как
const ProfilePage = (props) => <div>This page is for id number {props.params.id}</div>
Примечание: не пропустите 3 точки, это то, что означает splat-маршрут в gatsby.
Спасибо большое. Могу ли я удалить
/appиз моего маршрута?