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>
);
}
오늘의 한줄평 : 와, 리덕스보다 쉽지만, 튜터님께 들은대로 주의해서 필요할 곳 만 써야겠다!