👨💻 FrontEnd/🔵 리액트 [React]
[ react ] 로컬스토리지 활용 : 사용자 아이디 기억하기(remember ID)
minhe2810
2024. 6. 5. 09:08
<form className="user" id="loginForm">
<div className="form-group">
<input
type="email"
name="email"
onChange={handleChange}
className="form-control form-control-user"
aria-describedby="emailHelp"
placeholder="Enter Email Address..."
value={formData.email}
/>
</div>
<div className="form-group">
<input
type="password"
name="password"
onChange={handleChange}
autoComplete="off"
className="form-control form-control-user"
placeholder="Password"
/>
</div>
<div className="form-group">
<div className="custom-control custom-checkbox small">
<input
onChange={handleRememberId}
type="checkbox"
checked={saveIDFlag}
className="custom-control-input"
id="rememberId"
/>
<label
className="custom-control-label"
htmlFor="rememberId"
>
Remember Me
</label>
</div>
</div>
<button
onClick={handleSubmit}
className="btn btn-primary btn-user btn-block"
>
로그인
</button>
<hr />
</form>
// 아이디 저장 체크박스 활성화
const handleRememberId = () => {
console.log("check 발생");
// 로컬스토리지에 LS_KEY_SAVE_ID_FLAG 라는 키값으로 아이디 기억 버튼의 상태를 저장
// 체크 -> true 언체크 -> false
// 기본 값이 false
localStorage.setItem(LS_KEY_SAVE_ID_FLAG, !saveIDFlag);
// 상태 변경해서 저장
setSaveIDFlag(!saveIDFlag);
};
// 컴포넌트가 처음 마운트 될 때만 실행되도록 빈 배열을 두번째 인자로 넘김
useEffect(() => {
// 로컬스토리지에서 저장 활성화 버튼 여부
let idFlag = JSON.parse(localStorage.getItem(LS_KEY_SAVE_ID_FLAG));
// 저장 여부가 없을 경우 현재의 저장 여부를 저장
if (idFlag !== null) setSaveIDFlag(idFlag);
// 저장이 안되어 false일 경우 ""로 저장
if (idFlag === false) localStorage.setItem(LS_KEY_ID, "");
// storage 에서 꺼낸 값 id 값
let data = localStorage.getItem(LS_KEY_ID);
// 저장되어있는 값이 있을 경우
// 데이터가 null이 아닐 경우
if (data !== null) setFormData({ email: data });
}, []);
const [saveIDFlag, setSaveIDFlag] = useState(false);
const LS_KEY_ID = "LS_KEY_ID";
const LS_KEY_SAVE_ID_FLAG = "LS_KEY_SAVE_ID_FLAG";
const handleSubmit = async (e) => {
console.log("handleSubmit() 호출");
e.preventDefault();
console.log("email : ", formData.email);
if (formData.email === "") {
alert("이메일을 입력해주세요.");
return false;
}
if (formData.password === "") {
alert("비밀번호를 입력해주세요");
return false;
}
if (saveIDFlag) {
localStorage.setItem(LS_KEY_ID, formData.email);
}
try {
const response = await api.post(`/api/login`, formData);
console.log("formData : ", formData);
} catch (error) {
console.log("error.status :", error.response.status);
}
};
참고 자료
로그인 폼 만들기 - 아이디 저장
리액트 전체 링크 프로젝트 전체 링크 로그인 폼 만들기 - 아이디 한글 입력 불가 처리 - 아이디 저장 - 비밀번호 표시 - Caps Lock 감지 - useReducer로 Input 관리 아이디 저장 아이디 저장은 로컬 스토
bloodstrawberry.tistory.com