Nihonbashi.js #5での登壇資料です。
react-reduxで追加されたHooks APIの良い所と使い方Nihonbashi.js #5
View Slide
Name 甲斐田 亮一Twitter @camcam_lemonCompany 日本事務器株式会社Skills TypeScript, React / FigmaOccupation フロントエンドエンジニア/デザイナー
[email protected]でついにHooks APIがstableなりましたuseStore3useDispatch2useSelector1※useActionは削除されました
useSelector- mapStateToPropsと同等の役割- メモライズ化させることが可能- reselectと一緒に使うこともできる- ReduxのStoreにアクセスして値を取得する
連想配列やネストしたオブジェクトでなければreact-reduxのshallowEqualで比較可能Hooksのdeps方式ではなくReact.memo, shouldComponentUpdateと同じ方式- メモライズ化は関数の第2引数で行う第2型引数は第1引数の関数が返却する型第1型引数はStoreの型- 型付けは2つの型引数で行う
useDispatch- mapDispatchToPropsと同等の役割- メモライズ化はuseCallbackで別途させる必要あり- Reduxにアクションを通知するdispatch関数を返す
depsにはdispatch関数も渡そう不要なレンダリングを避けるためにはuseCallbackによるメモライズ化が必須- useCallbackとセットで使うことが多い- useDispatchはdispatchするための関数を返すだけ
useStore- Providerに渡しているstoreを取得する- あまり使うべきHooksではない¥- reducerの再作成が必要な場面で使う
react-reduxのHooksで何が嬉しいのか- HoCからの完全脱却- TypeScriptの型周りの煩わしさからの解放- custom hooksのデメリットがなくなった- 圧倒的にconnectしやすい
custom hooksとは- コンポーネントの外に出されたhooksAPIを使っている関数- custom hooks内の状態や副作用は分離してる複数回呼び出しても共有されることはない- 関数名は`use`で始めるのが原則
おもな用途再利用可能にする3ロジックの分離2一連の手続きをまとめる1
デメリットって?
引数と型付け地獄引数と型付け地獄
アプリケーションに依存したcustom hooksは引数がやばくなるContext APIで回避はできるけども...Class Componentの方が自然に書ける
useSelectorとuseDispatchで書き直してみる
useSelectorとuseDispatchで書き直してみる直接書けるようになった直接書けるようになった
- custom hooksとの相性がとても良い- Container Componentの作成がしやすくなった- mapDispatchToProps => useDispatch- mapStateToProps => useSelectorまとめ
ご静聴ありがとうございました!