@shimehituzi - 3y
atom
を用いて state
を保存します
useRecoilState
を使うと useState
と同じ感覚で扱えますuseRecoilValue
を使うと値のみ取得できますselector
は他の state
から計算可能な値を保存しますselector
は get
で取得した値を依存関係に加えその値が更新されると selector
の値も更新されますpages/index.tsx
1import { NextPage } from 'next'2import { useRecoilState, useRecoilValue } from 'recoil'3import { textState, lengthSelector } from '../src/state'45const Home: NextPage = () => {6 const [text, setText] = useRecoilState(textState)7 const length = useRecoilValue(lengthSelector)89 return (10 <>11 <input type="text" value={text} onChange={e => setText(e.target.value)}/>12 <p>text length: {length}</p>13 </>14 )15}
src/state.ts
1import { atom, selector } from 'recoil'23export const textState = atom<string>({4 key: 'textState',5 default: '',6})78export const lengthSelector = selector<number>({9 key: 'lengthSelector',10 get: ({get}) => {11 const text = get(textState)12 return text.length13 }14})