const fontSizeState = atom<number>({
key: "fontSizeState",
default: 16,
});
function FontButton() {
const [fontSize, setFontSize] = useRecoilState(fontSizeState);
return (
<button onClick={() => setFontSize((size) => size + 1)} style={{fontSize}}>
Click to Enlarge
</button>
);
}
// 버튼을 누를때마다 글자 크기가 1씩 커짐
function Text() {
const [fontSize, setFontSize] = useRecoilState(fontSizeState);
return <p style={{fontSize}}>This text will increase in size too.</p>;
}
const fontSizeLabelState = selector<React.CSSProperties>({
key: 'fontSizeLabelState',
// get은 fontSizeState을 받아 글자 크기를 출력으로 반환하는 순수함수
get: ({get}) => {
const fontSize = get(fontSizeState);
const unit = 'px';
return `${fontSize}${unit}`;
},
});
function FontButton() {
const [fontSize, setFontSize] = useRecoilState(fontSizeState);
const fontSizeLabel = useRecoilValue(fontSizeLabelState);
return (
<>
<div>Current font size: ${fontSizeLabel}</div>
<button onClick={setFontSize(fontSize + 1)} style={{fontSize}}>
Click to Enlarge
</button>
</>
);
}
React가 설치된 곳에서 Recoil 사용 가능
다음 코드를 사용해 import
ES5 미만 코드에서는 호환성 문제 발생
npm install recoil
<script src="https://cdn.jsdelivr.net/npm/recoil@0.0.11/umd/recoil.production.js"></script>
{
"plugins": ["react-hooks"],
"rules": {
"react-hooks/rules-of-hooks": "error",
"react-hooks/exhaustive-deps": [
"warn",
// 이부분 추가
// 전달된 종석성이 잘못됬을 때 경고 표시
{
"additionalHooks": "useRecoilCallback"
}
]
}
}
import React from 'react';
import {
RecoilRoot,
atom,
selector,
useRecoilState,
useRecoilValue,
} from 'recoil';
function App() {
return (
<RecoilRoot>
<CharacterCounter />
</RecoilRoot>
);
}