Next JS 페이지 이동시 데이터 전달하는 법

루비·2022년 8월 2일
0

NextJS

목록 보기
1/7

-> POST 시 Back에서 ProcessedData를 다시 클라이언트 쪽으로 보내준다. 이 데이터를 다른 페이지에서 띄어줘야하는데 어떻게 해줘야할까?

-> useRouter을 사용하면 된다.

필자는 아쉽게도 개념 공부를 1도 하지 않은 채 프로젝트를 제작해서 이자식의 정확한 개념 / 원리는 잘 모르겠지만, 언젠간 또 사용할 것이라고 느껴서 바로 기록으로 저장하겠다.

import router from "next/router";


const submitRemittance = async () => {
	
    // POST 할 때는 어떤 것에다가 POST 해주는지 해당 Key들을 작성해줘야한다. 
    // 참고로 fromAcc, toAcc, preAmount -> 이자식들은 모두 useState로 관리
    const res = await fetch(
      "http://223.26.252.78:8080/bridgingSystem/historyDataInput",
      {
        method: "POST",
        body: JSON.stringify({ fromAcc, toAcc, preAmount }),
        headers: {
          "Content-Type": "application/json",
          Accept: "application/json",
        },
      }
    );
    const data = await res.json();
    setReceipt(JSON.stringify(data));
    console.log(receipt);
	
    // data를 콘솔 창에 확인하면, 위의 사진처럼 되어있다. 나는 ProcessedData에 해당하는 값들을 모두 참조해야해서, data.ProcessedData.해당하는 key로 접근했다. 
    router.replace({
      pathname: "/send/receipt",
      query: {
        ProcessedData: data.ProcessedData,
        toAcc: data.ProcessedData.toAcc,
        preAmount: data.ProcessedData.preAmount,
        sequenceNumber: data.ProcessedData.sequenceNumber,
        fee: data.ProcessedData.fee,
        fromTime: data.ProcessedData.fromTime,
        toTime: data.ProcessedData.toTime,
        postAmount: data.ProcessedData.postAmount,
        status: data.ProcessedData.status,
        fromAcc: data.ProcessedData.fromAcc,
        selectPlatform: selectPlatform,
        receivePlatform: receivePlatform,
      },
    });
// 페이지 이동 시 데이터를 저장할 페이지에다가 useRouter 사용하고, router.query.해당 키 입력 해주면 끝 
import Head from "next/head";
import { useRouter } from "next/router";
import { XIcon } from "@heroicons/react/outline";

function MyPage() {
  // console.log('data', data);
  const router = useRouter();

  return (
    <div>
      <Head>
        <title>송금/결제하기 - TS&P</title>
        <link rel="icon" href="/tsmp.png" />
      </Head>

      <main>
        <div className="flex justify-center mx-auto items-center space-x-0.5 overflow-x-scroll scrollbar-hide p-3 m-5 md:space-x-2.5 md:p-2">
          <div className=" bg-white w-2/5 h-200 rounded-3xl overflow-hidden shadow-lg">
            <div className="px-10 py-7">
              <div className="flex justify-between">
                <div className=" text-[#222222] font-bold text-3xl mb-7">
                  최종 송금 내역{" "}
                </div>
                결제 상태 : {router.query.status}
                <div
                  onClick={() => router.push("/mypage")}
                  className="cursor-pointer"
                >
                  <XIcon className="h-5 w-5 md:h-10 md:w-10" />
                </div>
              </div>

              <div className="overflow-x-auto relative">
                <div className="bg-white border-b dark:bg-gray-800 dark:border-gray-700">
                  <div className="flex justify-between py-2 px-6 font-medium text-gray-900 whitespace-nowrap dark:text-white">
                    <span className="text-2xl mt-3 text-[#222222] ">
                      송금 플랫폼 : {router.query.selectPlatform}
                    </span>

                    <span className="text-2xl mt-3 text-[#222222]">
                      수취 플랫폼 : {router.query.receivePlatform}
                    </span>
                  </div>

                  <div className="py-4 px-6 font-medium text-gray-900 whitespace-nowrap dark:text-white">
                    <span className="mx-4 text-xl text-[#232323]">
                      보내는 계좌 : {router.query.fromAcc}
                    </span>
                    <span className=" text-xl"></span>
                  </div>

                  <div className="py-4 px-6 font-medium text-gray-900 whitespace-nowrap dark:text-white">
                    <span className="mx-4 text-xl text-[#232323]">
                      송금인측 처리시각 : {router.query.fromTime}
                    </span>
                  </div>

                  <div className="py-4 px-6 font-medium text-gray-900 whitespace-nowrap dark:text-white">
                    <span className="mx-4 text-xl text-[#232323]">
                      환전 이전 금액 : {router.query.preAmount}
                    </span>
                  </div>

                  <div className="py-4 px-6 font-medium text-gray-900 whitespace-nowrap dark:text-white">
                    <span className="mx-4 text-xl text-[#232323]">
                      받는계좌 : {router.query.toAcc}
                    </span>
                  </div>

                  <div className="py-4 px-6 font-medium text-gray-900 whitespace-nowrap dark:text-white">
                    <span className="mx-4 text-xl text-[#232323]">
                      수취인측 처리시각 : {router.query.toTime}
                    </span>
                  </div>

                  <div className="py-4 px-6 font-medium text-gray-900 whitespace-nowrap dark:text-white">
                    <span className="mx-4 text-xl text-[#232323]">
                      순서번호 : {router.query.sequenceNumber}
                    </span>
                  </div>

                  <div className="py-4 px-6 font-medium text-gray-900 whitespace-nowrap dark:text-white">
                    <span className="mx-4 text-xl text-[#232323]">
                      수수료 : {router.query.fee}
                    </span>
                  </div>
                </div>
              </div>
              <div className="flex justify-center">
                <button
                  onClick={() => {
                    window.alert("결제가 진행되었습니다.");
                    router.push("/mypage");
                  }}
                  className="w-full h-16 text-xl bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-4 border border-blue-700 rounded"
                >
                  확인
                </button>
              </div>
            </div>
          </div>
        </div>
      </main>
    </div>
  );
}

export default MyPage;
  • 필자는 참고로 HTML/CSS/JS 개념도 대충이라도 잘 모르고... 리액트도 잘 모르고.. NextJS도 잘 몰라서.. 원리 / 개념보다 까먹을까봐 진행 과정만 적어 놓았다. 하지만, 개념은 꼭 잡아야한다.

  • 이것의 단점은, URL에 전달 된 값들이 그대로 노출된다.

profile
개발훠훠

0개의 댓글