SlideShare ist ein Scribd-Unternehmen logo
1 von 18
Reactのおさらい②
執筆者:トビウオ
〜状態 (state) の管理について〜
• 前回のあらすじ
• 状態(state)とは
• 状態管理の必要性
• Web標準における状態管理
• Reactにおける状態管理
• 「状態のバケツリレー」
目次
前回のあらすじ
• 三大Webフロントエンドフレームワークの一角、React
npm trendsより取得。vueが跳ねてるのはvue 3が出てきたから
• 各要素をコンポーネント
に分割し、その粒度を積
み上げることでWebペー
ジを構成する
• 再利用性が高く、応用力
が高いUI構築が可能
入力部分
出力部分
画面全体
前回のあらすじ
前回のあらすじ
export const OutputTag = ({list}:{list: string[]}) => {
return <>
<h1>TODO一覧:</h1>
<ul>{list.map((w,i)
=>(<li key={i}>{w}</li>))}</ul>
</>;
}
<OutputTag list={dataList}/>
Componentの使用方法
描画したもの
Componentの定義
前回のあらすじ
export const OutputTag = ({list}:{list: string[]}) => {
return <>
<h1>TODO一覧:</h1>
<ul>{list.map((w,i)
=>(<li key={i}>{w}</li>))}</ul>
</>;
}
属性の定義
タグ名の定義
どのようなHTMLを返すか?
Componentの使用方法
state(状態) Web
表示
従来のような
サーバーサイドレンダリングの場合
サーバー
クライアント HTTP
リクエスト
HTTP
レスポンス
状態(state)とは
状態(state)とは
表示
state(状態)
Web
state(状態)
サーバー
クライアント
HTTP
レスポンス
HTTP
リクエスト
シングルページアプリケーションの場合
状態管理の必要性
• Webサイトではしばしば「状態」を問われる
• 通販サイトならカートの中
• ログインするサイトならアカウントの状態
• ゲームならプレイ中の状況(持ち物など)
• ReactなどSPAだと、クライアントが保持するこ
とが多い
管理方法 難易度 リロード時 自由度
メモリ上に保持 簡単 消える 高い
URL上 簡単 消えない 低い
Cookie 難しい 消えない 低い
localStorage 普通 消えない 普通
IndexedDB 難しい 消えない 高い
Reactではこちらを
多用する
Web標準における状態管理
Reactにおける状態管理
export const CountButton = () => {
const [count, setCount] = useState(0);
const add = () => setCount(count + 1);
return <button onClick={add}>
Count: {count}
</button>;
}
Componentの定義の中で、「useState」という関数が使用できる
Reactにおける状態管理
export const CountButton = () => {
const [count, setCount] = useState(0);
const add = () => setCount(count + 1);
return <button onClick={add}>
Count: {count}
</button>;
}
「const [変数名, 変数を変更するための関数] = useState(初期値);」
といった書式で使う
• 「変数」はそのまま使う(読み込み専用)。「変数を変更するための
関数」の引数に値をセットすると、「変数」が書き換わる
Reactにおける状態管理
export const CountButton = () => {
const [count, setCount] = useState(0);
const add = () => setCount(count + 1);
return <button onClick={add}>
Count: {count}
</button>;
}
Reactにおける状態管理
export const CountButton = () => {
const [count, setCount] = useState(0);
const add = () => setCount(count + 1);
return <button onClick={add}>
Count: {count}
</button>;
}
Reactにおける状態管理
• 数字以外にも、任意の型で用意できる
• const [x, setX] = useState(‘foobar’);
• const [y, setY] = useState({ a: 3, b: ‘z’ });
• object型で用意した場合も、全部を置き換える必
要がある
• 「setY({ a: 4, b: ‘w’ });」などと記述する
const CountButton = () => {
const [count, setCount] = useState(0);
return <LabelButton label={`Count: ${count}`}>;
}
count LabelButton = ({label}:{label: string}) => {
return <button>{label}</button>
}
「状態」のバケツリレー
この場合、CountButtonからLabelButtonに、stateの情報が渡されている
const App = ()=> {
return <MainWindow>
<Frame1>
<Form1>
<Foo />
</Form1>
<Form2>
<Bar />
</Form2>
</Frame1>
</MainWindow>;
}
「状態」のバケツリレー
• 左のように階層が嵩むと、
stateを渡すための属性の
ため、定義がどんどん肥大
化しがち
「状態」のバケツリレー
• この問題を解決す
る技術はあるが、
説明は別の機会に
……

