ReactのContextAPIとHooksを簡単に実装して紹介
スライド内のリンク Context API https://kurosame-th.hatenadiary.com/entry/2018/11/05/193908
React Hooks https://kurosame-th.hatenadiary.com/entry/2018/11/07/193117
React の新機能を紹介2018年11月9日
View Slide
React 会という勉強会に参加してきましたhttps://react-kai.connpass.com/event/102286
React の新機能についての話が多かったのですが、今回は 2 つやばいやつを紹介します
Context API【やばさレベル ★】- v16.3 から追加された機能- React のみでいい感じの State 管理ができる- State 管理に関して Redux とは別の選択肢ができただけと思って良い
State の流れを簡単におさらい【前提】・ファイル名やラジオボタンの状態(State)は保持しておきたい・ファイル名はモーダル1とモーダル2で使いまわしたい
ファイル名はどのコンポーネントで持つのが良いでしょうか?
GrandChild コンポーネントに持つ場合お互いのコンポーネントを把握しているのは、Parent のみよって、Parent コンポーネントを介してファイル名を渡す必要がある
Parent コンポーネントに持つ場合Parent コンポーネントにモーダル1とモーダル2で使うファイル名を持つ設計がベスト!
Context API を使うとどうなるのか
こうなります
簡単なコードを書きましたhttps://kurosame-th.hatenadiary.com/entry/2018/11/05/193908
Context API 考察- Redux でやってたことはある程度、実現できそう- 小規模システムであれば Context API は良いが、大規模システムだと辛そう- Redux 覚えるより Context API の方が遥かに簡単
React Hooks【やばさレベル ★★★★★★★★】- Class Component ではなく、Function Component になる- Function Component が State の操作やライフサイクル関数を持てる先程のContext API の例だと Parent が Class Component で Child と Grandchild が FunctionComponent ですhttps://kurosame-th.hatenadiary.com/entry/2018/11/05/193908
React Hooks かなり盛り上がってる!https://github.com/reactjs/rfcs/pull/68
React のエコシステム達も盛り上がってる!
なぜこんなに盛り上がっているのか- React Hooks 使って書こう!- 今まで Class Component で書かれた React や エコシステムのライブラリを全て Hooks で書き直すのか- React Hooks に対応しなかったライブラリは取り残される感。。など
簡単なコードを書きましたhttps://kurosame-th.hatenadiary.com/entry/2018/11/07/193117
無くなる可能性があるもの- HOC高階関数のコンポーネント版みたいな- RecomposeHOC を作るためのUtility
無くなる可能性があるもの2- Class ComponentJS から class が消えるFunction Component になる- Stateless ComponentFunction Component に置き換わる
大事なこと- 過去 Class Component で書かれたComponent 全てをHooks で書き直すという話は無い- 先程のコード例にもあったように Class Component とFunction Component を共存させることは可能- つまり、Hooks へは段階的に移行可能
大事なこと2- Hooks を利用した Function Component にすることで、再利用しやすく分離しやすい Component を作れる- React を使う上で Class とか関数とか HOC とか使い分けなくても、関数だけでいけるhttps://medium.com/@dan_abramov/making-sense-of-react-hooks-fdbde8803889
その他も新機能が色々追加されます- Suspense- Time Slicingetc...React コンポーネントの非同期レンダリング(React Fiber)が採用されてから、今まで出来なかったことが色々出来るようになってきた!
今やるべきこと
- Context APIReact で規模の小さいシステムを作る際に検討- React Hooksまだ提案レベルでこの先仕様は大きく変わる可能性が高いので、プロダクション導入はまだ先ただし、React 及び エコシステムは Hooks で書き直される可能性が高いので、情報収集くらいはしておいた方が良い
さいごに
「うちは Vue.js なので関係ないですねー」というあなた!
残念なお知らせです
https://github.com/yyx990803/vue-hooks
Vue.js 作者の Evan 氏が実験的にReact Hooks を Vue.js で実装しています
Vue.js は React の良い機能は(少しアレンジして)採用すると思うので、将来プロダクションで使われだす前に色々 Hooks周りを知っておくと良いと思います