Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
render-props-intro.pdf
Search
mori-dev
October 04, 2018
Technology
250
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
render-props-intro.pdf
mori-dev
October 04, 2018
Other Decks in Technology
See All in Technology
作り直せるコードは迅速に 作り直せないDBは慎重に - AI時代のプロダクトエンジニアが「判断の不可逆性」で開発速度を変える話
kinosuke01
0
280
module Synths; end
asonas
1
130
日経電子版を支えていく Kasane Design System/fec_fukuoka
nikkei_engineer_recruiting
0
350
全員がプロダクトへ向き合う組織を持続成長させるために——組織づくりのフライホイールと4象限 / The Flywheel Model and Four Quadrants for Organizational Design
hiro_torii
4
940
『止めない』を設計する — 制約の中で、事業の根幹を支える判断
hiroyaterui
0
240
Adaptive Warehouse を今すぐ導入すべき理由と迷ったときの判断基準
__allllllllez__
0
140
「重なり」は迎える側がつくる ― 人もAIエージェントも歓迎するプロダクトエンジニアリング ―
go0517go
PRO
0
270
スクラムで身についていた動き方を、XPで捉え直してみた
codmoninc
PRO
1
330
AIで仕事のやり方を変える
matsu7874
3
1k
V8コントリビュート超入門
riyaamemiya
0
160
Microsoft 365 Copilot chat -tekoälypalvelun tietosuojaongelmat
hponka
0
580
synctest時代のhttptest Go 1.27で変わるHTTPサーバテストの裏側 / go conference2026 synctest and httptest
budougumi0617
1
660
Featured
See All Featured
Jamie Indigo - Trashchat’s Guide to Black Boxes: Technical SEO Tactics for LLMs
techseoconnect
PRO
0
660
The Anti-SEO Checklist Checklist. Pubcon Cyber Week
ryanjones
0
230
Why You Should Never Use an ORM
jnunemaker
PRO
61
10k
Accessibility Awareness
sabderemane
1
200
Primal Persuasion: How to Engage the Brain for Learning That Lasts
tmiket
0
450
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
690
Highjacked: Video Game Concept Design
rkendrick25
PRO
1
450
Navigating Team Friction
lara
192
16k
AI: The stuff that nobody shows you
jnunemaker
PRO
9
980
What the history of the web can teach us about the future of AI
inesmontani
PRO
1
680
Building AI with AI
inesmontani
PRO
1
1.2k
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
1
400
Transcript
React.js の render‑props と Function as child の紹介
目的 render‑props とは何かを理解すること Function as child とは何かを理解すること render‑props を使ったコードが読めるようになること Function
as child を使ったコードが読めるようになること
省略すること SFC。すべてクラス構文に統一しました。 「値」、「参照」といった用語の厳密な使い方 props の型
コンポーネント呼び出しの素朴な例 親コンポーネントが子コンポーネントを呼び出す、もっとも単純な例で す。 class Parent extends Component { render() {
return <Child /> } } class Child extends Component { render() { return ' 子コンポーネント' } }
親から子へ文字列を渡す 親コンポーネントは子コンポーネントに、JSX の属性として、文字列を 渡すことができます。 JSX の属性 として指定することで、 this.props でそれを参照するこ とができます。
import React, { Component } from 'react' class Parent extends Component { render() { const something = 'aaa' return <Child something={something} /> } } class Child extends Component { render() { return <>something は {this.props.something}</> } }
親から子へオブジェクトを渡す 親コンポーネントは子コンポーネントに、JSX の属性として、オブジェ クトを渡すことができます。たとえば、 { keyA: 'aaa'} です。 class Parent
extends Component { render() { const something = { keyA: 'aaa'} return <Child something={something} /> } } class Child extends Component { render() { return <>something.keyA は {this.props.something.keyA}</> } }
親から子へ関数を渡す 親コンポーネントは子コンポーネントに、JSX の属性として、関数を渡 すことができます。 JSX の属性が関数なら、コールバックとして使えるということです。 class Parent extends Component
{ something() { console.log('aaaaaa') } render() { return <Child something={this.something} /> } } class Child extends Component { render() { this.props.something() return <> 子コンポーネント</> } }
親から子へコンポーネントを返す関数を渡す 先程の例では、JSX の属性として渡した関数は、console.log を実行した だけでした。 コンポーネント(React.Element) を返すという使い方がもっと有益です。 たとえば、親コンポーネントで DOM 要素を返す関数を定義して、子コ
ンポーネントの props として渡します。 そして、子コンポーネントの render メソッドの定義中でその関数を実行 します。 次の例では、prop の名前を something から render に変更し、雰囲気を だしました。
class Parent extends Component { something() { return <> 親コンポーネント</>
} render() { return <Child render={this.something} /> } } class Child extends Component { render() { return this.props.render() } }
親から子へコンポーネントを渡す1 親コンポーネントは子コンポーネントに、JSX の属性として、コンポー ネントを渡すことができます。 class WanderingComponents extends Component { render()
{ return <>WanderingComponents</> } } class Parent extends Component { render() { return <Child myComponent={<WanderingComponents />} /> } } class Child extends Component { render() { return <>{this.props.myComponent}</> } }
親から子へコンポーネントを渡す2 先程の例は、JSX の属性名を children にすると、Child コンポーネント はよくみるイディオムになります。 class WanderingComponents extends
Component { render() { return <>WanderingComponents</> } } class Parent extends Component { render() { return <Child children={<WanderingComponents />} /> } } class Child extends Component { render() { return <>{this.props.children}</> } }
コンポーネントのネストと children 属性 親から子にコンポーネントを渡すとき、JSX の属性としてではなく、コ ンポーネントをネストさせる形で渡すこともできます。ネストさせると 呼び出し側から属性名の記述が消えますが、 children という名前で受 け取れると規定されています。
以下の書き方で、WanderingComponents は Child の子コンポーネント になるので、Child では this.props.children で WanderingComponents を取得できます。
class WanderingComponents extends Component { render() { return <>WanderingComponents</> }
} class Parent extends Component { render() { return ( <Child> <WanderingComponents /> </Child> ) } } class Child extends Component { render() { return this.props.children } }
Function as child パターン コンポーネントのネスト部が children 属性に対応するということを確認 しました。 このコンポーネントのネスト部は、コンポーネントそのものだけではな く関数にすることもできます。
children 属性がコールバックとして使えるということです。 その場合、render での children 属性の呼び出しは {this.props.children} ではなく {this.props.children()} で す。 これを「Function as child パターン」と呼びます。
class Parent extends Component { something() { return <>something</> }
render() { return ( <Child> {this.something} </Child> ) } } class Child extends Component { render() { return this.props.children() // () をつけて関数を実行した } }
Functions as Children と render‑props の関係 一つ前の子コンポーネントの reunder メソッドは return
this.props.children() という定義でした。 children 属性が関数である必要があると読み取れます。 これは JSX の属性として関数を渡す、いわゆる render‑props です。 コンポーネントを返す関数を prop とする JSX の属性名を render から children に変更してみましょう。
render 版 import React, { Component } from 'react' class
Parent extends Component { something() { return <>something</> } render() { return <Child render={this.something} /> } } class Child extends Component { render() { return this.props.render() } }
children 版 import React, { Component } from 'react' class
Parent extends Component { something() { return <>something</> } render() { return <Child children={this.something} /> } } class Child extends Component { render() { return this.props.children() } } 挙動は同一です。 Functions as Children は render‑props の一種だとみなせることがわかり ました。
リファレンス https://reactjs.org/docs/render‑props.html https://reactjs.org/docs/jsx‑in‑depth.html#children‑in‑jsx https://reactjs.org/docs/jsx‑in‑depth.html#functions‑as‑children https://reactjs.org/docs/react‑component.html#render