Как я могу отправлять данные между двумя страницами в Next.js?

Конкретный случай заключается в том, что я использую одну страницу filter.jsx, чтобы получить запрос от пользователя, например предмет, оценку ученика, уровень сложности... Затем я обрабатываю их через API filter/route.js, чтобы отфильтровать базу данных вопросов и отправить отфильтрованные ответы. данные обратно на страницу filter.jsx.

Как я могу создать кнопку в filter.jsx, которая при нажатии будет перемещаться на другую страницу test.jsx и использовать отфильтрованные данные на этой test.jsx странице?

Я использовал Link и router.push, но они не работают. Возможно, я использовал его неправильно.

Следующие 13 или следующие 14?

Matt Morgan 01.03.2024 13:36

Nextjs 14. Но я могу использовать оба синтаксиса для nextjs13.

David Nguyen 01.03.2024 13:52
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
2
106
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Есть несколько способов сделать это. Можно было бы использовать параметры 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 или строки запроса.
  2. Маршруты API Next.js для получения данных на стороне сервера.

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 } };
}

Другие вопросы по теме

Невозможно использовать текстовый компонент реакции-три/drei в NextJs 14
Свойство "store" не существует для типа {} - MobX & React & TypeScript
Есть ли способ объединить хуки для повторного использования в аналогичных компонентах в реакции?
Как запустить дочерние функции с помощью родительской кнопки в React?
Реализация окна поиска мест в ReactJS
Next.js 14: Необнаруженная ошибка: инвариантный ожидаемый маршрутизатор приложений должен быть установлен для моего веб-приложения реагирования 18
Реагировать на проблему собственного календаря при использовании его в представлении и настройке его в соответствии с высотой и шириной представления
Какой репозиторий отвечает за написание этого сообщения об ошибке?
Ошибка типа: невозможно прочитать свойства неопределенного значения (чтение «документа») с помощью jquery
Внутренний сервер VPS работает по протоколу http вместо https