Параметры - это данные, которые хранятся в адресной строке. Передаются в методах push и replace вместе с path:
push('/persik?mode=default');
replace('/persik?mode=gray');Помните, что параметры всегда имеют тип string.
Метаданные - это данные, которые передаются с одной панели к другой. Передаются в методах push и replace в аргументе meta:
push('/persik', {
url: 'https://cdn.pavgro.world/persik/'
});
replace('/persik', {
url: 'https://cdn.pavgro.world/cat/'
});Получить параметры и метаданные можно с помощью хуков useParams() и useMeta():
type Props = {
nav: string;
};
type P = {
mode?: string;
}
type M = {
url?: string;
};
const Persik: FC<Props> = ({ nav }) => {
const { mode } = useParams<P>();
const { url } = useMeta<M>();
return (
<Panel nav={nav}>
<PanelHeader>Персик</PanelHeader>
<Div>
<img src={url ? url + (mode ?? 'default') : 'https://persik.pavgro.world/'} />
</Div>
<Div>
<Button
size="l"
onClick={() => back()}
>
Перейти назад
</Button>
</Div>
</Panel>
);
};Как вы могли заметить, параметры и метаданные меняют своё состояние во время анимации (например, смены панели). Для параметров это нормальное поведение, а для метаданных - не совсем. В экспериментальном режиме сейчас можно это исправить:
- Получаем состояние роутера:
const { id } = useCurrentState();- Делаем реф на ID из состояния роутера:
const refId = useRef(id);- Прокидываем текущее значение рефа в первый аргумент хука
useMeta:
const meta = useMeta(refId.current);Известный баг: ломается при использовании свайпбэка - #6.