lil.dev
Published on

๐ŸŽ‰ ์ปฌ๋Ÿฌ๋ฆฌ์ŠคํŠธ ํ”„๋กœ์ ํŠธ #20 ๋ฐฑ์—”๋“œ ์—ฐ๊ฒฐํ•ด์„œ ํšŒ์›๊ฐ€์ž…, ๋กœ๊ทธ์ธํ•˜๊ธฐ

๊ธ€์“ด์ด

    ๐Ÿ“Œ

    Welcome

    โœจ ์ปฌ๋Ÿฌ๋ฆฌ์ŠคํŠธ ์‚ฌ์ดํŠธ(์•„์ง ์—†์Œ

    ์˜ค๋Š˜์€ ๋ฐฑ์—”๋“œ์™€ ํ”„๋ก ํŠธ์—”๋“œ ์„œ๋ฒ„๋ฅผ ๋™์‹œ์— ์—ด์–ด๋†“๊ณ 
    ๋กœ๊ทธ์ธ๊ณผ ํšŒ์›๊ฐ€์ž…์„ ์„ฑ๊ณตํ•œ ๊ฒฝ์šฐ
    ํŽ˜์ด์ง€ ์ด๋™ ๋ฐ ์ „๋‹ฌ๋œ ํ† ํฐ ๋‚ด์šฉ์„ 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๋กœ ์ˆ˜์ •์„ ํ–ˆ๋Š”๋ฐ ์ด ๋ถ€๋ถ„์— ๋Œ€ํ•ด์„œ๋Š” ๋‚˜์ค‘์— ์ •๋ฆฌํ•ด๋ณด๊ฒ ๋‹ค.