- Published on
๐ ์ปฌ๋ฌ๋ฆฌ์คํธ ํ๋ก์ ํธ #20 ๋ฐฑ์๋ ์ฐ๊ฒฐํด์ ํ์๊ฐ์ , ๋ก๊ทธ์ธํ๊ธฐ
- ๊ธ์ด์ด
๐
์ค๋์ ๋ฐฑ์๋์ ํ๋ก ํธ์๋ ์๋ฒ๋ฅผ ๋์์ ์ด์ด๋๊ณ
๋ก๊ทธ์ธ๊ณผ ํ์๊ฐ์
์ ์ฑ๊ณตํ ๊ฒฝ์ฐ
ํ์ด์ง ์ด๋ ๋ฐ ์ ๋ฌ๋ ํ ํฐ ๋ด์ฉ์ alert
๋ก ํ์ธํ ์ ์๊ฒ ํด๋ณด์๋ค.
api ์ฐ๊ฒฐ ์ Register.tsx
์ ์ ๋ง๋ค์ด๋ Register.tsx
์ ๋ค์ด๊ฐ๋ณด๋ฉด
์์ง ๋ฐฑ์๋์ ์ฐ๊ฒฐํ๋ ์ฝ๋๊ฐ ์๊ณ data
๋ฅผ alert
์ฐฝ์์ ๋ณด์ฌ์ฃผ๊ฒ๋ ๋ง๋ค์ด ๋์๋ค.
onSubmit={handleSubmit((data) => {
alert(JSON.stringify(data));
ํ์๊ฐ์ ์ฑ๊ณต์ ํ์ด์ง ์ด๋ํ๊ธฐ
๊ทธ๋ฆฌ๊ณ response
์ ๋ฐ์์ด 200๋ฒ๋๋ 300๋ฒ๋, ์ฆ ์ฑ๊ณต ๋ฒ์ ์์ ์์ ๊ฒฝ์ฐ
ok
๋ก ์ฑ๊ณต์ ๊ฐ์ฃผํ๊ณ , react-router-dom
์ ์๋ useNavigate()
๋ฅผ ์ด์ฉํด ๋ก๊ทธ์ธ ํ์ด์ง๋ก ์ด๋ํ๋ค.
ok
ok
๋status
์ 200-299์ ๊ฐ์ ์ถ์ํํboolean
์ธ๋ฐ 200-299์ฌ์ด์status
์ด๋ฉดtrue
๋ฅผ ๊ฐ์ง๊ฒ ๋๋ค.
์ถ์ฒ: https://velog.io/@daybreak/React-Fetch%ED%95%A8%EC%88%98
import { Link, useNavigate } from "react-router-dom";
...
function Register() {
const navigate = useNavigate();
...
if (response.ok) {
navigate("/login");
}
๋ก๊ทธ์ธ Login.tsx๋ ๋์ผํ๊ฒ
Login.tsx
๋ ์ผ๋จ ๋์ผํ๊ฒ ๋ก๊ทธ์ธ์ ์ฑ๊ณตํ์ ๊ฒฝ์ฐ๋ง ์ฝ๋๋ก ์์ฑํ๋ค.
์กฐ๊ธ ๋ค๋ฅด๊ฒ ํ ๊ฒ์ ๋ก๊ทธ์ธ์ ์ฑ๊ณตํ์ ๊ฒฝ์ฐ ์ ๋ฌ๋ jwt
ํ ํฐ ๊ฐ์ result
์ ๋ฃ๊ณ
alert
์ฐฝ์ ๋์ ๋ณผ ์ ์๊ฒ ํ๋ค.
onSubmit={handleSubmit(async (data) => {
const response = await api.login(data);
if (response.ok) {
const result = await response.json(); // body๋ก ์จ json์ ํ์ฑํจ!
alert(JSON.stringify(result));
navigate("/");
}
})}
์ด๋ ๊ฒ ํด์ ํ์ฌ ํ์๊ฐ์
๊ณผ ๋ก๊ทธ์ธ์ ์ฑ๊ณตํ์ ๊ฒฝ์ฐ๋ฅผ ๊ฐ๋จํ ์๋์ํฌ ์ ์๊ฒ ๋์๋ค.
์ค๊ฐ์ input
ํ์
์ ์๋ฌ๊ฐ ๋์ forwardRef
๋ก ์์ ์ ํ๋๋ฐ ์ด ๋ถ๋ถ์ ๋ํด์๋ ๋์ค์ ์ ๋ฆฌํด๋ณด๊ฒ ๋ค.