Reactã«ã€ããŠè©±ããªããã°ãªããªããšãããŸãã¯ãã¬ãŒãã³ã°ã³ãŒã¹ã®æåã®è¬çŸ©ãè¡ããããããçš®é¡ã®è峿·±ãããšã瀺ããšãã誰ãã確ãã«å°ããŸãã é
ããšèããŸãããã

ãã®è³ªåã¯ãã€ãåºãŠããããã§ã¯ãããŸããã§ããããããæ°ãæéã峿žé€šã®äœè
ãšæåž«ãšããŠãã»ãŒæ¯æ¥ãæã«ã¯è¬çŸ©ã§ãæã«ã¯Twitterã§çããªããã°ãªããŸããã æ£çŽãªãšãããç§ã¯ãã§ã«ããã«ããããããŠããŸãã æ®å¿µãªããããã¹ãŠãèšäºã®åœ¢ã«ããæ¹ãè¯ããšããã«æ°ã¥ããŸããã§ãããããã¯ãããã©ãŒãã³ã¹ã®è³ªåãããŠãã人ã«åœ¹ç«ã€ãšæããŸãã å®éãããªãã®åã«ã¯ç§ã®åŽèŠã®ææããããŸãã
çµã¿èŸŒã¿é¢æ°ãšã¯äœã§ããïŒ
Reactã®ã³ã³ããã¹ãã§ã¯ãã€ã³ã©ã€ã³é¢æ°ãšåŒã°ãããã®ã¯ãã¬ã³ããªã³ã°ããã»ã¹äžã«å®çŸ©ããã颿°ã§ãã Reactã§ã¯ããã¬ã³ããªã³ã°ãã®æŠå¿µã«ã¯2ã€ã®æå³ãããããã°ãã°æ··åãããŸãã 1ã€ç®ã¯ãã¢ããã°ã¬ãŒãããã»ã¹äžã«ã³ã³ããŒãã³ãããReactèŠçŽ ãååŸ
render
ïŒã³ã³ããŒãã³ã
render
ã¡ãœãããåŒã³åºãïŒããšã«é¢ãããã®ã§ãã 2çªç®ã¯ãDOMã倿Žããããšã«ããããŒãžãã©ã°ã¡ã³ãã®å®éã®æŽæ°ã§ãã ãã®èšäºã§ãã¬ã³ããªã³ã°ãã«ã€ããŠè©±ããšããç§ã¯æåã®éžæè¢ãæå³ããŸãã
çµã¿èŸŒã¿é¢æ°ã®äŸã次ã«ç€ºããŸãã
class App extends Component {
æ©ãããæé©åã¯ãã¹ãŠã®æªã®æ ¹æºã§ã
ç¶è¡ããåã«ãããã°ã©ã ãæé©åããæ¹æ³ã«ã€ããŠè©±ãå¿
èŠããããŸãã ããã©ãŒãã³ã¹ã®å°éå®¶ã«å°ãããšãåœŒã¯ææå°æ©ãªæé©åã¯æªã§ãããšèšãã§ãããã ããã¯ã絶察ã«ãã¹ãŠã®ããã°ã©ã ã«é©çšãããŸãã æé©åã«ã€ããŠããç¥ã£ãŠãã人ãªã誰ã§ãããã確èªã§ããŸãã
ç§ã®å人ã§ãã
gzip
ã«æ§ããããRalph Holzmannã®ã¹ããŒããèŠããŠããŸãã 圌ã¯ãã¹ã¯ãªãããããŒãããããã®å€ãã©ã€ãã©ãªã§ãã
LABjs
ã§è¡ã£ãå®éšã«ã€ããŠè©±ããŸããã ãã®
ããã©ãŒãã³ã¹ãèŠãããšãã§ã
ãŸã ã ç§ãããã§è©±ããŠããããšã¯ããããªã®30åããå§ããŠçŽ2ååããããŸãã
åœæã®
LABjsã§ã¯ã宿ããã³ãŒãã®ãµã€ãºãæé©åããããšãç®çãšãã
å¥åŠãªããšãè¡ãããŸããã
obj.foo
ã¯ãéåžžã®ãªããžã§ã¯ã衚èšïŒ
obj.foo
ïŒã䜿çšãã代ããã«ãããŒãæååã«æ ŒçŽããè§æ¬åŒ§ã䜿çšããŠãªããžã§ã¯ãã®ã³ã³ãã³ãïŒ
obj[stringForFoo]
ïŒã«ã¢ã¯ã»ã¹ããŸããã ããã¯ã
gzip
ã³ãŒããçž®å°ããã³å§çž®ããåŸãéåžžãšã¯ç°ãªãæ¹æ³ã§äœæãããã³ãŒãããéåžžã®æ¹æ³ã§äœæãããã³ãŒããããå°ãããªãã¯ãã ã£ãããã§ãã
Ralphã¯ãã®ã³ãŒããåå²ããŠæé©åãåé€ããçž®å°ãšgzipå§çž®ã®ããã«ã³ãŒããæé©åããæ¹æ³ãèããã«ãéåžžã®æ¹æ³ã§æžãæããŸããã
ãæé©åããåãé€ãããšã§ãçµæã®ãã¡ã€ã«ã®ãµã€ãºã5.3ïŒ
åæžã§ããããšãããããŸããã æããã«ãã©ã€ãã©ãªã®äœæè
ã¯ãå©ç¹ãäžãããã©ããããã§ãã¯ããã«ããæé©åãããã圢åŒã§ããã«ãããæžããŸããã ç¹å®ã®æé©åã«ãã£ãŠäœããæ¹åããããã©ãããæž¬å®ããããšã¯äžå¯èœã§ãã ããã«ãæé©åã«ãã£ãŠç¶æ³ãæªåããã ãã®å Žåãããã«ã€ããŠãããããŸããã
ææå°æ©ãªæé©åã¯ãéçºæéã倧å¹
ã«å¢å ãããã³ãŒãã®çŽåºŠãæªåãããã ãã§ãªããLABjsã®å Žåã®ããã«ããã€ãã¹ã®çµæããããããåé¡ãåŒãèµ·ããå¯èœæ§ããããŸãã ã©ã€ãã©ãªã®äœæè
ãããã©ãŒãã³ã¹ã®åé¡ãæ³åãã代ããã«æž¬å®ãè¡ã£ãå Žåãéçºæéãç¯çŽããããåªããç¹æ§ãåããããã¯ãªãŒã³ãªã³ãŒãããªãªãŒã¹ããŸãã
ããã§
ãã®ãã€ãŒããåŒçš
ããŸãããã¢ãŒã ãã§ã¢ã§ãã€ããã§ãã人ããããã©ãŒãã³ã¹ã®æž¬å®ãããã«åé¡ã解決ããã®ã«æéããããã³ãŒãããããšäž»åŒµããã®ã¯ããããããŸããã ç§ã¯ãã®èгç¹ãæ¯æããŸãã
ã ãããç§ã¯ç¹°ãè¿ããŸã-ææå°æ©ãªæé©åãè¡ããŸããã ããŠãReactã«æ»ããŸãã
çµã¿èŸŒã¿é¢æ°ãããã©ãŒãã³ã¹ãäœäžããããšèšãããã®ã¯ãªãã§ããïŒ
çµã¿èŸŒã¿é¢æ°ã¯ã2ã€ã®çç±ã§é
ããšèŠãªãããŸãã ãŸããããã¯ã¡ã¢ãªæ¶è²»ãšã¬ããŒãžã³ã¬ã¯ã·ã§ã³ã«é¢ããæžå¿µã«ãããã®ã§ãã 第äºã«
shouldComponentUpdate
ã§ãã ãããã®æžå¿µã調ã¹ãŠã¿ãŸãããã
âã¡ã¢ãªæ¶è²»ãšã¬ããŒãžã³ã¬ã¯ã·ã§ã³
ãŸããããã°ã©ããŒïŒããã³
estlintæ§æ ïŒã¯ã
çµã¿èŸŒã¿é¢æ°ãäœæããéã®ã¡ã¢ãªãŒæ¶è²»ãšã¬ããŒãžã³ã¬ã¯ã·ã§ã³ããã®ã·ã¹ãã è² è·ãæžå¿µããŸãã ããã¯ãJSã®ç¢å°é¢æ°ããŸã åºã䜿çšãããŠããªãã£ãæä»£ã®éºç£ã§ãã ãã«ãã€ã³ã³ã³ã¹ãã©ã¯ãã®Reactã³ãŒãã§
bind
ã³ãã³ããé »ç¹ã«äœ¿çšãããå Žåãããã¯æŽå²çã«ããã©ãŒãã³ã¹ã®äœäžã«ã€ãªãããŸããã äŸïŒ
<div> {stuff.map(function(thing) { <div>{thing.whatever}</div> }.bind(this)} </div>
Function.prototype.bind
ã®åé¡ã¯
ããã§
ä¿®æ£ãã ãç¢å°é¢æ°ã¯èšèªã®çµã¿èŸŒã¿æ©èœãšããŠäœ¿çšããããããŸãã¯babelã䜿çšããŠéåžžã®é¢æ°ã«å€æãããŸããã ãããŠãããããããã§ãç§ãã¡ã¯ããããé
ãããã§ã¯ãªããšä»®å®ããããšãã§ããŸãã
äžéšã®ã³ãŒããé
ããªããšããåæãç«ãŠãå¿
èŠã¯ãããŸããã ãã€ãã®ããã«ã³ãŒããæžããããã©ãŒãã³ã¹ã枬å®ããŸãã åé¡ãèŠã€ãã£ãå Žåã¯ãä¿®æ£ããŠãã ããã ç¢å°é¢æ°ãé«éã«åäœããããšã蚌æããå¿
èŠã¯ãããŸãããä»ã®äººã«ããããé
ãããšã蚌æãããŠãã ããã ãã以å€ã®å Žåã¯ãææå°æ©ãªæé©åã§ãã
ç§ã®ç¥ãéãã誰ãã¢ããªã±ãŒã·ã§ã³ã®ç ç©¶ãè¡ã£ãŠããŸãããçµã¿èŸŒã¿æ©èœãããã©ãŒãã³ã¹ã®åé¡ã«ã€ãªããããšã瀺ããŠããŸãã ãããŸã§ã¯ãããã«ã€ããŠè©±ãå¿
èŠã¯ãããŸãããããããã«ããŠããããã§å¥ã®ã¢ã€ãã¢ãå
±æããŸãã
ã·ã¹ãã ã®çµã¿èŸŒã¿é¢æ°ã®äœæã«ããè² è·ããããé²ãç¹å¥ãªãšã¹ãªã³ãã«ãŒã«ãäœæããã®ã«ååé«ãå Žåããªããããã®éãæäœãã·ã¹ãã ã®é床ã«åœ±é¿ãäžãããšããç¹ã§éåžžã«éèŠãªåæåãŠãããã«ç§»åããããšããã®ã§ããããïŒ
class Dashboard extends Component { state = { handlingThings: false } constructor(props) { super(props) this.handleThings = () => this.setState({ handlingThings: true }) this.handleStuff = () => { }
äºåçãªæé©åã§ã¯ãã³ã³ããŒãã³ãã®åæåã3åé
ãããŸããã ãã¹ãŠã®ã€ãã³ããã³ãã©ãŒãçµã¿èŸŒã¿é¢æ°ã§ãã£ãå Žåã
render
ã®æåã®åŒã³åºãã§å¿
èŠãªé¢æ°ã¯1ã€ã ãã§ãã 代ããã«ã3ã€äœæããŸãã ããã«ãããã©ãŒãã³ã¹æž¬å®ã¯è¡ãããªãã£ãããããããåé¡ãšèŠãªãçç±ã¯ãããŸããã
ãã ããå¿
èŠãªãã®ãšäžèŠãªãã®ããã¹ãŠçµã¿èŸŒã¿é¢æ°ã«è»¢éãããšããèãã«å€¢äžã«ãªãã¹ãã§ã¯ãããŸããã äžèšã®ã¢ã€ãã¢ã«è§ŠçºãããŠã誰ããåæã®ã¬ã³ããªã³ã°ãé«éåããããã«çµã¿èŸŒã¿é¢æ°ã®åºç¯ãªäœ¿çšãå¿
èŠãšããeslintã«ãŒã«ãäœæããããšã«æ±ºããå Žåãåãæå®³ãªææå°æ©ãªæé©åã«çŽé¢ããŸãã
urePureComponentããã³shouldComponentUpdate
åé¡ã®çã®æ žã¯
PureComponent
ãš
shouldComponentUpdate
ãŸãã ããã©ãŒãã³ã¹ãæé©åããããã«ã¯ã2ã€ã®ããšãçè§£ããå¿
èŠããããŸã
shouldComponentUpdate
ã®æ©èœãšãJavaScriptã§ã®å³å¯ãªåçæ§ã®æ¯èŒã®ä»çµã¿ã§ãã ãããã®æŠå¿µãçè§£ããªããŠããã³ãŒãã®é«éåã詊ã¿ãŠãäºæ
ã¯æªåããã ãã§ãã
setState
ã
setState
ãReactã¯å€ãèŠçŽ ãšæ°ããèŠçŽ ãæ¯èŒãïŒããã
調æŽãšåŒã³ãŸãïŒãåãåã£ãæ
å ±ã䜿çšããŠå®éã®DOMã®èŠçŽ ãæŽæ°ããŸãã ãã§ãã¯ããå¿
èŠã®ããèŠçŽ ãå€ãããå ŽåïŒå€§ããªSVGã®ãããªãã®ïŒããã®æäœã¯ããªãé
ãããšããããŸãã ãã®ãããªå ŽåãReactã¯
shouldComponentUpdate
ãšããåé¿çãæäŸããŸãã
class Avatar extends Component { shouldComponentUpdate(nextProps, nextState) { return stuffChanged(this, nextProps, nextState)) } render() { return
Reactãå€ãèŠçŽ ãšæ°ããèŠçŽ ãæ¯èŒããåã«ãã³ã³ããŒãã³ã
shouldComponentUpdate
èšå®ãããŠããå Žåã
shouldComponentUpdate
ã
shouldComponentUpdate
ãäœãã倿Žããããã©ããã確èªããŸãã å¿çã
false
è¿ããå ŽåãReactã¯èŠçŽ æ¯èŒæäœãå®å
šã«ã¹ããããããããæéãç¯çŽã§ããŸãã ã³ã³ããŒãã³ããååã«å€§ããå Žåãããã¯ããã©ãŒãã³ã¹ã«é¡èãªåœ±é¿ãããããå¯èœæ§ããããŸãã
ã³ã³ããŒãã³ããæé©åããæãäžè¬çãªæ¹æ³ã¯ã
React.PureComponent
ã§ã¯ãªã
React.PureComponent
ãæ¡åŒµããããš
React.Component
ã
PureComponent
ã¯
PureComponent
ããããã£ãšç¶æ
ãæ¯èŒããŸãããã®çµæãèªåã§è¡ãå¿
èŠã¯ãããŸããã
class Avatar extends React.PureComponent { ... }
Avatar
ã¯ã©ã¹ã¯ãæŽæ°ãèŠæ±ããåã«ããããã£ãšç¶æ
ãæäœãããšãã«ãå³å¯ãªç䟡æ¯èŒã䜿çšããããã«ãªããŸããã ããã«ãããããã°ã©ã ãé«éåãããããšãæåŸ
ã§ããŸãã
å³å¯ãªå¹³çã®æ¯èŒ
JavaScriptã«ã¯ã
string
ã
number
ã
boolean
ã
null
ã
undefined
ã
symbol
6ã€ã®ããªããã£ãåããããŸãã åãå€ãæ ŒçŽããããªããã£ãåã®2ã€ã®å€æ°ã®å³å¯ãªæ¯èŒãå®è¡ããããšã
true
ååŸãããŸãã äŸïŒ
const one = 1 const uno = 1 one === uno
PureComponent
ããããã£ãæ¯èŒãããšããå³å¯ãªæ¯èŒã䜿çšããŸãã ããã¯ã
<Toggler isOpen={true}/>
ãããªåã蟌ã¿ããªããã£ãå€ã«æé©ã§ãã
ããããã£ãæ¯èŒãããšãã®åé¡ã¯ãä»ã®ã¿ã€ããã€ãŸãç³ãèš³ãããŸãã-å¯äžã®ã¿ã€ãã§çºçããŸãã JSã®ä»ã®ãã¹ãŠã¯
Object
ã§ãã ãããã颿°ãšé
åã¯ã©ãã§ããããïŒ å®éããããã¯ãã¹ãŠãªããžã§ã¯ãã§ãã ã颿°ã¯ãå®è¡ã®ããã«åŒã³åºããã远å ã®æ©èœãæã€éåžžã®ãªããžã§ã¯ãã§ãããšãã
MDNããã¥ã¡ã³ãããã®æç²ãåŒçšã§ããŸãã
ãŸãç§ã¯äœãèšãããšãã§ããŸã-JSã¯JSã§ãã ãããã®å Žåã§ããç°ãªããªããžã§ã¯ãã®å³å¯ãªæ¯èŒã¯ãããšãåãå€ãå«ãŸããŠããŠãã
false
ãè¿ã
false
ã
const one = { n: 1 } const uno = { n: 1 } one === uno // false one === one // true
ãã®ããããªããžã§ã¯ããJSXã³ãŒãã«åã蟌ããšã
PureComponent
ã®ããããã£ã®é©åãªæ¯èŒãäžå¯èœã«ãªãããã®çµæãReactèŠçŽ ã®ããæéã®ãããæ¯èŒãè¡ãããŸãã ãã®æ¯èŒã§ã¯ãçµæãšããŠã³ã³ããŒãã³ãã倿ŽãããŠããªãããšãããããŸã-2ã€ã®æ¯èŒã§ã®æéã®æå€±ã
// <Avatar user={{ id: 'ryan' }}/> // <Avatar user={{ id: 'ryan' }}/> // , - , {} !== {} // () ,
颿°ã¯ãªããžã§ã¯ãã§ããã
PureComponent
ã¯ããããã£ã®ç䟡æ§ãå³å¯ã«ãã§ãã¯ãããããããããã£ã®åææã«çµã¿èŸŒã¿é¢æ°ã®æ¯èŒã¯åžžã«ãããããç°ãªããšããã¡ãã»ãŒãžã§çµäºããŸãããã®åŸããããã³ã°æé äžã®èŠçŽ ã®æ¯èŒãžã®ç§»è¡ãå®è¡ãããŸãã
ããã¯çµã¿èŸŒã¿é¢æ°ã ãã«é©çšãããããã§ã¯ãªãããšã«æ°ä»ããããããŸããã éåžžã®ãªããžã§ã¯ããé
åã«ã€ããŠãåãããšãèšããŸãã
shouldComponentUpdate
åäžã®é¢æ°ãæ¯èŒãããšãã«æåŸ
ããããšãè¡ãã«ã¯ã颿°ã®åç
§IDãç¶æããå¿
èŠããããŸãã çµéšè±å¯ãªJSéçºè
ã«ãšã£ãŠãããã¯ããã»ã©æªããã¥ãŒã¹ã§ã¯ãããŸããã ãããã
Michaelãšç§ãããŸããŸãªã¬ãã«ã®ãã¬ãŒãã³ã°ãåããçŽ3,500人ã®ãã¬ãŒãã³ã°åŸã«åŠãã ããšãèæ
®ãããšããã®ã¿ã¹ã¯ã¯åŠçã«ãšã£ãŠããã»ã©åçŽã§ã¯ãªãã£ãããšãããããŸãã ESã¯ã©ã¹ã¯ããã§ã圹ã«ç«ããªãããããã®ç¶æ³ã§ã¯ä»ã®JSæ©èœã䜿çšããå¿
èŠãããããšã«æ³šæããŠãã ããã
class Dashboard extends Component { constructor(props) { super(props)
颿°ã®åç
§IDãä¿åããããã®ææ³ã®ç ç©¶ã¯ãé©ãã»ã©é·ãäŒè©±ã«ã€ãªããããšã«æ³šæããå¿
èŠããããŸãã eslintæ§æã®èŠä»¶ãæºããããå Žåãé€ããããã°ã©ããŒã«é»è©±ããçç±ã¯ãããŸããã ç§ãèŠãããã£ãäž»ãªããšã¯ãçµã¿èŸŒã¿é¢æ°ãæé©åã«å¹²æžããªãããšã§ãã æ¬¡ã«ãããã©ãŒãã³ã¹ã®æé©åã«é¢ããç¬èªã®ã¹ããŒãªãŒãå
±æããŸãã
PureComponentã®äœ¿ç𿹿³
PureRenderMixin
ïŒããã¯ä»¥åã®ããŒãžã§ã³ã®Reactã®ãã¶ã€ã³ã§ãåŸã«
PureComponent
ã«ãªã£ããã¶ã€ã³ïŒãåããŠç¥ã£ããšããå€ãã®æ¬¡å
ã䜿çšããŠãã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ãè©äŸ¡ããŸããã æ¬¡ã«ã
PureRenderMixin
ããã¹ãŠã®ã³ã³ããŒãã³ãã«è¿œå ããŸããã æé©åãããããŒãžã§ã³ã®ããã©ãŒãã³ã¹æž¬å®ãè¡ã£ããšããçµæãšããŠãã¹ãŠãçŽ æŽããããªããèªãããã«ã¿ããªã«ãããäŒããããšãã§ããããšãæã¿ãŸããã
ããããé©ããããšã«ãã¢ããªã±ãŒã·ã§ã³ã®åäœãé
ããªããŸããã
ãªãã§ïŒ èããŠã¿ãŠãã ããã ç¹å®ã®
Component
ãããå Žåããã®
Component
æäœããéã«å®è¡ããå¿
èŠãããæ¯èŒæäœã®æ°ã¯ããã€ã§ããïŒ
PureComponent
ã©ãã§ããïŒ ããããã®çãã¯ãã1ã€ã ããããå°ãªããšã1ã€ãæã«ã¯2ã€ãã§ãã ã¢ããã°ã¬ãŒãäžã«ã³ã³ããŒãã³ããéåžžå€æŽãããå Žåã
PureComponent
ã¯1ã€ã§ã¯ãªã2ã€ã®æ¯èŒæäœãå®è¡ããŸãïŒ
shouldComponentUpdate
ããããã£ãšç¶æ
ãããã³éåžžã®èŠçŽ ã®æ¯èŒïŒã ããã¯ãéåžžã
PureComponen
tãé
ããªãããšãæå³ããŸãããæã«ã¯éããªããŸãã æããã«ãç§ã®ã³ã³ããŒãã³ãã®ã»ãšãã©ã¯çµ¶ããå€åããŠãããããäžè¬ã«ãã¢ããªã±ãŒã·ã§ã³ã®åäœãé
ããªããŸããã æ²ããã§ã
ãçç£æ§ãé«ããæ¹æ³ããšãã質åã«å¯Ÿããæ®éçãªçãã¯ãããŸããã çãã¯ãç¹å®ã®ã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹æž¬å®ã§ã®ã¿èŠã€ããããšãã§ããŸãã
3ã€ã®çµã¿èŸŒã¿é¢æ°ã®äœ¿çšã·ããªãªã«ã€ããŠ
çŽ æã®åé ã§ã3çš®é¡ã®çµã¿èŸŒã¿é¢æ°ã瀺ããŸããã ããã€ãã®ããŒã¹ãæºåãããã®ã§ãããããã«ã€ããŠè©±ããŸãããã ãã ãããã®ã¡ã«ããºã ã䜿çšããå©ç¹ãè©äŸ¡ããããã«ã枬å®ãããŸã§
PureComponent
ãä¿æããããšããå§ãããŸãã
âDOMã³ã³ããŒãã³ãã€ãã³ããã³ãã©ãŒ
<button onClick={() => this.setState(âŠ)} >click</button>
éåžžããã¿ã³ãå
¥åãã£ãŒã«ãããŸãã¯
setState
åŒã³åºã以å€ã®ä»ã®DOMã³ã³ããŒãã³ãã®ã€ãã³ããã³ãã©ãŒå
ã§ã¯äœãè¡ãããŸããã ããã«ãããéåžžãã€ã³ã©ã€ã³é¢æ°ãæãã¯ãªãŒã³ãªã¢ãããŒãã«ãªããŸãã ã€ãã³ããã³ãã©ã®æ€çŽ¢ã§ãã¡ã€ã«ããžã£ã³ããã代ããã«ããããã¯èŠçŽ èšè¿°ã³ãŒãã§èŠã€ããããšãã§ããŸãã éåžžãReactã³ãã¥ããã£ã¯ãããæè¿ããŸãã
button
ã³ã³ããŒãã³ãïŒããã³ä»ã®DOMã³ã³ããŒãã³ãïŒã
PureComponent
ã«ããããšããã§ããªãããã
shouldComponentUpdate
ããã³åç
§IDã«ã€ããŠå¿é
ããå¿
èŠã¯ãããŸããã
çµæãšããŠã颿°ã®åçŽãªå®çŸ©ãã·ã¹ãã ã®ããªã倧ããªè² è·ã§ãããå¿é
ãã䟡å€ãããããšã«åæããå Žåã«ã®ã¿ãããã¯é
ããšèããããšãã§ããŸãã ãããããã§ãããšãã蚌æ ã¯ãããŸããã çµã¿èŸŒã¿ã®ã€ãã³ããã³ãã©ãŒã®äžåœãªå»æ£ã¯ãããç¥ãããŠããææå°æ©ãªæé©åã§ãã
âãã«ã¹ã¿ã ã€ãã³ãããŸãã¯ãã¢ã¯ã·ã§ã³ã
<Sidebar onToggle={(isOpen) => { this.setState({ sidebarIsOpen: isOpen }) }}/>
Sidebar â
PureComponent
ã®å Žåãããããã£ã®æ¯èŒã¯æž¡ããŸããã ç¹°ãè¿ãã«ãªããŸããããã³ãã©ãŒã¯åçŽã§ããããããããåã蟌ãããšãæåã®è§£æ±ºçã«ãªãå¯èœæ§ããããŸãã
次ã«ã
onToggle
ãªã©ã®ã€ãã³ããšã
Sidebar
ããããæ¯èŒããçç±ã«ã€ããŠèª¬æããŸãã
shouldComponentUpdate
ããããã£ã®éããæ¢ãçç±ã¯2ã€ãããããŸããã
- ããããã£ã¯ã¬ã³ããªã³ã°ã«äœ¿çšãããŸãã
- ãã®ããããã£ã¯ã
componentWillReceiveProps
ã componentDidUpdate
ããŸãã¯componentWillReceiveProps
ã§å¯äœçšãéæããããã«äœ¿çšããcomponentWillUpdate
ã
ã»ãšãã©ã®
on<whatever>
ããããã£ã¯ãããã®èŠä»¶ãæºãããŠããŸããã ãããã£ãŠãã»ãšãã©ã®
PureComponent
䜿çš
PureComponent
ãäžå¿
èŠãªæ¯èŒãè¡ãããéçºè
ã¯åç
§IDãã³ãã©ãŒãäžå¿
èŠã«ç¶æããå¿
èŠããããŸãã
倿Žã§ããããããã£ã®ã¿ãæ¯èŒããå¿
èŠããããŸãã ãããã£ãŠããã³ãã©ãŒã¯èŠçŽ èšè¿°ã³ãŒãã«å«ããããšãã§ããããã¯ãã¹ãŠè¿
éã«æ©èœããŸããããã©ãŒãã³ã¹ãæžå¿µãããå Žåããã®ã¢ãããŒãã§ã¯æ¯èŒãå°ãªããŠæžãããšã«æ³šæããŠãã ããã
ã»ãšãã©ã®ã³ã³ããŒãã³ãã«ã€ããŠã¯ã
PureComponentMinusHandlers
ããç¶æ¿ããã®ã§ã¯ãªãã
PureComponentMinusHandlers
ã¯ã©ã¹ãäœæããŠç¶æ¿ããããšãã
PureComponent
ãŸãã ããã¯ããã¹ãŠã®æ©èœãã§ãã¯ãã¹ãããããã®ã«åœ¹ç«ã¡ãŸãã å¿
èŠãªãã®ã ãã ãŸã-ã»ãšãã©å¿
èŠãªãã®ã
颿°ãååŸãããã®é¢æ°ãå¥ã®ã³ã³ããŒãã³ãã«çŽæ¥æž¡ãå Žåã廿¢ãããŸãã ãããèŠãŠãã ããïŒ
// 1. . // 2. , // , . // 3. setState // ** . // 4. , // . // 5. // , // . class App extends React.Component { state = { val: "one" } componentDidMount() { this.setState({ val: "two" }) } render() { return <Form value={this.state.val} /> } } const Form = props => ( <Button onClick={() => { submit(props.value) }} /> ) class Button extends React.Component { shouldComponentUpdate() { // , , . return false } handleClick = () => this.props.onClick() render() { return ( <div> <button onClick={this.props.onClick}>This one is stale</button> <button onClick={() => this.props.onClick()}>This one works</button> <button onClick={this.handleClick}>This one works too</button> </div> ) } }
â
ããã§ ããã®ã³ãŒãã詊ãããšãã§ããŸãã
ãããã£ãŠã
PureRenderWithoutHandlers
ããç¶æ¿ãããšããã¢ã€ãã¢ã奜ããªå Žåã¯ãæ¯èŒã«é¢ä¿ããªããã³ãã©ãŒãä»ã®ã³ã³ããŒãã³ãã«çŽæ¥æž¡ããªãã§ãã ãããäœããã®æ¹æ³ã§ããããã©ããããå¿
èŠããããŸãã
ããã§ãåç
§IDãç¶æããããåç
§IDãåé¿ããå¿
èŠããããŸãïŒ ããã©ãŒãã³ã¹ã®æé©åãžããããã å°ãªããšãããã®ã¢ãããŒãã§ã¯ãæé©åãããã³ã³ããŒãã³ãã«è² æ
ãããããããã䜿çšããã³ãŒãã«ã¯è² æ
ãããããŸããã
ãã®ãµã³ãã«ã¢ããªã±ãŒã·ã§ã³ã¯ã
Andrew Clarkã«ãã£ãŠå
¬éãããåŸã«äœæããè³æã«è¿œå ããããã®ã§ãããšæ£çŽã«èšããªããã°ãªããŸããã ãããã£ãŠãåç
§æŽåæ§ãç¶æããã¿ã€ãã³ã°ãšç¶æããªãã¿ã€ãã³ã°ãæ£ç¢ºã«ç¥ã£ãŠããããã«æãããããããŸããã
âã¬ã³ããªã³ã°ããããã£
<Route path="/topic/:id" render={({ match }) => ( <div> <h1>{match.params.id}</h1>} </div> ) />
render â
ããããã£
render â
ãå
±æç¶æ
ãäœæããã³ç¶æããããã«ååšããã³ã³ããŒãã³ããäœæããããã«äœ¿çšããããã³ãã¬ãŒã
ã§ã ïŒ
ããã§è©³çްã確èªã§ããŸã ïŒã
render
ããããã£ã®å
容ã¯ãã³ã³ããŒãã³ãã«
render
ã äŸïŒ
const App = (props) => ( <div> <h1>Welcome, {props.name}</h1> <Route path="/" render={() => ( <div> {/* props.name Route , Route PureComponent, , . */} <h1>Hey, {props.name}, let's get started!</h1> </div> )}/> </div> )
,
render
shouldComponentUpdate
. ,
PureComponent
.
, ,
render
. â , .
ãŸãšã
- , , .
- , . , .
PureComponent
shouldComponentUpdate
, , ( ).
, , , . , , , .
芪æãªãèªè
ïŒ React-?