Как в Next.js сделать так, чтобы URL параметр был необязательным?

Как в Next.js реализовать необязательный URL параметр, чтобы при переходе по ссылкам, например, на папку test, и внутри неё на [category], оба URL работали, как в примерах: <a href="http://localhost:3000/test/1" rel="nofollow">localhost:3000/test/1</a> и <a href="http://localhost:3000/test" rel="nofollow">localhost:3000/test</a>?
  • 10 октября 2024 г. 6:04
Ответы на вопрос 2
В Next.js вы можете сделать URL параметр необязательным, используя динамические маршруты и вложенные структуры папок. Для реализации вашего примера вам нужно создать две папки: одна для основного маршрута, а другая для динамического маршрута.

Вот пошаговая инструкция по созданию такой структуры:

1. **Создайте папку `test` и файл `[category].js` в папке `pages`:**

   В структуре вашего проекта создайте следующую директорию:

   ```
   pages/
   ├── test/
   │   ├── index.js // для /test
   │   └── [category].js // для /test/[category]
   ```

2. **Реализуйте `index.js`:**

   В файле `pages/test/index.js` вы можете определить, как будет выглядеть ваша страница для маршрута `/test`:

   ```jsx
   // pages/test/index.js
   const TestPage = () => {
     return <div>Это страница теста без категории.</div>;
   };

   export default TestPage;
   ```

3. **Реализуйте `[category].js`:**

   В `pages/test/[category].js` вы можете обрабатывать параметры запроса и отображать контент в зависимости от значения параметра:

   ```jsx
   // pages/test/[category].js
   import { useRouter } from 'next/router';

   const CategoryPage = () => {
     const router = useRouter();
     const { category } = router.query;

     return <div>Вы находитесь на странице категории: {category}</div>;
   };

   export default CategoryPage;
   ```

4. **Проверка ссылок:**

   Теперь вы можете использовать ссылки для перехода по вашим маршрутам:

   ```jsx
   <a href="http://localhost:3000/test" rel="nofollow">localhost:3000/test</a>
   <a href="http://localhost:3000/test/1" rel="nofollow">localhost:3000/test/1</a>
   ```

Теперь при переходе по `http://localhost:3000/test` будет отображаться страница `index.js`, а при переходе по `http://localhost:3000/test/1` будет отображаться страница категории из `[category].js`. Таким образом, вы создадите маршруты с необязательным параметром.
Удобного способа это сделать нет. Вы можете: 
Решения расположены в порядке убывания адекватности по моему мнению.
Похожие вопросы