Weitere ähnliche Inhalte

Ähnlich wie Reactのおさらい②.pptx

Ähnlich wie Reactのおさらい②.pptx (11)

React+redux+saga 03
React+redux+saga 03React+redux+saga 03
React+redux+saga 03
 
20081003
2008100320081003
20081003
 
WKWebViewとUIWebView
WKWebViewとUIWebViewWKWebViewとUIWebView
WKWebViewとUIWebView
 
Spring Rooで作るGWTアプリケーション
Spring Rooで作るGWTアプリケーションSpring Rooで作るGWTアプリケーション
Spring Rooで作るGWTアプリケーション
 
20090212
2009021220090212
20090212
 
20090606
2009060620090606
20090606
 
scala+liftで遊ぼう
scala+liftで遊ぼうscala+liftで遊ぼう
scala+liftで遊ぼう
 
3層アーキテクチャとMVCモデル -LaravelにおけるMVCモデルの流れ-
 3層アーキテクチャとMVCモデル -LaravelにおけるMVCモデルの流れ- 3層アーキテクチャとMVCモデル -LaravelにおけるMVCモデルの流れ-
3層アーキテクチャとMVCモデル -LaravelにおけるMVCモデルの流れ-
 
Start React with Browserify
Start React with BrowserifyStart React with Browserify
Start React with Browserify
 
20111204 WebBroser Control Tips for Windows Phone
20111204 WebBroser Control Tips for Windows Phone20111204 WebBroser Control Tips for Windows Phone
20111204 WebBroser Control Tips for Windows Phone
 
Next2Dで始めるゲーム開発 - Game Development Starting with Next2D
Next2Dで始めるゲーム開発  - Game Development Starting with Next2DNext2Dで始めるゲーム開発  - Game Development Starting with Next2D
Next2Dで始めるゲーム開発 - Game Development Starting with Next2D
 

Mehr von iPride Co., Ltd.

AWSで全てのパブリックIPv4アドレスが有料になった件について 2024/02/09の勉強会で発表されたものです。
AWSで全てのパブリックIPv4アドレスが有料になった件について 2024/02/09の勉強会で発表されたものです。AWSで全てのパブリックIPv4アドレスが有料になった件について 2024/02/09の勉強会で発表されたものです。
AWSで全てのパブリックIPv4アドレスが有料になった件について 2024/02/09の勉強会で発表されたものです。
iPride Co., Ltd.
 

Mehr von iPride Co., Ltd. (20)

Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
 
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
 
AWS_Bedrock入門 このスライドは2024/03/08の勉強会で発表されたものです。
AWS_Bedrock入門 このスライドは2024/03/08の勉強会で発表されたものです。AWS_Bedrock入門 このスライドは2024/03/08の勉強会で発表されたものです。
AWS_Bedrock入門 このスライドは2024/03/08の勉強会で発表されたものです。
 
AWS Lambdaと AWS API Gatewayを使ったREST API作り
AWS Lambdaと AWS API Gatewayを使ったREST API作りAWS Lambdaと AWS API Gatewayを使ったREST API作り
AWS Lambdaと AWS API Gatewayを使ったREST API作り
 
AWS (Amazon Web Services) を勉強してみる その3 2024/03/01の勉強会で発表されたものです。
AWS (Amazon Web Services) を勉強してみる その3 2024/03/01の勉強会で発表されたものです。AWS (Amazon Web Services) を勉強してみる その3 2024/03/01の勉強会で発表されたものです。
AWS (Amazon Web Services) を勉強してみる その3 2024/03/01の勉強会で発表されたものです。
 
