Atomico — это современная библиотека для создания веб-компонентов с реактивным управлением состоянием и маршрутизацией. Одной из ключевых возможностей при работе с маршрутизатором является использование параметров маршрутов, которые позволяют передавать данные через URL и динамически изменять содержимое компонента в зависимости от этих данных.
Параметры маршрутов в Atomico задаются через двоеточие :
в пути маршрута. Например:
import { c, route } from "atomico";
function User({ params }) {
return <div>Пользователь с ID: {params.id}</div>;
}
User.props = {
params: Object
};
const routes = [
route("/user/:id", User)
];
В этом примере :id — это динамический параметр маршрута.
Он автоматически доступен внутри компонента через объект
params.
Ключевые моменты:
:id) должно совпадать с ключом в
объекте params./user/:id/order/:orderId.В Atomico параметры маршрута передаются в компонент через props. Для
их корректной работы рекомендуется объявлять props с типом
Object или конкретной структурой. Пример с несколькими
параметрами:
function Order({ params }) {
return (
<div>
Пользователь: {params.userId} <br />
Заказ: {params.orderId}
</div>
);
}
Order.props = {
params: Object
};
При навигации по маршруту /user/42/order/7 компонент
получит:
params = {
userId: "42",
orderId: "7"
};
Atomico позволяет задавать опциональные параметры с
помощью знака вопроса ?.
route("/search/:query?", SearchComponent)
query присутствует в URL, оно будет доступно в
params.params.query будет
undefined.Для более сложной валидации параметров можно использовать регулярные выражения прямо в определении маршрута:
route("/product/:id(\\d+)", ProductComponent)
id состоит из
цифр.Параметры маршрута можно использовать не только для отображения данных, но и для загрузки ресурсов или выполнения API-запросов:
function Profile({ params }) {
const [user, setUser] = useState(null);
useEffect(() => {
fetch(`/api/users/${params.id}`)
.then(res => res.json())
.then(data => setUser(data));
}, [params.id]);
if (!user) return <div>Загрузка...</div>;
return <div>{user.name}</div>;
}
params реактивны: при изменении URL компонент
автоматически получает новые значения.useEffect с зависимостью от params.Atomico поддерживает вложенные маршруты, и параметры могут передаваться сквозь вложенность:
const routes = [
route("/dashboard", Dashboard, [
route("user/:id", DashboardUser),
route("settings/:tab?", DashboardSettings)
])
];
params только для своей
части маршрута.PropTypes или TypeScript для явного указания структуры
params.??:const page = params.page ?? 1;
route("/blog/:category/:postId?", BlogComponent)
category — обязательный параметр, определяет раздел
блога.postId — опциональный, если указан, отображается
конкретная статья, иначе список статей.function Blog({ params }) {
if (params.postId) {
return <Post id={params.postId} />;
}
return <PostList category={params.category} />;
}
Такой подход позволяет создавать универсальные маршруты, объединяющие список и детальный просмотр.
Параметры маршрутов в Atomico обеспечивают гибкую и реактивную работу с URL, позволяя создавать динамические интерфейсы с минимальной настройкой и высокой структурностью компонентов. Они интегрированы с системой props, поддерживают опциональные значения, регулярные выражения и вложенные маршруты, что делает их мощным инструментом при построении сложных веб-приложений.