Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Оглавление

Параметры маршрута и навигация

Параметр маршрута — изменяемая часть адреса, например номер статьи в /posts/7. Один маршрут с параметром обслуживает все статьи сразу, а компонент читает значение параметра и показывает нужную.

Маршрут с параметром

Параметр обозначается двоеточием. Добавьте маршруты в src/index.jsx рядом с остальными:

// src/index.jsx
<Route path="/posts" component={Posts} />
<Route path="/posts/:id" component={Post} />

Не забудьте импортировать Posts и Post из папки src/pages.

Чтение параметра

// src/pages/Post.jsx
import { useParams } from '@solidjs/router';
 
export default function Post() {
  const params = useParams();
 
  return <h1>Статья номер {params.id}</h1>;
}

Откройте http://localhost:3000/posts/7 — появится «Статья номер 7». Значения параметров всегда строки.

params — реактивный объект. При переходе с /posts/7 на /posts/8 компонент не создаётся заново, а params.id просто меняет значение. Поэтому, как и с пропсами, читайте params.id там, где он нужен, а не сохраняйте в переменную.

Ссылки на статьи

Список статей строит ссылки с номером в адресе:

// src/pages/Posts.jsx
import { For } from 'solid-js';
import { A } from '@solidjs/router';
 
const posts = [
  { id: 1, title: 'Первая статья' },
  { id: 2, title: 'Вторая статья' },
];
 
export default function Posts() {
  return (
    <ul>
      <For each={posts}>
        {(post) => (
          <li>
            <A href={`/posts/${post.id}`}>{post.title}</A>
          </li>
        )}
      </For>
    </ul>
  );
}

На http://localhost:3000/posts видны две ссылки; щелчок открывает страницу статьи. В следующем уроке список будет загружаться с сервера.

Переход из кода

Иногда перейти нужно не по ссылке, а после действия — например, после удаления статьи. Для этого есть useNavigate:

// src/pages/Post.jsx
import { useParams, useNavigate } from '@solidjs/router';
 
export default function Post() {
  const params = useParams();
  const navigate = useNavigate();
 
  return (
    <div>
      <h1>Статья номер {params.id}</h1>
      <button onClick={() => navigate('/posts')}>К списку</button>
    </div>
  );
}

Нажатие на кнопку возвращает к списку статей.

Другие функции

ФункцияЧто возвращает
useParams()Параметры из пути: params.id
useNavigate()Функцию перехода navigate(адрес)
useLocation()Текущий адрес: location.pathname
useSearchParams()Параметры после ? и функцию их изменения

Частая ошибка

Деструктурировать параметры: const { id } = useParams(). Значение прочитается один раз, и при переходе со статьи 7 на статью 8 через ссылку на странице останется номер 7. Обращайтесь к params.id прямо в JSX и в функциях.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.