🌀
RecoilのGetting StartedをJotaiに移植してみた
Recoil版
RecoilのGetting Startedにシンプルなデモがあります。
import {
RecoilRoot,
atom,
selector,
useRecoilState,
useRecoilValue
} from "recoil";
const textState = atom({
key: "textState", // unique ID (with respect to other atoms/selectors)
default: "" // default value (aka initial value)
});
function TextInput() {
const [text, setText] = useRecoilState(textState);
return (
<div>
<input
type="text"
value={text}
onChange={(event) => {
setText(event.target.value);
}}
/>
<br />
Echo: {text}
</div>
);
}
const charCountState = selector({
key: "charCountState", // unique ID (with respect to other atoms/selectors)
get: ({ get }) => {
const text = get(textState);
return text.length;
}
});
function CharacterCount() {
const count = useRecoilValue(charCountState);
return <>Character Count: {count}</>;
}
function CharacterCounter() {
return (
<div>
<TextInput />
<CharacterCount />
</div>
);
}
function App() {
return (
<RecoilRoot>
<CharacterCounter />
</RecoilRoot>
);
}
export default App;
Jotai版
同じものをjotaiで書き直してみました。
import { atom, useAtom } from "jotai";
const textAtom = atom("");
function TextInput() {
const [text, setText] = useAtom(textAtom);
return (
<div>
<input
type="text"
value={text}
onChange={(event) => {
setText(event.target.value);
}}
/>
<br />
Echo: {text}
</div>
);
}
const charCountAtom = atom((get) => {
const text = get(textAtom);
return text.length;
});
function CharacterCount() {
const [count] = useAtom(charCountAtom);
return <>Character Count: {count}</>;
}
function CharacterCounter() {
return (
<div>
<TextInput />
<CharacterCount />
</div>
);
}
function App() {
return (
<>
<CharacterCounter />
</>
);
}
export default App;
Discussion