import { useSession } from"next-auth/react";
exportdefaultfunctionPage() {
const { data: session, status, update } = useSession();
if (status === "authenticated") {
return (
<><p>Signed in as {session.user.name}</p>
// 업데이트 값을 서버 측으로 전송
<buttononClick={() => update({ name: "John Doe" })}>Edit name</button>
// 서버측에서 이미 값을 업데이트 했다고 하고 가정. 트리거만 실행 // 모든
`useSession().data` 가 업데이트.
<buttononClick={() => update()}>Edit name</button></>
);
}
return<ahref="/api/auth/signin">Sign in</a>;
}
그냥 간단하게 하고 싶다면 update에 파라미터로 객체를 넣어주면 된다.
내 홈페이지에도 한번 적용해 보았다.
필요없는 코드들은 간략하게 줄이고 주석을 달아 넣어보았다.
"use client";
import { useSession } from"next-auth/react";
import { useRouter } from"next/navigation";
exportdefaultfunctionProfile() {
const router = useRouter();
const { update } = useSession();
asyncfunctionhandleSubmit(e: React.FormEvent<HTMLFormElement>) {
e.preventDefault();
// 폼 데이터를 만들고 데이터 주입const formData = newFormData();
formData.append("nickName", value);
// api fetch를 통해 백앤드 업데이트const res = awaitfetch("/api/editProfile", {
method: "POST",
body: formData,
});
const resJson = await res.json();
// 성공할 경우 update로 session 업데이트 및 트리거 실행if (resJson.success === "success") {
// 데이터를 객체 구조로 만들고 업데이트 함.constupdateObj: Record<string, string | boolean> = {};
userInputTable.forEach((each: userInputTableObj) => {
updateObj[each.name] = each.valueasstring;
});
// 업데이트 기다린 후 새록침 하려고 awaitawaitupdate(updateObj);
// 세선 업데이트로 navbar 업데이트를 위한 새로고침
router.refresh();
}
}
return (
<formonSubmit={(e) => handleSubmit(e)}>
<input
// userInput.value는대충useState로설정한것value={userInput.value}onChange={(e) => handleChange(e)}
/>
<buttontype="submit">가입</button></form>
);
}
댓글을 불러오는 중...