부모트리에 RecoilRoot가 필요, 루트 컴포넌트가 가장 최적이다.
import React from 'react';
import {
RecoilRoot,
atom,
selector,
useRecoilState,
useRecoilValue,
} from 'recoil';
function App() {
return (
<RecoilRoot>
<CharacterCounter />
</RecoilRoot>
);
}
key
로 구분된다.atom 생성
const textState = atom({
key: 'textState', // unique ID (with respect to other atoms/selectors)
default: '', // default value (aka initial value)
});
atom읽고 쓰기- useRecoilState()
function CharacterCounter() {
return (
<div>
<TextInput />
<CharacterCount />
</div>
);
}
function TextInput() {
const [text, setText] = useRecoilState(textState);
const onChange = (event) => {
setText(event.target.value);
};
return (
<div>
<input type="text" value={text} onChange={onChange} />
<br />
Echo: {text}
</div>
);
}
위에서 선언한 textState를 구독하여 사용한다.
전역상태 (atoms, selector)
를 get/set 하기 위해서 Recoil에서 제공하는 훅들을 사용한다.
크게 다음 4가지가 사용된다.
useRecoilState()
가장 기본적인 형태, useState()와 비슷하다.
useRecoilValue()
전역 상태의 state 상태 값만을 반환한다.
useSetRecoilState()
전역 상태의 setter 함수만을 반환한다.
useResetRecoilState()
전역 상태를 default(초기값)으로 리셋하기 위해서 사용한다. reset한 default값이 반환된다.
const charCountState = selector({
key: 'charCountState',
get: ({get}) => {
const text = get(textState);
return text.length;
},
});
그러면 이후에 useRecoilValue() 훅을 사용하여 charCountState 값을 읽을 수 있다.
fucntion CharactorCount(){
const count = useRecoilValue(charCountState);
return <React.Fragment>CHARACTOR cOUNT:{count}</React.Fragment>