Могу ли я передавать данные с одной страницы на другую как состояние, используя каталог приложений Nextjs 13?

Используя маршрутизатор приложений Nextjs 13, я хочу передать просмотр данных из MainComponent.jsx в Preview.jsx в качестве состояния . не через запрос или реквизит. Я просто хочу передать данные как состояние из MainComponent.jsx и перейти к Result.jsx, получить данные состояния и отобразить их в компоненте результата . Возможно ли это, или есть ли лучший подход к решению этой проблемы?

Моя структура папок

      -App
   -maincomponent
     -page.jsx
   -result
     -page.jsx

MainComponent.jsx

      "use client";

import { useRouter } from "next/navigation";

const MainComponent = () => {
  const router = useRouter();
  const { id } = router.query;

  const imageData = images.find((image) => image.id === parseInt(id));

  let previewData = null;
  if (imageData) {
    previewData = {
      id: imageData.id,
      title: imageData.title,
      imageUrl: imageData.imageUrl,
    };
  }

  return (
    <div>
      {previewData ? (
        <div>
          <h1>{previewData.title}</h1>
        </div>
      ) : (
        <div>
          <p>Loading...</p>
        </div>
      )}
    </div>
  );
};

export default MainComponent;

Результат.jsx

      import { useRouter } from "next/navigation";

const Result = () => {

  return (
    <div>
        Display the Preview Data Here as A state
    </div>
  );
};

export default Result;

1 ответ

окей, вам нужно использовать перехватчик useContext и создать внешнее состояние для вашего приложения. Я пытаюсь сказать, что создайте новый файл в каталоге приложения, создайте контекст и передайте ему значения, а затем оберните им компонент макета следующим образом: предположим, что ваше новое имя файла — store.jsx.

      const yourContext = createContext();
const Store = ({children}) =>{
 <yourContext.Provider values={{yourvalues}}>
    {children}
 </yourContext.Provider>
}
export default Store;

Затем в файле макета.jsx

      import Store from "./store";
export default function RootLayout({children}){
return <Store> {children} </Store> }

это приведет к тому, что я создам общее состояние для вашего приложения, а затем, где бы вы ни захотели его вызвать, вам просто нужно использовать хук useContext на этой странице, и ваше состояние можно будет легко получить, не потеряв. попробуй

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