본문 바로가기
노마드코더/REACT 크롬 앱

4. LocalStorage Username

by 갱생angel 2024. 1. 24.

<추가 사항>

※localStorage로 username 저장(setItem), 삭제(removeItem), 불러오기(getItem)

※useEffect로 브라우저 렌더링 시, localStorage 값 저장 유무에 따라 로그인 상태 유지

 

componenet

  -Input.jsx

  -Button.jsx

module

  -Login.JSX

css

  -List.css

 

module - <Login.jsx>

import React, {useEffect, useState} from 'react'
import '../css/List.css'
import Input from '../component/Input'
import Button from '../component/Button'

function Login() {
  const checkUsername = localStorage.getItem('username') //저장된 localStorage 값 지정

  const [loginValue, setLoginValue] = useState(checkUsername) //저장된 localStorage 값을 초기값으로 지정
  const [loginBool, setLoginBool] = useState(true)

  const onChangeLogin = event => {
    setLoginValue(event.target.value)
  }

  const handleLogin = event => {
    event.preventDefault()
    setLoginBool(false)
    localStorage.setItem('username', loginValue) //username을 localStorage에 저장
  }

  const handleLogout = () => {
    setLoginBool(true)
    setLoginValue('')
    localStorage.removeItem('username') //username을 localStorage에 삭제
  }
  
  useEffect(() => { //localStorage 값 저장 유무에 따라 렌더링 될 때마다 true, false 상태 지정
    if (checkUsername === null) { 
      setLoginBool(true)
    } else {
      setLoginBool(false)
    }
  }, [checkUsername])

  return (
    <div>
      {loginBool ? (
        <div>
          <form className="loginDiv" onSubmit={handleLogin}>
            <Input
              type={'text'}
              value={loginValue || ''}
              onChange={onChangeLogin}
              maxLength={15}
            />
            <Button className={'loginButton'} name={'Login'} />
          </form>
        </div>
      ) : (
        <div className="loginDiv">
          <h1>Hello {loginValue}</h1>
          <Button className={'loginButton'} name={'Logout'} onClick={handleLogout} />
        </div>
      )}
    </div>
  )
}

export default Login

 

'노마드코더 > REACT 크롬 앱' 카테고리의 다른 글

6. Background Image  (0) 2024.01.27
5. Clock  (0) 2024.01.25
3. Getting Username  (0) 2024.01.24
2. Form Submission  (0) 2024.01.24
1. Input Values  (0) 2024.01.24