π΄ Introduction
βͺ λ©νκ° μΆμν 리μ‘νΈ μνκ΄λ¦¬ λΌμ΄λΈλ¬λ¦¬
βͺ 2κ° μ΄μμ μμ μ»΄ν¬λνΈλ‘ μνλ₯Ό μ λ¬ν λ μ μ©νλ€
π Official
μ€μΉ | Recoil
NPM
recoiljs.org
π‘ Install

react i recoil
π’ Usage
βͺ default

// [ index.tsx ]
import { RecoilRoot } from "recoil";
const root = ReactDOM.createRoot(document.getElementById("root") as HTMLElement);
root.render(
<RecoilRoot>
<App />
</RecoilRoot>
);

// [ atoms.ts ] : μν κ΄λ¦¬ store
import { atom } from "recoil";
export const isDarkAtom = atom({
key: "isDark",
default: true,
});

// [ Set Atom Component ]
import { useSetRecoilState } from "recoil";
import { isDarkAtom } from "../atoms";
const Coins = () => {
const setDarkAtom = useSetRecoilState(isDarkAtom);
const toggleDarkAtom = () => setDarkAtom((prev) => !prev);
return (
<>
<button onClick={toggleAtom}>Button</button>
</>
);
}

// [ Get Atom Component ]
import { useRecoilValue } from "recoil";
import { isDarkAtom } from "../atoms";
const Chart = () => {
const isDark = useRecoilValue(isDarkAtom);
return (
<span>{isDark}</span>
);
}
βͺ selector

// [ atom ]
import { atom, selector } from "recoil";
export const minuteState = atom({
key: "minutes",
default: 0,
});
export const hourSelector = selector<number>({
key: "hours",
get: ({ get }) => {
const minutes = get(minuteState);
return minutes / 60;
},
set: ({ set }, newValue) => {
const minutes = Number(newValue) * 60;
set(minuteState, minutes);
},
});

// [ App ]
import { useRecoilState } from "recoil";
import { hourSelector, minuteState } from "./atoms";
function App() {
const [minutes, setMinutes] = useRecoilState(minuteState);
const [hours, setHours] = useRecoilState(hourSelector);
const onMinutesChange = (event: React.FormEvent<HTMLInputElement>) => {
setMinutes(+event.currentTarget.value);
};
const onHoursChange = (event: React.FormEvent<HTMLInputElement>) => {
setHours(+event.currentTarget.value);
};
return (
<div>
<input value={minutes} onChange={onMinutesChange} type="number" placeholder="Minutes" />
<input onChange={onHoursChange} value={hours} type="number" placeholder="Hours" />
</div>
);
}
export default App;
'React > Library' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[ React ] react-router-dom (0) | 2022.07.31 |
---|---|
[ React ] react-helmet (0) | 2022.07.30 |
[ React ] apexchart (0) | 2022.07.30 |
[ React ] @tanstack/react-query (0) | 2022.07.30 |
[ React ] axios (0) | 2022.07.30 |