๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Memo

๋งˆ์ฐธ๋‚ด! ํ•ด๊ฒฐํ•œ ๋ฆฌ์•กํŠธ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ๋กœ๊ทธ์ธ ํ•˜๋“œ์ฝ”๋”ฉ

by ICanDoHee 2023. 8. 2.

์•ˆ๋…•ํ•˜์„ธ์š”?

 

๋ฆฌ์•กํŠธ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์›น ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๊ณ  ์žˆ๋Š”๋ฐ์š”. ๊ฐœ๋ฐœ ๊ฒฝํ—˜์ด ์ฒ˜์Œ์ธ์ง€๋ผ ํŒ€์›๋ถ„๋“ค๊ป˜ ๋„ˆ๋ฌด๋‚˜ ์‹ ์„ธ๋ฅผ ์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค..

์ œ๊ฐ€ ์˜ค๋Š˜ ์ด์•ผ๊ธฐ ํ•˜๊ณ ์ž ํ•˜๋Š” ๊ฒƒ์€, ๋กœ๊ทธ์ธ ํ•˜๋“œ์ฝ”๋”ฉ์„ ํ•˜๋Š” ๊ณผ์ •์ธ๋ฐ์š”.. ์ •๋ง ์‰ฌ์šด ๊ฑฐ์ง€๋งŒ ์ €์—๊ฒŒ๋Š” ์–ด๋ ค์› ๋˜,, ๊ทธ๋ž˜์„œ ์ดํ‹€์ด๋‚˜ ํ•ด๊ฒฐํ•˜์ง€ ๋ชปํ–ˆ๋˜ ๊ฑด๋ฐ ๋“œ๋””์–ด ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค.

 

์ˆ˜ํ–‰ํ•ด์•ผ ํ•  ๊ณผ์ œ: ๋กœ๊ทธ์ธ ์ „, ํ›„์˜ ์ƒํƒœ์— ๋”ฐ๋ผ ํ—ค๋”๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ๊ฒƒ. ๋กœ๊ทธ์ธ ์ „์ผ ๊ฒฝ์šฐ, "๋กœ๊ทธ์ธ" ํ…์ŠคํŠธ ๋„์šฐ๊ณ  ํด๋ฆญํ•˜๋ฉด ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€๋กœ ๋„˜์–ด๊ฐ€๊ธฐ /  ๋กœ๊ทธ์ธ์„ ์™„๋ฃŒํ–ˆ์„ ๊ฒฝ์šฐ, ํ”„๋กœํ•„ ์•„์ด์ฝ˜๊ณผ ํ•จ๊ป˜ username์„ ๋„์›Œ์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค..

 

์ „์ž์˜ ๊ฒฝ์šฐ ์ˆ˜์›”ํ–ˆ์ง€๋งŒ, ํ›„์ž์—์„œ ๋งŽ์€ ์‹œ๊ฐ„์ด ๊ฑธ๋ ธ์Šต๋‹ˆ๋‹ค.

๊ฒฐ๊ณผ ํ™”๋ฉด

 

์ผ๋‹จ, username์— ๊ฐ’์ด ๋„˜์–ด์˜ฌ ๊ฒฝ์šฐ๋ฅผ '๋กœ๊ทธ์ธ์ด ๋œ ์ƒํƒœ'๋กœ ์ธ์ง€ํ•˜๊ฒŒ ํ•˜์—ฌ LoginComponent๋ฅผ ๋„์›๋‹ˆ๋‹ค. ๋„˜์–ด์˜ค์ง€ ์•Š์œผ๋ฉด(null) NotLoginComponent๋ฅผ ๋„์›๋‹ˆ๋‹ค.

//Header.tsx

const [user, setUser] = useState<LoginProps | null>(null);

{/*๋‚˜๋จธ์ง€ ์ฝ”๋“œ๋“ค*/}

{user !== null ? (
          <LoginComponent user={user} onClick={handleLoginClick} />
        ) : (
          <H.LogoutText><NotLoginComponent onClick={handleLoginClick} /></H.LogoutText>
        )}

 

