Submit Search
Upload
React Hooksでカスタムフックをつくろう
•
2 likes
•
4,640 views
Yoichi Toyota
Follow
React Hooksで実現できることをカスタムフックの作り方の実例を踏まえて紹介します。
Read less
Read more
Technology
Report
Share
Report
Share
1 of 31
Download now
Download to read offline
Recommended
GoによるWebアプリ開発のキホン
GoによるWebアプリ開発のキホン
Akihiko Horiuchi
とにかく分かりづらいTwelve-Factor Appの解説を試みる
とにかく分かりづらいTwelve-Factor Appの解説を試みる
Masatoshi Tada
AWSとオンプレミスを繋ぐときに知っておきたいルーティングの基礎知識(CCSI監修!)
AWSとオンプレミスを繋ぐときに知っておきたいルーティングの基礎知識(CCSI監修!)
Trainocate Japan, Ltd.
Python におけるドメイン駆動設計(戦術面)の勘どころ
Python におけるドメイン駆動設計(戦術面)の勘どころ
Junya Hayashi
バックアップと障害復旧から考えるOracle Database, MySQL, PostgreSQLの違い
バックアップと障害復旧から考えるOracle Database, MySQL, PostgreSQLの違い
Ryota Watabe
Google Cloud Platform で実現するプロダクションレディ マイクロサービス
Google Cloud Platform で実現するプロダクションレディ マイクロサービス
Google Cloud Platform - Japan
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
Atsushi Nakamura
【BS13】チーム開発がこんなにも快適に!コーディングもデバッグも GitHub 上で。 GitHub Codespaces で叶えられるシームレスな開発
【BS13】チーム開発がこんなにも快適に!コーディングもデバッグも GitHub 上で。 GitHub Codespaces で叶えられるシームレスな開発
日本マイクロソフト株式会社
Recommended
GoによるWebアプリ開発のキホン
GoによるWebアプリ開発のキホン
Akihiko Horiuchi
とにかく分かりづらいTwelve-Factor Appの解説を試みる
とにかく分かりづらいTwelve-Factor Appの解説を試みる
Masatoshi Tada
AWSとオンプレミスを繋ぐときに知っておきたいルーティングの基礎知識(CCSI監修!)
AWSとオンプレミスを繋ぐときに知っておきたいルーティングの基礎知識(CCSI監修!)
Trainocate Japan, Ltd.
Python におけるドメイン駆動設計(戦術面)の勘どころ
Python におけるドメイン駆動設計(戦術面)の勘どころ
Junya Hayashi
バックアップと障害復旧から考えるOracle Database, MySQL, PostgreSQLの違い
バックアップと障害復旧から考えるOracle Database, MySQL, PostgreSQLの違い
Ryota Watabe
Google Cloud Platform で実現するプロダクションレディ マイクロサービス
Google Cloud Platform で実現するプロダクションレディ マイクロサービス
Google Cloud Platform - Japan
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
Atsushi Nakamura
【BS13】チーム開発がこんなにも快適に!コーディングもデバッグも GitHub 上で。 GitHub Codespaces で叶えられるシームレスな開発
【BS13】チーム開発がこんなにも快適に!コーディングもデバッグも GitHub 上で。 GitHub Codespaces で叶えられるシームレスな開発
日本マイクロソフト株式会社
Kinesis + Elasticsearchでつくるさいきょうのログ分析基盤
Kinesis + Elasticsearchでつくるさいきょうのログ分析基盤
Amazon Web Services Japan
[Cloud OnAir] BigQuery の仕組みからベストプラクティスまでのご紹介 2018年9月6日 放送
[Cloud OnAir] BigQuery の仕組みからベストプラクティスまでのご紹介 2018年9月6日 放送
Google Cloud Platform - Japan
ソーシャルゲームのためのデータベース設計
ソーシャルゲームのためのデータベース設計
Yoshinori Matsunobu
Google Cloud で実践する SRE
Google Cloud で実践する SRE
Google Cloud Platform - Japan
KafkaとAWS Kinesisの比較
KafkaとAWS Kinesisの比較
Yoshiyasu SAEKI
.NET 7期待の新機能
.NET 7期待の新機能
TomomitsuKusaba
イミュータブルデータモデルの極意
イミュータブルデータモデルの極意
Yoshitaka Kawashima
比較サイトの検索改善(SPA から SSR に変換)
比較サイトの検索改善(SPA から SSR に変換)
gree_tech
大規模データ処理の定番OSS Hadoop / Spark 最新動向 - 2021秋 -(db tech showcase 2021 / ONLINE 発...
大規模データ処理の定番OSS Hadoop / Spark 最新動向 - 2021秋 -(db tech showcase 2021 / ONLINE 発...
NTT DATA Technology & Innovation
KubernetesのRBACを掘り下げてみる(Kubernetes Novice Tokyo #17 発表資料)
KubernetesのRBACを掘り下げてみる(Kubernetes Novice Tokyo #17 発表資料)
NTT DATA Technology & Innovation
PMBOKガイド7をアジャイル屋はどう迎え撃つか?
PMBOKガイド7をアジャイル屋はどう迎え撃つか?
豆寄席 (株式会社豆蔵)
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
Takuto Wada
20211109 JAWS-UG SRE keynotes
20211109 JAWS-UG SRE keynotes
Amazon Web Services Japan
DBスキーマもバージョン管理したい!
DBスキーマもバージョン管理したい!
kwatch
Azure Log Analytics 概要
Azure Log Analytics 概要
喜智 大井
コンテナDojo #4:VSCodeを使ったPodmanコンテナアプリ開発.pdf
コンテナDojo #4:VSCodeを使ったPodmanコンテナアプリ開発.pdf
Teruyoshi Matsushima
DevOpsにおけるAnsibleの立ち位置と使い所
DevOpsにおけるAnsibleの立ち位置と使い所
Hidetoshi Hirokawa
今から始めるUbuntu入門_202307.pdf
今から始めるUbuntu入門_202307.pdf
富士通クラウドテクノロジーズ株式会社
20180417 AWS White Belt Online Seminar クラウドジャーニー
20180417 AWS White Belt Online Seminar クラウドジャーニー
Amazon Web Services Japan
WayOfNoTrouble.pptx
WayOfNoTrouble.pptx
Daisuke Yamazaki
Testing react-native with storybook on web
Testing react-native with storybook on web
Jesse Katsumata
Storybook web-and-circleci
Storybook web-and-circleci
Jesse Katsumata
More Related Content
What's hot
Kinesis + Elasticsearchでつくるさいきょうのログ分析基盤
Kinesis + Elasticsearchでつくるさいきょうのログ分析基盤
Amazon Web Services Japan
[Cloud OnAir] BigQuery の仕組みからベストプラクティスまでのご紹介 2018年9月6日 放送
[Cloud OnAir] BigQuery の仕組みからベストプラクティスまでのご紹介 2018年9月6日 放送
Google Cloud Platform - Japan
ソーシャルゲームのためのデータベース設計
ソーシャルゲームのためのデータベース設計
Yoshinori Matsunobu
Google Cloud で実践する SRE
Google Cloud で実践する SRE
Google Cloud Platform - Japan
KafkaとAWS Kinesisの比較
KafkaとAWS Kinesisの比較
Yoshiyasu SAEKI
.NET 7期待の新機能
.NET 7期待の新機能
TomomitsuKusaba
イミュータブルデータモデルの極意
イミュータブルデータモデルの極意
Yoshitaka Kawashima
比較サイトの検索改善(SPA から SSR に変換)
比較サイトの検索改善(SPA から SSR に変換)
gree_tech
大規模データ処理の定番OSS Hadoop / Spark 最新動向 - 2021秋 -(db tech showcase 2021 / ONLINE 発...
大規模データ処理の定番OSS Hadoop / Spark 最新動向 - 2021秋 -(db tech showcase 2021 / ONLINE 発...
NTT DATA Technology & Innovation
KubernetesのRBACを掘り下げてみる(Kubernetes Novice Tokyo #17 発表資料)
KubernetesのRBACを掘り下げてみる(Kubernetes Novice Tokyo #17 発表資料)
NTT DATA Technology & Innovation
PMBOKガイド7をアジャイル屋はどう迎え撃つか?
PMBOKガイド7をアジャイル屋はどう迎え撃つか?
豆寄席 (株式会社豆蔵)
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
Takuto Wada
20211109 JAWS-UG SRE keynotes
20211109 JAWS-UG SRE keynotes
Amazon Web Services Japan
DBスキーマもバージョン管理したい!
DBスキーマもバージョン管理したい!
kwatch
Azure Log Analytics 概要
Azure Log Analytics 概要
喜智 大井
コンテナDojo #4:VSCodeを使ったPodmanコンテナアプリ開発.pdf
コンテナDojo #4:VSCodeを使ったPodmanコンテナアプリ開発.pdf
Teruyoshi Matsushima
DevOpsにおけるAnsibleの立ち位置と使い所
DevOpsにおけるAnsibleの立ち位置と使い所
Hidetoshi Hirokawa
今から始めるUbuntu入門_202307.pdf
今から始めるUbuntu入門_202307.pdf
富士通クラウドテクノロジーズ株式会社
20180417 AWS White Belt Online Seminar クラウドジャーニー
20180417 AWS White Belt Online Seminar クラウドジャーニー
Amazon Web Services Japan
WayOfNoTrouble.pptx
WayOfNoTrouble.pptx
Daisuke Yamazaki
What's hot
(20)
Kinesis + Elasticsearchでつくるさいきょうのログ分析基盤
Kinesis + Elasticsearchでつくるさいきょうのログ分析基盤
[Cloud OnAir] BigQuery の仕組みからベストプラクティスまでのご紹介 2018年9月6日 放送
[Cloud OnAir] BigQuery の仕組みからベストプラクティスまでのご紹介 2018年9月6日 放送
ソーシャルゲームのためのデータベース設計
ソーシャルゲームのためのデータベース設計
Google Cloud で実践する SRE
Google Cloud で実践する SRE
KafkaとAWS Kinesisの比較
KafkaとAWS Kinesisの比較
.NET 7期待の新機能
.NET 7期待の新機能
イミュータブルデータモデルの極意
イミュータブルデータモデルの極意
比較サイトの検索改善(SPA から SSR に変換)
比較サイトの検索改善(SPA から SSR に変換)
大規模データ処理の定番OSS Hadoop / Spark 最新動向 - 2021秋 -(db tech showcase 2021 / ONLINE 発...
大規模データ処理の定番OSS Hadoop / Spark 最新動向 - 2021秋 -(db tech showcase 2021 / ONLINE 発...
KubernetesのRBACを掘り下げてみる(Kubernetes Novice Tokyo #17 発表資料)
KubernetesのRBACを掘り下げてみる(Kubernetes Novice Tokyo #17 発表資料)
PMBOKガイド7をアジャイル屋はどう迎え撃つか?
PMBOKガイド7をアジャイル屋はどう迎え撃つか?
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
20211109 JAWS-UG SRE keynotes
20211109 JAWS-UG SRE keynotes
DBスキーマもバージョン管理したい!
DBスキーマもバージョン管理したい!
Azure Log Analytics 概要
Azure Log Analytics 概要
コンテナDojo #4:VSCodeを使ったPodmanコンテナアプリ開発.pdf
コンテナDojo #4:VSCodeを使ったPodmanコンテナアプリ開発.pdf
DevOpsにおけるAnsibleの立ち位置と使い所
DevOpsにおけるAnsibleの立ち位置と使い所
今から始めるUbuntu入門_202307.pdf
今から始めるUbuntu入門_202307.pdf
20180417 AWS White Belt Online Seminar クラウドジャーニー
20180417 AWS White Belt Online Seminar クラウドジャーニー
WayOfNoTrouble.pptx
WayOfNoTrouble.pptx
Similar to React Hooksでカスタムフックをつくろう
Testing react-native with storybook on web
Testing react-native with storybook on web
Jesse Katsumata
Storybook web-and-circleci
Storybook web-and-circleci
Jesse Katsumata
SYSTEMI勉強会まとめ資料(React基礎まとめ)
SYSTEMI勉強会まとめ資料(React基礎まとめ)
YoshikiWatanabe1
オブジェクト指向な人がRx swiftを試してみた
オブジェクト指向な人がRx swiftを試してみた
小林 弘明
SpringOne Platform 2016 報告会「A Lite Rx API for the JVM」/ 井口 貝 @ SmartNews, Inc.
SpringOne Platform 2016 報告会「A Lite Rx API for the JVM」/ 井口 貝 @ SmartNews, Inc.
SmartNews, Inc.
React を導入したフロントエンド開発
React を導入したフロントエンド開発
daisuke-a-matsui
Reactive programming with Apache Wicket
Reactive programming with Apache Wicket
Ryuhei Ishibashi
Similar to React Hooksでカスタムフックをつくろう
(7)
Testing react-native with storybook on web
Testing react-native with storybook on web
Storybook web-and-circleci
Storybook web-and-circleci
SYSTEMI勉強会まとめ資料(React基礎まとめ)
SYSTEMI勉強会まとめ資料(React基礎まとめ)
オブジェクト指向な人がRx swiftを試してみた
オブジェクト指向な人がRx swiftを試してみた
SpringOne Platform 2016 報告会「A Lite Rx API for the JVM」/ 井口 貝 @ SmartNews, Inc.
SpringOne Platform 2016 報告会「A Lite Rx API for the JVM」/ 井口 貝 @ SmartNews, Inc.
React を導入したフロントエンド開発
React を導入したフロントエンド開発
Reactive programming with Apache Wicket
Reactive programming with Apache Wicket
More from Yoichi Toyota
超フランクにスクラムの大事なことの話をする
超フランクにスクラムの大事なことの話をする
Yoichi Toyota
ジャワカレーをおいしく作る最後の一押し
ジャワカレーをおいしく作る最後の一押し
Yoichi Toyota
ライブラリを作る思考回路
ライブラリを作る思考回路
Yoichi Toyota
DynamoDB設計のちょっとした技
DynamoDB設計のちょっとした技
Yoichi Toyota
はじめてのDynamoDBスキーマ設計
はじめてのDynamoDBスキーマ設計
Yoichi Toyota
オブジェクト指向についてあまり知られていないこと
オブジェクト指向についてあまり知られていないこと
Yoichi Toyota
Ruby is comming ractor編
Ruby is comming ractor編
Yoichi Toyota
array.map(&:key)ってなんやねん
array.map(&:key)ってなんやねん
Yoichi Toyota
はじめてのPull Request
はじめてのPull Request
Yoichi Toyota
Railsの開発環境作るぞ
Railsの開発環境作るぞ
Yoichi Toyota
jqで極めるシェル芸の話
jqで極めるシェル芸の話
Yoichi Toyota
足し算をつくろう
足し算をつくろう
Yoichi Toyota
ActionCableのクライアントはRails外から利用できるのか
ActionCableのクライアントはRails外から利用できるのか
Yoichi Toyota
サーバーレスアプリケーションの作り方
サーバーレスアプリケーションの作り方
Yoichi Toyota
SPA時代のOGPとの戦い方
SPA時代のOGPとの戦い方
Yoichi Toyota
AWS WAFでらくらくファイアーウォール生活
AWS WAFでらくらくファイアーウォール生活
Yoichi Toyota
Docker in production
Docker in production
Yoichi Toyota
How to fight against “full scratch disease”
How to fight against “full scratch disease”
Yoichi Toyota
Amazon lexを触ってみた
Amazon lexを触ってみた
Yoichi Toyota
Forkwell Meetup #3 Productivity Engineering スポンサーLT - 株式会社エクストーン
Forkwell Meetup #3 Productivity Engineering スポンサーLT - 株式会社エクストーン
Yoichi Toyota
More from Yoichi Toyota
(20)
超フランクにスクラムの大事なことの話をする
超フランクにスクラムの大事なことの話をする
ジャワカレーをおいしく作る最後の一押し
ジャワカレーをおいしく作る最後の一押し
ライブラリを作る思考回路
ライブラリを作る思考回路
DynamoDB設計のちょっとした技
DynamoDB設計のちょっとした技
はじめてのDynamoDBスキーマ設計
はじめてのDynamoDBスキーマ設計
オブジェクト指向についてあまり知られていないこと
オブジェクト指向についてあまり知られていないこと
Ruby is comming ractor編
Ruby is comming ractor編
array.map(&:key)ってなんやねん
array.map(&:key)ってなんやねん
はじめてのPull Request
はじめてのPull Request
Railsの開発環境作るぞ
Railsの開発環境作るぞ
jqで極めるシェル芸の話
jqで極めるシェル芸の話
足し算をつくろう
足し算をつくろう
ActionCableのクライアントはRails外から利用できるのか
ActionCableのクライアントはRails外から利用できるのか
サーバーレスアプリケーションの作り方
サーバーレスアプリケーションの作り方
SPA時代のOGPとの戦い方
SPA時代のOGPとの戦い方
AWS WAFでらくらくファイアーウォール生活
AWS WAFでらくらくファイアーウォール生活
Docker in production
Docker in production
How to fight against “full scratch disease”
How to fight against “full scratch disease”
Amazon lexを触ってみた
Amazon lexを触ってみた
Forkwell Meetup #3 Productivity Engineering スポンサーLT - 株式会社エクストーン
Forkwell Meetup #3 Productivity Engineering スポンサーLT - 株式会社エクストーン
Recently uploaded
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
UEHARA, Tetsutaro
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
Yuki Kikuchi
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
Hiroki Ichikura
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
FumieNakayama
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成
Hiroshi Tomioka
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
sugiuralab
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
FumieNakayama
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
博三 太田
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
akihisamiyanaga1
Recently uploaded
(9)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版) 2024年4月作成
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
React Hooksでカスタムフックをつくろう
1.
React Hooksで カスタムフックを つくろう 株式会社エクストーン 豊田陽一
2.
今日のお話 ● React Hooksおさらい ●
React Hooksのうれしいところ ● カスタムフックをつくろう
3.
React Hooksのおさらい
4.
React Hooks ▰ 関数型コンポーネントのためのAPI ▰
React 16.8.0以降で利用可能 ▰ 関数型コンポーネント内からのみ利用可能
5.
関数型コンポーネント ▰ propsを引数に受け取り、Reactコン ポーネントを返す関数 ▰ stateやライフサイクルイベントを持たない ▰
Facebook的におすすめ ▰ 出来ることが少ないのでRedux等と組み合わせ て使われていた
6.
React Hooksで出来ること ▰ useState ▰
状態の保持・更新 ▰ useEffect ▰ ライフサイクルイベントの管理 ▰ マウント時 / 更新時 / アンマウント時 ▰ useContext ▰ コンテキストで管理している値の参照
7.
どうやって実現しているのか ▰ 関数型言語的なアプローチ ▰ コンポーネント毎にLinkedListを保持 ▰
useXXXを呼ぶたびにLinkedListの値を参照 し、値を返した上でポインタを進める ▰ useXXXがトップレベルでしか呼べない理 由がこれ ▰ render毎にuseXXXの呼び出す回数がズ レるとLinkedList内で参照される値が変わ るせい
8.
useStateの実現例 ▰ useState ▰ リスト内には状態とそれを更新する関数を持つ ▰
状態を更新する関数は、リスト内の情報を「新しい 値と、それを更新する新しい関数」に更新する ▰ 基本的にはどのフックAPIも似たような作りになっ ている
9.
React Hooksのうれしいところ
10.
関数型コンポーネントで出来るこ とが増えた ▰ 状態が持てる ▰ コンテキストの参照が出来る ▰
ライフサイクルの管理が出来る → クラス型コンポーネントと同等の機能が 実現できるようになった
11.
では無い!
12.
それやったら クラス型 使えばええねん
13.
そうではなく
14.
再利用の単位: コンポーネント ▰ 状態の保持 ▰
ライフサイクルによるロジック ▰ 複雑化しがち ▰ カプセル化 ▰ コンポーネントの保持している状態をコンポーネン ト外から参照できない
15.
再利用の単位: コンポーネント ▰ ロジックの値を参照したい場合には不 向き ▰
ex) ログイン中のユーザー名を取得する ▰ ex) ログイン状態を監視し、変更があった場合に コールバックを呼ぶ ▰ etc.
16.
再利用の単位: カスタムフック ▰ 関数 ▰
コンポーネント間で共通するロジックの 共有 ▰ useStateを利用することでステートフル にすることが出来る
17.
再利用の単位: カスタムフック ▰ 規約としてuseXXXという名前にする ▰
関数型コンポーネントと同様に、React Hooks APIをトップレベルでのみ呼び出 せる ▰ 他のカスタムフックを呼ぶことも可能
18.
本当に React Hooksで うれしいこと
19.
カスタムフックという 新しい 再利用の単位を 実現したこと
20.
カスタムフックを作ろう
21.
ログイン機能を作る ▰ やりたいこと ▰ IDとパスワードをサーバーに送るとログインが 出来る ▰
ログイン状態になるとユーザーのプロフィール 情報が取得出来る
22.
提供するAPI ▰ useSignIn ▰ ログイン機能 ▰
Provider ▰ コンテキストの値を提供するプロバイダ ▰ UserContext ▰ ユーザー情報を管理するコンテキスト
23.
useSignIn ログイン機能の提供
24.
useSignIn ▰ サインイン機能を実現 ▰ state:
ログイン状態 (ログイン前/通信中/ログ イン失敗/ログイン成功) ▰ errors: ログイン失敗時のエラー ▰ signIn: ログインAPIをリクエストする関数
25.
useSignInの利用イメージ const SignIn =
(props) => { const [state, error, signIn] = useSignIn() const { user } = useContext(UserContext) if (user) { return <></> } return <div> {error} <button onClick={signIn} disabled={state === ‘loading’}>Sign In</button> </div> } export default SignIn
26.
useSignInの実装 const useSignIn =
() => { const [state, setState] = useState('before_sign_in') const [errors, setErrors] = useState(null) const { user, setUser } = useContext(UserContext) const signIn = useCallback(() => { if (user !== null) { return } if (state === 'loading' || state === 'success') { return } if (state === 'waiting_callback') { firebase.auth().getRedirectResult().then((result) => { if (result.credential) { setState('loading') setUser(result.user) setState('success') } }).catch((error) => { setState('error') setErrors(error.code) }) setState('loading') } else { const provider = new firebase.auth.GoogleAuthProvider() firebase.auth().signInWithRedirect(provider) setState('waiting_callback') } }, [user, setUser, state]) return [state, errors, signIn] }
27.
Provider, UserContext const UserContext
= createContext({ user: null, setUser: () => {} }) const Provider = ({children}) => { const [user, setUser] = useState(null) useEffect(() => { firebase.auth().onAuthStateChanged(function(user) { setUser(user) }); }, [user, setUser]) return <UserContext.Provider value={{ user, setUser }}> {children} </UserContext.Provider> }; export { UserContext, Provider }
28.
コンポーネントから ログイン関連の処理を 隠せた!
29.
おわりに ▰ カスタムフック ▰ 新しい共通化の単位 ▰
基本のReact Hooks APIの組み合わせで実現 ▰ 名前はuseXXXにする
30.
こんなの作った ▰ useMediaQuery ▰ npm
i @rswisteria/react-use-media-query ▰ https://www.npmjs.com/package/@rswisteria/react-use-media-query ▰ https://github.com/rswisteria/useMediaQuery ▰ JavaScript上でメディアクエリを扱うカスタムフック
31.
みんなも カスタムフック 作って 公開しよう!
Download now