import { atom } from 'recoil';
    export const isLoggedInState = atom({
      key: 'isLoggedInState',
      default: false, //초기 값
    });
    import { selector } from 'recoil';
    import { isLoggedInState } from './atoms';
    export const userNameSelector = selector({
      key: 'userNameSelector',
      get: ({ get }) => {
        const isLoggedIn = get(isLoggedInState);
        return isLoggedIn ? '홍길동' : '방문자';
      },
    });
    import { useRecoilState } from 'recoil';
    import { isLoggedInState } from './atoms';
    function LoginButton() {
      const [isLoggedIn, setLoggedIn] = useRecoilState(isLoggedInState);
      const handleClick = () => {
        setLoggedIn(!isLoggedIn); // 상태 업데이트
      };
      return (
        <button onClick={handleClick}>
          {isLoggedIn ? 'Logout' : 'Login'}
        </button>
      );
    }
    import { useRecoilValue } from 'recoil';
    import { userNameSelector } from './selectors';
    function WelcomeMessage() {
      const userName = useRecoilValue(userNameSelector);
      return <p>안녕하세요! {userName}님!</p>;
    }
☞ 'useRecoilState'와 'useRecoilValue'를 통해 Recoil을 사용하면, 전역 상태를 쉽게 읽고 업데이트할 수 있다.
    import { useRecoilState, useRecoilValue } from 'recoil';
    import { isLoggedInState, userNameSelector } from './atoms';
    function UserInfo() {
      const [isLoggedIn, setLoggedIn] = useRecoilState(isLoggedInState);
      const userName = useRecoilValue(userNameSelector);
      return (
        <div>
          <p>{isLoggedIn ? '안녕하세요 ${userName}님!' : '로그인 해주세요'}</p>
          <button onClick={() => setLoggedIn(!isLoggedIn)}>
            {isLoggedIn ? 'Logout' : 'Login'}
          </button>
        </div>
      );
    }
오늘의 한줄평 : 와, 리덕스보다 쉽지만, 튜터님께 들은대로 주의해서 필요할 곳 만 써야겠다!