์ฒ˜์Œ์—๋Š” ๋„ˆ๋ฌด ์–ด๋ ต๊ฒŒ ์ƒ๊ฐํ•ด์„œ, recoil ๋ถ€๋ถ„์˜ LoginState๋‚˜ AuthProvider๋ฅผ ๊ณ ์ณค์—ˆ๋Š”๋ฐ์š”.. ์‚ฌ์‹ค ํ•ด๊ฒฐ๋ฐฉ๋ฒ•์€ ๋„ˆ๋ฌด ๊ฐ„๋‹จํ–ˆ์Šต๋‹ˆ๋‹ค!

 

๊ทธ๋ƒฅ ํ—ค๋”๋ฅผ ์ •์˜ํ•œ ๋ถ€๋ถ„์— LoginProps๋ฅผ ๋„ฃ์–ด์ฃผ๊ณ  ์ž„์‹œ username๊ณผ password๋ฅผ ์ง€์ •ํ•ด์ค๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ธฐ์กด์˜ ๋กœ๊ทธ์ธ ๋ฒ„ํŠผ์ด ์•„๋‹Œ, ์ž„์‹œ ๋กœ๊ทธ์ธ ๋ฒ„ํŠผ์„ ๋งŒ๋“ค์–ด์„œ handelsubmit ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด์ค๋‹ˆ๋‹ค. 

const testUser: LoginProps = {
      username: 'testuser',
      password: 'testpassword',
  };

์‹ค์ œ ๋กœ๊ทธ์ธ์„ ๊ตฌํ˜„ํ•œ ๋ฒ„ํŠผ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ด์œ ๋Š”, ์‹ค์ œ ๊ตฌํ˜„ํ•ด๋‘์—ˆ๋˜ ๋กœ๊ทธ์ธ ๋กœ์ง์€ ๋” ๋ณต์žกํ•˜๊ธฐ ๋•Œ๋ฌธ์—, '๋กœ๊ทธ์ธ ์ƒํƒœ๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด' ๊ฑฐ์ณ์•ผ ํ•˜๋Š” ๊ด€๋ฌธ์ด ๋งŽ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ธฐ์— ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ž„์‹œ ๋กœ๊ทธ์ธ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด setUser๋ฅผ ์ธ์ง€ํ•˜์—ฌ, username์— null์ด ์•„๋‹Œ ๊ฐ’์ด ๋“ค์–ด์˜ค๋„๋ก ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 const handleLoginSimulation = () => {
        // ํ…Œ์ŠคํŠธ์šฉ ์‚ฌ์šฉ์ž ์ •๋ณด๋กœ ๋กœ๊ทธ์ธ ์‹œ๋ฎฌ๋ ˆ์ด์…˜
        setUser(testUser);
    };

    const handleLogoutSimulation = () => {
        // ๋กœ๊ทธ์•„์›ƒ ์‹œ๋ฎฌ๋ ˆ์ด์…˜
        setUser(null);
    };

 

๊ทธ๋ฆฌ๊ณ  ๋‚˜์„œ button Component๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

<LoginComponent user={user} onClick={handleLoginClick} />
        ) : (
          <H.LogoutText><NotLoginComponent onClick={handleLoginClick} /></H.LogoutText>
        )}
        <button onClick={handleLoginSimulation}>๋กœ๊ทธ์ธ ์‹œ๋ฎฌ๋ ˆ์ด์…˜</button>
            <button onClick={handleLogoutSimulation}>๋กœ๊ทธ์•„์›ƒ ์‹œ๋ฎฌ๋ ˆ์ด์…˜</button>

 

์ด๋ ‡๊ฒŒ ์‹คํ–‰ํ•˜๋ฉด ๋กœ๊ทธ์ธ ์ƒํƒœ๋ฅผ ํ•˜๋“œ์ฝ”๋”ฉ์„ ํ†ตํ•ด ๋งŒ๋“œ์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!