Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 백준 7579
- 백준
- 파이썬
- webpack
- 2156
- C언어로 쉽게 풀어쓴 자료구조
- 자료구조
- nodejs
- 공부시간측정어플
- X
- 백준 #7568번 #파이썬 #동적계획법
- 크롬 익스텐션
- Chrome Extension
- popup
- 디스코드 봇
- 갓생
- 크롬 확장자
- react
- discord.js
- TypeScript
- Message Passing
- content script
- 포도주시식
- background script
- supabase
- 동적계획법
- 프로그래머스 #정수삼각형 #동적계획법
- 캠스터디
Archives
- Today
- Total
히치키치
Recoil : 시작하기 본문
다음의 공식문서를 공부하며 작성한 내용입니다.
https://recoiljs.org/docs/introduction/getting-started/
[Getting Started | Recoil
Create React App
recoiljs.org](https://recoiljs.org/docs/introduction/getting-started/)
1. 프로젝트 생성
npx create-react-app recoil-docs
cd recoil-docs
2. recoil 패키지 설치
npm install recoil
3. RecoilRoot
- recoil state 사용할 컴포넌트의 상위를
Recoil Root
로 감쌈 - 모든 곳에서 recoil state 사용하기 위해 root 컴포넌트의 상위를
Recoil Root
로 감쌈
//App.js
import React from "react";
import { RecoilRoot } from "recoil";
function App() {
return (
<RecoilRoot>
<CharacterCounter />
</RecoilRoot>
);
}
export default App;
(여기서는 CharacterCounter
컴포넌트가 recoil state 사용함)
4. Atom
- state의 단위
- 해당 Atom의 state를 구독하는 컴포넌트에 의해 read와 write 가능
- Atom의 state가 update된 경우, 해당 atom를 구독하는 컴포넌트는 모두 업데이트된 결과에 따라 re-render됨에 따라 동일한 상태 공유함
key
: unique ID / 다른 atom, selector와 구별default
: intial value
//atom.js
import { atom } from "recoil";
export const textState = atom({
key: "textState",
default: "",
});
recoil state 구독하는 CharacterCounter
컴포넌트 생성
/CharacterCounter
폴더 내 관련 컴포넌트 생성
/CharacterCounter/index.js
import TextInput from "./textInput";
import CharacterCount from "./characterCount";
const CharacterCounter = () => {
return (
<>
<TextInput />
<CharacterCount />
</>
);
};
export default CharacterCounter;
/CharacterCounter/characterCount.js
const CharacterCount = () => {};
export default CharacterCount;
/CharacterCounter/textInput.js
const TextInput = () => {};
export default TextInput;
5. useRecoilState 사용해 atom의 state를 get과 set하기
useRecoilState
의 인자로 구독할 atom을 입력useRecoilState
hook은 해당 atom을 get과 set하는 것을 반환함
예시
const [text, setText] = useRecoilState(textState);
textState
이라는 atom 구독text
:textState
인 atom의 state를 getsetText
:textState
인 atom의 state를 set
/CharacterCounter/textInput.js
import { useRecoilState } from "recoil";
import { textState } from "../atom";
const TextInput = () => {
const [text, setText] = useRecoilState(textState);
const _handleTextInput = (e) => {
setText(e.target.value);
};
return (
<>
<input type="text" value={text} onChange={_handleTextInput} />
<br />
Echo: {text}
</>
);
};
export default TextInput;
만약 get과 set 중 한개만 필요한 경우
useRecoilValue
를 통해 atom의 state를 getuseSetRecoilState
을 통해 atom의 state를 set
6. select 사용해 atom의 state의 파생된 상태(derived state) 사용
get
프로퍼티 사용해 atom의 state에서 파생하여 변형한 것을 반환
/selector.js
import { selector } from "recoil";
import { textState } from "./atom";
export const charCountState = selector({
key: "charCountState",
get: ({ get }) => {
const text = get(textState);
return text.length;
},
});
charCountState
: textState
atom의 상태에서 파생된 state를 생성함charCountState
의 get 프로퍼티 : textState
atom의 상태를 get하고 이를 text
변수에 대입하고 text
변수의 길이 반환함
컴포넌트에서 select (파생된 상태) 사용하기
/CharacterCounter/characterCount.js
import { charCountState } from "../selector";
import { useRecoilState } from "recoil";
const CharacterCount = () => {
const count = useRecoilState(charCountState);
return <div> Character Count : {count}</div>;
};
export default CharacterCount;
'FE' 카테고리의 다른 글
Javascript 세미나 (0) | 2023.02.23 |
---|---|
[타입스크립트 핸드북] : 기본 타입 & 함수 (1) | 2022.09.21 |
[타입스크립트 핸드북] : 기본 타입 & 함수 (0) | 2022.09.20 |
Recoil : selector에서 비동기 로직 처리 (0) | 2022.07.08 |
Typescript : 객체 내 특정 string인 key값에 해당하는 value 가져오기 (0) | 2022.07.04 |
Comments