URL 에 특정한 값을 넣고, 그 값을 이용해서 페이지가 달라지게 하고 싶습니다.
예를들어 사용자에 따라 어떤 Form 을 보여줄지, 해당 Form의 어떤 Version을 보여줄지…
이 부분을 직접 url 에 넣어서 활용하는 거죠.
example.com/examle?formId=123734&mainVersion=168431 과 같이 url 에 해당 정보를 기입하고
프론트 엔드에서는 이 url 의 정보를 받아 변형되도록 해보겠습니다.
URL 에 특정한 값을 넣고, 그 값을 이용해서 페이지가 달라지게 하고 싶습니다.
예를들어 사용자에 따라 어떤 Form 을 보여줄지, 해당 Form의 어떤 Version을 보여줄지…
이 부분을 직접 url 에 넣어서 활용하는 거죠.
example.com/examle?formId=123734&mainVersion=168431 과 같이 url 에 해당 정보를 기입하고
프론트 엔드에서는 이 url 의 정보를 받아 변형되도록 해보겠습니다.
이미 특정한 정보를 전달하는 라우터가 존재한다는 가정으로 진행하겠습니다.
우선 특정한 정보를 어떤 식으로 페이지에 전달하면서 페이지가 이동하게 할 지에 대한 코드입니다.
const handleLogin = async (id, password) => {
const payload = {
id,
password,
};
try {
const response = await fetch("특정한 값을 전달해주는 라우터", {
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify(payload),
});
//여기서 {"what_form" : ..., "token":...} 과 같이 필요한 정보를 Key 와 Value 를 통해 data 에 담습니다.
const data = await response.json();
if (data.success) {
//what_form 이라는 곳에 전체 form 의 id 를 리스트 식으로 쭉 담았기에 다음과 같은 로직으로 main_form 을 지정합니다.
const main_form =
data.what_form && data.what_form.length > 0 ? data.what_form[0] : null;
//이럼 what_form 내에 요소가 존재하는 경우에는 첫 번째 값을 mian_form 으로, 그렇지 않은 경우 null 이 됩니다.
// 기본적으로 version 은 null 로 넣어두되, main_form 값이 할당되면 그것에 따른 version 을 versionMatching 이라는 배열에서 가져옵시다.
const mainVersion = null;
if (main_form != "null") {
const mainVersion = data.versionMatching[main_form];
}
// main_form과 mainVersion을 URL에 포함하여 mypage로 이동
navigate(`/mypage?formId=${main_form}&mainVersion=${mainVersion}`);
} else {
console.error("Login failed:", data.message);
alert("Failed to login: " + data.message);
}
} catch (error) {
alert("An error occurred while attempting to login.");
console.error("An error occurred during login:", error);
console.error(error.response ? error.response.data : "No response");
}
};
위 코드는 로그인에 성공했을 때, mypage 라는 페이지로 이동을 하되
이때 URL 내부에 main_form 이라는 값과, mainVersion 이라는 값을 할당하며 넘어가게 하는 로직을 가집니다.
위 코드를 통해서 로그인을 한다고 칩시다.
그래도 mypage 라는 페이지에서는 특정한 값이 URL 에 할당되어 있지 않을 겁니다.
할당된 값을 실제로 구현하기 위해서는 mypage 페이지를 수정할 필요가 있습니다.
import { useSearchParams } from "react-router-dom";
다음의 import 문을 통해서 useSearchParams 를 사용해줘야,
정상적으로 URL 에 할당된 값을 사용하고 확인할 수 있습니다.
대충 구조를 그려보자면 아래와 같이 될 겁니다.
const Mypage = () => {
const [searchParams] = useSearchParams();
const mainForm = searchParams.get("formId");
const mainVersion = searchParams.get("mainVersion");
useEffect(() => {
console.log("URL에서 가져온 mainForm:", mainForm);
console.log("URL에서 가져온 mainVersion:", mainVersion);
}, [mainForm, mainVersion]);
return (
<>
{mainForm === "null" ? (
아직 어떠한 Form 도 가지고 있지 않을 때 이런 문구가 나타난다.
) : (
<>
{/* ...실제로 mainFrom 과 mainVersion이 할당되어 있고.
그것을 활용하여 사용자에게 보여주고 싶은 페이지의 코드.. */}
>
)}
>
);
};
export default Mypage;
이제 해당 페이지에서는 URL 에 담긴 값을 활용할 수 있습니다.
mianForm 이 null 이라면 새로운 Form을 생성하라는 문구가,
그렇지 않을 경우에는 정상적으로 사용자에게 보여주고 싶은 페이지가 나타나게끔 할 수 있습니다.