const [state, setState] = useState("")
<input value={state} onChange={(event) => setState(event.target.value)}/>
こうかきたい
<input value={state} onChange={setState}/>
value を取得する方法を最初に指定できて欲しい
デフォルト値は event から value を取り出すものだと良い
自作するとその関数を毎回書かないといけない手間はあるけど state が複数ある場合はそういう hook を作っておけば楽なので作ってみる
const useState2 = (init, selector) => {
const [state, setState] = useState(init)
const toStateValue = selector ?? event => event.target.value
return [state, (...a) => setState(toStateValue(...a))]
}
const [state, setState] = useState2("")
<input value={state} onChange={setState} />
これで単純に入力値を state に同期してくれるだけの input を複数配置するのが楽になった
けどなんか見覚えがある
useReducer と同じだった
const [state, setState] = useReducer((state, action) => {
return action.target.value
}, "")
<input value={state} onChange={setState}/>
action がよく使われる type を持つオブジェクトにならず value そのものだけだけど 単純に state を置き換えるだけだからこれで十分
忘れた頃に使い道が出てくる useReducer