📁recoil-todo-app 폴더 만들기
📥npx create-react-app ./ 으로 리액트 설치하기
npm run start로 리액트 앱 실행하기
필요없는 부분 지우고

todo 앱에 필요한 값을 담아주기 위해 원래는 이렇게 해서
default 값은 [ ] 이거임
todoListState 다른 곳에서도 사용하니까 export로 내보내기🥏
이젠 App.js 에서 state 필요없으니 삭제하기👋
이러한 todo 앱을 만들건데 input에 입력하고 Add 버튼 누르면
👩🦱App.js( 부모 ), 👩TodoItemCreator.js( 자녀 )

여기서 타이핑한 값을 TodoItemCreator 컴포넌트에서만 기억해주고 싶으면❓
⌨타이핑 하려고 하면 타이핑이 안 되는건 왜 그러는 걸까❓
여기서 e.target이 뭐지❓
이젠 타이핑 잘 되는 걸 볼 수 있음👀
button 태그 안에 onClick 넣어주고 addItem 이라는 함수 만들기

여기서 해줄거임
todoListState를 업데이트 해주는 setter 함수만 필요⭕
useSetRecoilState( 이 안에 recoilState를 넣어줘야 함 )
#️⃣유니크한 id 주기 위해 따로 만듦
...oldTodoList : 원래 있는 리스트들
text는 input에 타이핑한 값이 들어가야하므로 inputValue ❗
작성했던 밥먹기 지워야하니까 setInputValue 이용해서
이렇게 지워주면 됨
여기 있는 이 값을
여기로 가져오고 싶으면 어떻게 해야할까❓
값만 가져올 땐 useRecoilValue 하면 됨❗
🗺 map 메서드 써서 순회
이부분을 위해
components 폴더 안에 TodoItem.js를 만들어줄 것
만들어준 TodoItem 컴포넌트 map 메서드 안에 넣어주고
input 2개랑 버튼 하나 만들기
운동하기 input에 입력하고 Add 버튼 누르면 위처럼 생성됨
여기서 올바른 값을 내려주고 있음
item 받아와서 value 안에 item.text 넣어주면 됨
잘 나오는 걸 확인할 수 있음👀
✅checked={ item.isComplete } 하면 체크된 상태로 나옴


위에서 만들어준 함수를 집어넣고 ( 이 안에 첫번째로 들어가는 게 arr )
✍arr : 현재의 모든 TodoList를 넣어줄 것
arr 필요하다고 했으니 todoList 넣어주고
그 담은 index 넣어줘야함
이 index를 구하려고 하는 것
☝findIndex : 첫번째로 찾은 인덱스를 리턴🔁






저걸 삭제하면 해당 인덱스 1번 저부분이 삭제되는 것



❌누르면 해당 리스트 삭제되는 걸 확인할 수 있음👀
밥먹기 하고 Add 눌러서 추가하면 수정이 안 됨

타이핑 잘 되는 걸 확인할 수 있음👀
atom 하나 더 만들기
저 두개 의존해서 필터링 되는 값들만 보여줄거라 selector 사용할 것🧐
get 사용, todoListState 배열 리스트를 list 안에 넣어둔거임
All로 해놨으면
Show All 이고
이렇게 세가지 조건으로 줄 것



여기 값들을 보여주고 싶음
이부분 부터 만들어보자❗
components 폴더 안에 TodoListFilters.js 파일을 만들고
TodoListFilters.js 파일 만들었으니까
잘 뜨는 걸 확인할 수 있음👀



🖱Show Uncompleted 옵션 클릭했을 경우
왜냐, 첨에 새로고침 했을 때 All로 나와야하기 때문❗
새로고침 해도 All 됨

이젠 선택한 옵션이 잘 바뀌는 걸 확인할 수 있음👀
All로 했다가 input에 '밥먹기' '운동하기' '공부하기' 입력하고





다 잘 되는 걸 확인할 수 있음👀
현재 todoListState에 의존하고 있음🧱
🔑key는 관습적으로 이렇게 많이들 함 ( 유니크한 값을 넣어주면 됨 )
get을 이용해서 todoListState의 RecoilValue를 가져올거임



filter 이용해서 item이 isComplete 된 것만 걸러줌
이건 Total items ➖ Items completed = Items not completed 이렇게 하면 나옴

아니면 체크된 리스트 / 리스트의 전체 길이 해주면 됨
이럴 땐 객체로 리턴하기
똑같으니까 이렇게 수정
그리고 외부에서 쓸거니까 export로 내보내기🥏
🤓todoListStatesState를 가져와서 사용해야하므로 이걸 위한 컴포넌트도 만들어주기
이 위에서 가져온담에 화면에 보여줄 것
rafce 해서 함수형 컴포넌트 자동 생성하기
리턴할 때 이걸 리턴하니까
이렇게 해주면 됨

나머진 잘 됨, 저부분만 수정할 것 ( 퍼센트로 % )
이젠 다 잘 되는 걸 확인할 수 있음🥳selector는 기본적으로 값을 자체적으로 캐싱함
만약, 입력된 적 있는 값이라면 그 값을 기억하고🧠
🔄이 값이 다시 호출되면 이전에 캐싱된 결과를
바로 보여주기에 비동기 데이터를 다루는 측면에서 유리함📢
유저 데이터 같은 데이터➡애플리케이션 만들 때
많은 컴포넌트에서 사용되기에 전역 상태로 관리하면 좋음👍
그래서 유저 데이터를 DB 에서 가져올 때
Selector 이용해서 전역 상태에 넣어주겠음🔥
🗣데이터 요청해서 가져온 담에 Selector에다가 넣어줄 것


📥npm install axios로 설치하기

export로 내보내주기🥏
UserAtoms.js 안에 있는 currentUserNameQuery 값 가져오기➡useRecoilValue
{userName}만 가져오면 됨✌
🔄새로고침해도 잘 나오는 걸 확인할 수 있음👀