Как изменить URL-адрес без обновления до следующей страницы с помощью Next Js useRouter?
Я использую Next.js и хочу знать, как изменить URL-адрес на той же странице, не обновляя его. Я использую shallow=true, но он все равно выводит на следующую страницу.
Это мой код:
<Tabs>
<Tab href='test/1' label='Sample Exam'/>
<Tab href='test/1/exam' label='Test Exam'/>
</Tabs>
<TabPanel value={tabvalue} index={0}>
<SampleComponent />
</TabPanel>
<TabPanel value={tabvalue} index={1}>
<TestComponent />
</TabPanel>
Это логика, но не работает
const [tabValue, setTabValue] = React.useState(0);
const router = useRouter();
const handleChange = (event: React.ChangeEvent<{}>, newValue: number) => {
setTabValue(newValue);
useEffect(() => {
router.replace('/test/1', '/test/1/exam', { shallow: true});
}, []);
};
Я уже тестировал router.push, он не работает, и состояние замены окон - плохая идея. Вкладки будут выглядеть так.
Sample Exam | Test Exam
Если вы нажмете "Образец экзамена", он отобразит детали образца так же, как и тест, но он должен быть на той же странице.
Благодарю.
1 ответ
Старый пост, но может кому пригодится:
Проблема в том, что вы не можете мелкий маршрут
'/test/1'
to , потому что nextjs использует маршрутизацию на основе файловой системы. Внутри каталога ваших страниц будет указывать на
test/1/index.js
или если вы используете динамические пути, это . Однако
'/test/1/exam'
укажет на
test/1/exam/index.js
или, в случае динамических путей, это может быть
test/[id]/exam/index.js
. Эти два файла не находятся на разных уровнях, поэтому неглубокая маршрутизация не будет работать.
Вы можете попробовать добавить запрос, например:
test/1?show=exam
, потому что это можно обработать только с 1 файлом:
test/[id].js
. Поверхностная маршрутизация будет работать таким образом.
Другой способ — отобразить что-то и в случае пробного экзамена. например, вместо использования
'test/1'
возможно
'test/1/sample'
а также
'test/1/exam'
останется. В этом случае один файл сможет обрабатывать два отдельных параметра с неглубокой маршрутизацией:
test/[id]/[slug].js
Подробнее: https://nextjs.org/docs/routing/introduction И https://nextjs.org/docs/routing/dynamic-routes