AWS (Amazon Web Services) を勉強してみる おさらい 2024/02/16の勉強会で発表されたものです。
AWS (Amazon Web Services) を勉強してみる おさらい 2024/02/16の勉強会で発表されたものです。AWS (Amazon Web Services) を勉強してみる おさらい 2024/02/16の勉強会で発表されたものです。
AWS (Amazon Web Services) を勉強してみる おさらい 2024/02/16の勉強会で発表されたものです。
 
可用性・セキュリティを考慮して AWSでDrupalを構築する 2024/02/09の勉強会で発表されたものです。
可用性・セキュリティを考慮して AWSでDrupalを構築する 2024/02/09の勉強会で発表されたものです。可用性・セキュリティを考慮して AWSでDrupalを構築する 2024/02/09の勉強会で発表されたものです。
可用性・セキュリティを考慮して AWSでDrupalを構築する 2024/02/09の勉強会で発表されたものです。
 
AWSで全てのパブリックIPv4アドレスが有料になった件について 2024/02/09の勉強会で発表されたものです。
AWSで全てのパブリックIPv4アドレスが有料になった件について 2024/02/09の勉強会で発表されたものです。AWSで全てのパブリックIPv4アドレスが有料になった件について 2024/02/09の勉強会で発表されたものです。
AWSで全てのパブリックIPv4アドレスが有料になった件について 2024/02/09の勉強会で発表されたものです。
 
AWS CDKを使おうとしたら普通に悪戦苦闘した話 2024/02/02の勉強会で発表されたものです。
AWS CDKを使おうとしたら普通に悪戦苦闘した話 2024/02/02の勉強会で発表されたものです。AWS CDKを使おうとしたら普通に悪戦苦闘した話 2024/02/02の勉強会で発表されたものです。
AWS CDKを使おうとしたら普通に悪戦苦闘した話 2024/02/02の勉強会で発表されたものです。
 
AWS (Amazon Web Services) を勉強してみる 2024/01/26の勉強会で発表されたものです
AWS (Amazon Web Services) を勉強してみる 2024/01/26の勉強会で発表されたものですAWS (Amazon Web Services) を勉強してみる 2024/01/26の勉強会で発表されたものです
AWS (Amazon Web Services) を勉強してみる 2024/01/26の勉強会で発表されたものです
 
AWS SAM入門 2024/01/26の勉強会で発表されたものです【アイ・プライド】
AWS SAM入門  2024/01/26の勉強会で発表されたものです【アイ・プライド】AWS SAM入門  2024/01/26の勉強会で発表されたものです【アイ・プライド】
AWS SAM入門 2024/01/26の勉強会で発表されたものです【アイ・プライド】
 
Drupalでフォームの代わりにSPA (React) を表示させる話 2023/12/15の勉強会で発表されたものです。
Drupalでフォームの代わりにSPA (React) を表示させる話 2023/12/15の勉強会で発表されたものです。Drupalでフォームの代わりにSPA (React) を表示させる話 2023/12/15の勉強会で発表されたものです。
Drupalでフォームの代わりにSPA (React) を表示させる話 2023/12/15の勉強会で発表されたものです。
 
ChatGPTを用いてCDKを勉強
ChatGPTを用いてCDKを勉強ChatGPTを用いてCDKを勉強
ChatGPTを用いてCDKを勉強
 
OpenID Connectについて
OpenID ConnectについてOpenID Connectについて
OpenID Connectについて
 
画像生成AIの問題点
画像生成AIの問題点画像生成AIの問題点
画像生成AIの問題点
 
AI入門
AI入門AI入門
AI入門
 

Kürzlich hochgeladen

Kürzlich hochgeladen (8)

論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 

Reactのおさらい②.pptx