Конкретный случай заключается в том, что я использую одну страницу filter.jsx, чтобы получить запрос от пользователя, например предмет, оценку ученика, уровень сложности... Затем я обрабатываю их через API filter/route.js, чтобы отфильтровать базу данных вопросов и отправить отфильтрованные ответы. данные обратно на страницу filter.jsx.
Как я могу создать кнопку в filter.jsx, которая при нажатии будет перемещаться на другую страницу test.jsx и использовать отфильтрованные данные на этой test.jsx странице?
Я использовал Link и router.push, но они не работают. Возможно, я использовал его неправильно.
Nextjs 14. Но я могу использовать оба синтаксиса для nextjs13.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Есть несколько способов сделать это. Можно было бы использовать параметры URL-адреса в <Link> со страницы filter.jsx на test.jsx, например
const filterValue = "some-value";
...
href = {`/whatever/url/test-is-at?filter=${filterValue}`}
...
Тогда вы можете получить это на странице test.jsx через
Следующие 14:
export default function Page() {
const searchParams = useSearchParams();
const filterValue = searchParams.filter; // some-value
...
https://nextjs.org/docs/app/api-reference/functions/use-search-params
Следующие 13:
export default function Page({searchParams}) {
const filterValue = searchParams.filter; // some-value
...
https://nextjs.org/docs/app/api-reference/file-conventions/page#searchparams-optional
Вероятно, значение вашего фильтра находится в состоянии, поэтому, когда ваш вызов API разрешается, вы устанавливаете состояние, и оно обновляет href в вашем Link, но вы, вероятно, уже это знали :)
Добиться этого можно двумя способами:
1. Параметры URL или строки запроса.
В Filter.jsx:
const router = useRouter();
const handleSubmit = async () => {
const filteredData = await fetchFilteredData();
router.push({
pathname: '/test',
query: { subject: filteredData.subject, grade: filteredData.grade }, // Example query parameters
});
};
Тест.jsx:
import { useRouter } from 'next/router';
const Test = () => {
const router = useRouter();
const { subject, grade } = router.query;
// Use subject and grade as needed
};
2. Маршруты API Next.js для получения данных на стороне сервера.
В filter.jsx:
const handleNavigate = () => {
router.push(`/test?id=${filteredDataId}`);
};
Тест.jsx:
export async function getServerSideProps(context) {
const { id } = context.query;
const data = await fetchFilteredDataById(id);
return { props: { data } };
}
Следующие 13 или следующие 14?