๋ก๊ทธ์ธ ํ์ด์ง ์๊ตฌ ์ฌํญ
1) Login.jsx ์์ ๋ก๊ทธ์ธ๊ณผ ํ์๊ฐ์
UI๋ฅผ ๋ชจ๋ ๋ง๋ค์ด์ฃผ์ธ์.
2) ๋ก๊ทธ์ธ์ฐฝ์์๋ ํ์๊ฐ์
๋ฒํผ์ ํด๋ฆญํ๋ฉด ํ์๊ฐ์
์ฐฝ์ผ๋ก, ํ์๊ฐ์
์ฐฝ์์๋ ๋ก๊ทธ์ธ ๋ฒํผ์ ๋๋ฅด๋ฉด ๋ก๊ทธ์ธ์ฐฝ์ผ๋ก ํ ๊ธ๋ง ๋๋๋ก ๊ตฌํํด ๋ณด์ธ์.
3) ์์ด๋๋ 4~10๊ธ์๋ก, ๋น๋ฐ๋ฒํธ๋ 4~15๊ธ์๋ก, ๋๋ค์์ 1~10๊ธ์๋ก ์ ํํ์ธ์.
4) (์ ํ) ๋ก๊ทธ์ธํ๋ฉด์์๋ ์์ด๋, ๋น๋ฐ๋ฒํธ์ ์
๋ ฅ๊ฐ์ด ๋ชจ๋ ์์ ๊ฒฝ์ฐ์๋ง ๋ก๊ทธ์ธ ๋ฒํผ์ด ํ์ฑํ๋๋๋ก ํ๊ณ , ํ์๊ฐ์
ํ๋ฉด์์๋ ์์ด๋, ๋น๋ฐ๋ฒํธ, ๋๋ค์์ ์
๋ ฅ๊ฐ์ด ์์ ๊ฒฝ์ฐ์๋ง ํ์๊ฐ์
๋ฒํผ์ด ํ์ฑํ๋๋๋ก ํด๋ณด์ธ์.
5) redux ๋ชจ๋๋ก authSlice.js ๋ฅผ ๋ง๋ค๊ณ ๋ก๊ทธ์ธ ์ํ๋ฅผ ์ ์ญ ์ํ๋ก ๊ด๋ฆฌํ๋๋ก ํ์ธ์.
6) ๋ก๊ทธ์ธ ์ฑ๊ณตํ์ ๊ฒฝ์ฐ, ๋ก๊ทธ์ธ ์ํ๋ฅผ ๋ณ๊ฒฝ์์ผ ํํ๋ฉด์ ์ด๋๋๋๋ก ํด์ผํฉ๋๋ค.
(Router.jsx ์์ )
7) ํ์๊ฐ์
์ ์ฑ๊ณตํ๋ฉด ๋ก๊ทธ์ธ ๋ชจ๋๋ก ์ ํํด ์ฃผ์ธ์.
8) (์ ํ) ๋ก๊ทธ์ธ ์ฑ๊ณต์ด๋ ํ์๊ฐ์
์ฑ๊ณต ์ ๋ธ๋ผ์ฐ์ alert ๋์ react-toastify ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํด์ ๊ตฌํํด ๋ณด์ธ์.
<Container>
<LoginTitle>{isLoginMode ? "๋ก๊ทธ์ธ" : "ํ์๊ฐ์
"}</LoginTitle>
<LoginContainer onSubmit={onSubmitForm}>
<EmailInputBox>
<label>ID</label>
<input
type="text"
name="id"
placeholder="์์ด๋ (4~10๊ธ์)"
minLength={4}
maxLength={10}
required
onChange={onChangeInput}
value={id}
/>
</EmailInputBox>
<PasswordInputBox>
<label>PW</label>
<input
type="password"
name="password"
placeholder="๋น๋ฐ๋ฒํธ (4~15๊ธ์)"
minLength={4}
maxLength={15}
required
onChange={onChangeInput}
value={password}
/>
</PasswordInputBox>
{!isLoginMode && (
<NickNameInputBox>
<label>Nickname</label>
<input
type="text"
name="nickname"
value={nickname}
onChange={onChangeInput}
minLength={1}
maxLength={10}
placeholder="๋๋ค์ (1~10๊ธ์)"
required
/>
</NickNameInputBox>
)}
<LoginNRegisterBox>
<Button
text={isLoginMode ? "๋ก๊ทธ์ธ" : "ํ์๊ฐ์
"}
disabled={
isLoginMode ? !id || !password : !id || !password || !nickname
}
size="large"
></Button>
<CreateAccountButton onClick={() => setIsLoginMode((prev) => !prev)}>
{isLoginMode ? "ํ์๊ฐ์
" : "๋ก๊ทธ์ธ"}
</CreateAccountButton>
</LoginNRegisterBox>
</LoginContainer>
</Container>
);
};
const authSlice = createSlice({
name: "auth",
initialState,
reducers: {
login: (state, action) => {
state.isLogin = true;
},
logout: (state, action) => {
state.isLogin = false;
},
},
const isLogin = useSelector((state) => state.auth.isLogin)
<Routes>
{isLogin ? (
<Route element={<Layout />}>
<Route path="/" element={<Home />} />
<Route path="/detail/:id" element={<Detail />} />
<Route path="/myprofile" element={<MyProfile />} />
<Route path="*" element={<Navigate replace to="/" />} />
</Route>
const onSubmitForm = async (e) => {
e.preventDefault();
console.log("์ ์ถ");
if (isLoginMode) {
dispatch(login());
alert("๋ก๊ทธ์ธ์ฑ๊ณต")
} else {
setIsLoginMode(true);
alert("ํ์๊ฐ์
์ฑ๊ณต");
}
};