ç§ãã¡ã¯ããReactã®ã€ã³ã¿ã©ã¯ãã£ããªæ§è³ªã«ãããåœå®¶ãšãã®åœ¹å²ãã®äžç¯ã«ç²Ÿéããããšãæçš¿ã§ææ¡ããŸãã
ãã®æ¬ã®ç« ã1ã€ã ãèªãå¿ èŠãããå Žåã¯ããã®ç« ãéžæããŠãã ããã ç¶æ ããªããã°ãReactã³ã³ããŒãã³ãã¯é«åºŠãªéçãã¿ãŒã³ã«ãšã©ãŸããŸãã ãã®ç« ã®æŠå¿µãç解ããããšã§ãããã«èå³æ·±ãã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ã§ããã®ã§ãç§ã®ç±æãå ±æããŠãã ããã
ãªãŒãã³ã³ããªãŒãã§å ¥åãã£ãŒã«ããæ§ç¯ããŠãããšæ³åããŠãã ããïŒå³4.1ïŒã ããŒã¿ãå ¥åãããšãããã£ãŒã«ãã¯ãµãŒããŒã«ãªã¯ãšã¹ããçºè¡ããŠãWebããŒãžã«åºåã衚瀺ããããã®é©åãªãªãã·ã§ã³ã«é¢ããæ å ±ãååŸããå¿ èŠããããŸãã ãããŸã§ããããã£ãæäœããŠããŸããããããããã£ãå€æŽãããšããŸããŸãªãã¥ãŒãååŸã§ããããšãããã£ãŠããŸãã ãã ããããããã£ã¯ã³ã³ããŒãã³ãã®äœææã«æž¡ããããããçŸåšã®ã³ã³ããŒãã³ãã®ã³ã³ããã¹ãã§ã¯å€æŽã§ããŸããã
ã€ãŸããçŸåšã®ã³ã³ããŒãã³ãã§ã¯ããããã£ã¯äžå€ã§ããã€ãŸããã³ã³ããŒãã³ããåäœæããŠèŠªããæ°ããå€ã転éããªãéãããã®ã³ã³ããŒãã³ãã®ããããã£ãå€æŽããããšã¯ã§ããŸããïŒå³4.2ïŒã ãã ãããµãŒããŒããåä¿¡ããæ å ±ã¯ã©ããã«ä¿åããå¿ èŠãããããã®åŸããã¥ãŒã«æ°ãããªãã·ã§ã³ã®ãªã¹ãã衚瀺ãããŸãã ããããã£ãå€æŽã§ããªãå Žåã«ãã¥ãŒãæŽæ°ããæ¹æ³ã¯ïŒ
èãããã解決çã®1ã€ã¯ããµãŒããŒããæ°ããå¿çãåãåããã³ã«ãæ°ããããããã£ã§èŠçŽ ãã¬ã³ããªã³ã°ããããšã§ãã ãããããã®åŸãã³ã³ããŒãã³ãã®å€åŽã«ããžãã¯ãé 眮ããå¿ èŠããããŸã-ã³ã³ããŒãã³ãã¯èªçµŠèªè¶³ããªããªããŸãã æããã«ãããããã£å€ãå€æŽã§ããããªãŒãã³ã³ããªãŒããèªçµŠèªè¶³ã§ãªããã°ãªããªãå Žåãããããã£ã䜿çšããããšã¯äžå¯èœã§ãã 次ã«è³ªåãçºçããŸãïŒã³ã³ããŒãã³ãïŒcreateElementïŒïŒãŸãã¯JSX <NAME />ïŒãåäœæããã«ãã€ãã³ãã«å¿ããŠãã¥ãŒãæŽæ°ããæ¹æ³ã¯ïŒ ç¶æ ã解決ããã®ã¯ãã®åé¡ã§ãã
ãµãŒããŒããã®å¿çã®æºåãæŽããšãã³ãŒã«ããã¯ã³ãŒãã¯ããã«å¿ããŠã³ã³ããŒãã³ãã®ç¶æ ãå€æŽããŸãã ãã®ã³ãŒããèªåã§äœæããå¿ èŠããããŸãã ãã ããç¶æ ãæŽæ°ããããšãReactã¯èªåçã«ãã¥ãŒãæŽæ°ããŸãïŒæŽæ°ããå¿ èŠãããå Žæãã€ãŸãç¶æ ããŒã¿ã䜿çšãããå Žæã®ã¿ïŒã
Reactã³ã³ããŒãã³ãã®ç¶æ ã«ãããã€ã³ã¿ã©ã¯ãã£ãã§æå³ã®ããReactã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ã§ããŸãã ç¶æ ã¯ãããŒã¿ãä¿åããããŒã¿ã®å€æŽã«å¿ããŠãã¥ãŒãèªåçã«æŽæ°ã§ããReactã³ã³ããŒãã³ããæ§ç¯ã§ããåºæ¬æŠå¿µã§ãã
Reactã³ã³ããŒãã³ãã®ç¶æ ã¯äœã§ããïŒ
Reactç¶æ ã¯ãå€æŽå¯èœãªã³ã³ããŒãã³ãããŒã¿ãŠã§ã¢ããŠã¹-ãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ãšããžãã¯ã®ã¹ã¿ã³ãã¢ãã³ã®æ©èœæåãããã¯ã§ãã ãå¯å€æ§ããšã¯ãç¶æ å€ãå€åããå¯èœæ§ãããããšãæå³ããŸãã ãã¥ãŒã®ç¶æ ã䜿çšããŠïŒã¬ã³ããªã³ã°ïŒïŒïŒãåŸã§å€ãå€æŽãããšããã¥ãŒã®å€èŠ³ã«åœ±é¿ãäžããããšãã§ããŸãã
æ¯phorïŒã³ã³ããŒãã³ããé¢æ°ãšããŠæ³åãããã®å ¥åã«ããããã£ãšç¶æ ã転éãããå Žåãé¢æ°ã®çµæã¯ãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ïŒãã¬ãŒã³ããŒã·ã§ã³ïŒã®èª¬æã«ãªããŸãã ããããã£ãšç¶æ ã¯ãã¥ãŒãå±éããŸãããç°ãªãç®çã«äœ¿çšãããŸãïŒã»ã¯ã·ã§ã³4.3ãåç §ïŒã
ç¶æ ãæäœããå Žåãååã§ç¶æ ã«ã¢ã¯ã»ã¹ããŸãã ååã¯ãthis.stateãªããžã§ã¯ãã®å±æ§ïŒã€ãŸããã³ã³ããŒãã³ãããããã£ã§ã¯ãªãããªããžã§ã¯ãããŒãŸãã¯ãªããžã§ã¯ãããããã£ïŒã§ããããšãã°ãthis.state.autocompleMatchesãŸãã¯this.state.inputFieldValueã§ãã
ç¶æ ããŒã¿ã¯ãå€ãã®å Žåããã¥ãŒã®åçãªæ å ±ã衚瀺ããŠãã¥ãŒã®ã¬ã³ããªã³ã°ãæ¡åŒµããããã«äœ¿çšãããŸãã ãªãŒãã³ã³ããªãŒããã£ãŒã«ãã®ä»¥åã®äŸã«æ»ããšããµãŒããŒãžã®XHRãªã¯ãšã¹ãã«å¿ããŠç¶æ ãå€åããŸãããµãŒããŒãžã®XHRãªã¯ãšã¹ãã¯ãããŒã¿ããã£ãŒã«ãã«å ¥åããããšã«ãã£ãŠéå§ãããŸãã Reactã¯ããã¥ãŒã§äœ¿çšãããç¶æ ãå€æŽããããšãã«ãã¥ãŒãæŽæ°ãããããã«ããŸãã å®éãç¶æ ãå€åãããšãè¡šçŸã®å¯Ÿå¿ããéšåã®ã¿ãå€åããŸãïŒåã ã®èŠçŽ ãããã«ã¯åã ã®èŠçŽ ã®å±æ§å€ãŸã§ïŒã
DOMã®ä»ã®ãã¹ãŠã¯å€æŽãããŸããã ããã¯ãReactã調æŽããã»ã¹äžã«ãã«ã¿ïŒå€æŽã®å šäœïŒã決å®ããããã«äœ¿çšããä»®æ³DOMã¢ãã«ïŒã»ã¯ã·ã§ã³1.1.1ãåç §ïŒã®ãããã§å¯èœã§ãã ãã®äºå®ã«ããã宣èšçãªã¹ã¿ã€ã«ã§ã³ãŒããæžãããšãã§ããŸãã Reactããã¹ãŠã®ã«ãŒãã³ãå®è¡ããŸãã ãã¬ãŒã³ããŒã·ã§ã³ãå€æŽããäž»ãªæ®µéã«ã€ããŠã¯ã第5ç« ã§èª¬æããŸãã
Reactéçºè ã¯ãç¶æ ã䜿çšããŠæ°ãããŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ãçæããŸãã ã³ã³ããŒãã³ãããããã£ïŒthis.propsïŒãéåžžã®å€æ°ïŒinputValueïŒãããã³ã¯ã©ã¹å±æ§ïŒthis.inputValueïŒã¯ããããã®å€ãïŒçŸåšã®ã³ã³ããŒãã³ãã®ã³ã³ããã¹ãã§ïŒå€æŽããŠããã¥ãŒã®å€æŽãããªã¬ãŒããªããããããã«ã¯é©ããŠããŸããã ããšãã°ã次ã®ã¹ããããã¯ã¢ã³ããã¿ãŒã³ã§ãç¶æ 以å€ã®å€ãå€æŽããŠããã¥ãŒãæŽæ°ãããªãããšã瀺ããŠããŸãã
// : ! let inputValue = 'Texas' class Autocomplete extends React.Component { updateValues() â { ( ) this.props.inputValue = 'California' inputValue = 'California' this.inputValue = 'California' } render() { return ( <div> {this.props.inputValue} {inputValue} {this.inputValue} </div> ) } }
ããã§ã¯ãReactã³ã³ããŒãã³ãã®ç¶æ ãæäœããæ¹æ³ãèŠãŠã¿ãŸãããã
ç¶æ ãæäœãã
ç¶æ ãæäœããã«ã¯ãå€ã«ã¢ã¯ã»ã¹ããŠæŽæ°ããåæå€ãèšå®ã§ããå¿ èŠããããŸãã Reactã³ã³ããŒãã³ãã®ç¶æ ãåç §ããããšããå§ããŸãããã
å·ãžã®ã¢ã¯ã»ã¹
ç¶æ ãªããžã§ã¯ãã¯ã³ã³ããŒãã³ãã®å±æ§ã§ãããthisãªã³ã¯ããã¢ã¯ã»ã¹ããå¿ èŠããããŸãïŒäŸïŒthis.state.nameïŒã èŠããŠããããã«ãå€æ°ã¯ãäžæ¬åŒ§ïŒ{}ïŒã§JSXã³ãŒãã«ã¢ã¯ã»ã¹ããŠè¡šç€ºã§ããŸãã åæ§ã«ãrenderïŒïŒã§ã¯ã{ãthis.state.inputFieldValue}ãªã©ã®this.stateãïŒéæšæºã³ã³ããŒãã³ãã®ä»ã®å€æ°ãŸãã¯ã¯ã©ã¹å±æ§ãšåæ§ã«ïŒã¬ã³ããªã³ã°ã§ããŸãã ãã®æ§æã¯ãthis.props.nameã®ããããã£ã«ã¢ã¯ã»ã¹ããããã®æ§æã«äŒŒãŠããŸãã
ç§ãã¡ã¯ããªããåŠãã ããšã䜿ã£ãŠå³ã®æèšãå®è£ ããŸãã 4.3ã ç§ãã¡ã®ç®æšã¯ã誰ã§ãç°¡åã«ã€ã³ããŒãããŠã¢ããªã±ãŒã·ã§ã³ã§äœ¿çšã§ããèªåŸåã³ã³ããŒãã³ãã¯ã©ã¹ãäœæããããšã§ãã æèšã¯çŸåšã®æå»ã衚瀺ããå¿ èŠããããŸãã
ãããžã§ã¯ãã®æ§é ã¯æ¬¡ã®ãšããã§ãã
/clock index.html /jsx script.jsx clock.jsx /js script.js clock.js react.js react-dom.js
Babel CLIããã©ããã³ã°ãã©ã°ïŒ-wïŒããã³ãã£ã¬ã¯ããªïŒ-dïŒãšãšãã«äœ¿çšããŠããã¹ãŠã®JSXãœãŒã¹ãã¡ã€ã«ãclock / jsxããã¿ãŒã²ããclock / jsãã©ã«ããŒã«ã³ã³ãã€ã«ããå€æŽãæ€åºããããåã³ã³ãã€ã«ããŸãã ããã«ã芪ãã©ã«ããŒch04ã®package.jsonãã¡ã€ã«ã«ã³ãã³ããnpmã¹ã¯ãªãããšããŠä¿åããch04ããnpm run build-clockã³ãã³ããå®è¡ããŸããã
"scripts": { "build-clock": "./node_modules/.bin/babel clock/jsx -d clock/js -w" },
ãã¡ãããæéã¯æ¢ãŸããŸããïŒå¥œããã©ããã¯åããªãïŒã ãã®ããããã¥ãŒã絶ããæŽæ°ããå¿ èŠãããããã®ããã«ç¶æ ã䜿çšã§ããŸãã ãããcurrentTimeãšåä»ãããªã¹ã4.1ã«ç€ºãããã«ç¶æ ã®ã¬ã³ããªã³ã°ãæŽçããŠã¿ãŸãã
ãªã¹ã4.1ã JSXç¶æ ã®ã¬ã³ããªã³ã°
class Clock extends React.Component { render() { return <div>{this.state.currentTime}</div> } } ReactDOM.render( <Clock />, document.getElementById('content') )
ãšã©ãŒã¡ãã»ãŒãžã衚瀺ãããŸããäžæãªTypeErrorïŒnullã®ãããã㣠'currentTime'ãèªã¿åãããšãã§ããŸããã éåžžãJavaScriptãšã©ãŒã¡ãã»ãŒãžã«ã¯ãdrããŠãã人ã®ããã®å·ããæ°Žãšã»ãŒåãå©ç¹ããããŸãã å°ãªããšããã®å ŽåãJavaScriptãæå³ã®ããã¡ãã»ãŒãžã衚瀺ããã®ã¯è¯ãããšã§ãã
ãã®ã¡ãã»ãŒãžã¯ãcurrentTimeã®å€ãæªå®çŸ©ã§ããããšã瀺ããŠããŸãã ããããã£ãšã¯ç°ãªããç¶æ ã¯èŠªã«èšå®ãããŸããã renderïŒïŒã§setStateãåŒã³åºãããšã倱æããŸããã«ãŒããäœæããããïŒsetState-> render-> setState ...ïŒ-Reactã¯ãšã©ãŒãå ±åããŸãã
åæç¶æ ã®å²ãåœãŠ
renderïŒïŒã§ç¶æ ããŒã¿ã䜿çšããåã«ãç¶æ ãåæåããå¿ èŠãããããšã¯æ¢ã«èŠãŸããã åæç¶æ ãèšå®ããã«ã¯ãES6ã¯ã©ã¹React.Componentã®æ§æã§ã³ã³ã¹ãã©ã¯ã¿ãŒã§this.stateã䜿çšããŸãã ããããã£ã§superïŒïŒãåŒã³åºãããšãå¿ããªãã§ãã ããã ããããªããšã芪ã®ããžãã¯ïŒReact.ComponentïŒãæ©èœããŸããã
class MyFancyComponent extends React.Component { constructor(props) { super(props) this.state = {...} } render() { ... } }
åæç¶æ ãå²ãåœãŠããšãã«ãä»ã®ããžãã¯ãè¿œå ããããšãã§ããŸããããšãã°ãnew DateïŒïŒã䜿çšããŠcurrentTimeã®å€ãèšå®ããŸãã 以äžã«ç€ºãããã«ãtoLocaleStringïŒïŒã䜿çšããŠããŠãŒã¶ãŒã®çŸåšäœçœ®ã®æ£ããæ¥ä»/æå»åœ¢åŒãååŸããããšãã§ããŸãïŒch04 /ã¯ããã¯ïŒã
ãªã¹ã4.2ã ã¯ããã¯ã³ã³ããŒãã³ãã³ã³ã¹ãã©ã¯ã¿ãŒ
class Clock extends React.Component { constructor(props) { super(props) this.state = {currentTime: (new Date()).toLocaleString()} } ... }
this.stateã®å€ã¯ãªããžã§ã¯ãã§ãªããã°ãªããŸããã ES6ããã®ã³ã³ã¹ãã©ã¯ã¿ïŒïŒã®è©³çŽ°ã¯èª¬æããŸããã github.com/azat-co/cheatsheets/tree/master/es6ã®ä»é²Dããã³ES6ã®æŠèŠãåç §ããŠãã ããã äžçªäžã®è¡ã¯ãä»ã®OOPèšèªãšåæ§ã«ãã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ãäœæããããšãã«ã³ã³ã¹ãã©ã¯ã¿ãŒïŒã€ãŸããã³ã³ã¹ãã©ã¯ã¿ãŒïŒïŒïŒãåŒã³åºãããããšã§ãã ã³ã³ã¹ãã©ã¯ã¿ãŒã¡ãœããã®ååã¯ããã ãã§ããå¿ èŠããããŸãã ES6ã®ã«ãŒã«ã®1ã€ãæ€èšããŠãã ããã ããã«ãconstructorïŒïŒã¡ãœãããäœæãããšããã»ãšãã©ã®å ŽåãsuperïŒïŒåŒã³åºãããã®äžã«å«ããå¿ èŠããããŸããããããªããšã芪ã®ã³ã³ã¹ãã©ã¯ã¿ãŒã¯å®è¡ãããŸããã äžæ¹ãconstructorïŒïŒã¡ãœãããå®çŸ©ããªãå Žåãããã©ã«ãã§superïŒïŒã®åŒã³åºããæ³å®ãããŸãã
ååcurrentTimeã¯ãªãã·ã§ã³ã§ãã åŸã§ãã®ç¶æ ãèªã¿åã£ãŠæŽæ°ãããšãã«ãåãååã䜿çšããå¿ èŠããããŸãã
ç¶æ ãªããžã§ã¯ãã«ã¯ããã¹ãããããªããžã§ã¯ããŸãã¯é åãå«ããããšãã§ããŸãã 次ã®äŸã¯ãæžç±ã®èª¬æã®é åãç¶æ ã«è¿œå ããŸãã
class Content extends React.Component { constructor(props) { super(props) this.state = { githubName: 'azat-co', books: [ 'pro express.js', 'practical node.js', 'rapid prototyping with js' ] } } render() { ... } }
constructorïŒïŒã¡ãœããã¯ãã¯ã©ã¹ã«åºã¥ããŠReactèŠçŽ ãäœæãããšãã«1åã ãåŒã³åºãããŸãã ãããã£ãŠãthis.stateã䜿çšããŠãconstructorïŒïŒã¡ãœããã§çŽæ¥ç¶æ ãèšå®ã§ããŸãã this.state = ...ã§ç¶æ ãçŽæ¥èšå®ãŸãã¯æŽæ°ããªãã§ãã ãããäºæããªãçµæã«ãªãå¯èœæ§ããããŸãã
ãããã£ãŠãåæå€ã®ã¿ãååŸããŸãããããã¯ããã«æ代é ãã«ãªããŸã-ããã1ç§ã§ã çŸåšã®æå»ã衚瀺ããªãæèšãå¿ èŠãªã®ã¯èª°ã§ããïŒ å¹žããªããšã«ãçŸåšã®ç¶æ ãæŽæ°ããã¡ã«ããºã ããããŸãã
ã¹ããŒã¿ã¹æŽæ°
ç¶æ ã¯ãthis.setStateïŒããŒã¿ãã³ãŒã«ããã¯ïŒã¯ã©ã¹ã®ã¡ãœããã«ãã£ãŠå€æŽãããŸãã ãã®ã¡ãœãããåŒã³åºããããšãReactã¯ããŒã¿ãçŸåšã®ç¶æ ãšçµã¿åãããŠrenderïŒïŒãåŒã³åºãããã®åŸã³ãŒã«ããã¯ãåŒã³åºããŸãã
ã¡ãœããã¯éåæã«åäœãããããsetStateïŒïŒã§ã³ãŒã«ããã¯ã³ãŒã«ããã¯ãå®çŸ©ããããšãéèŠã§ãã ã¢ããªã±ãŒã·ã§ã³ãæ°ããç¶æ ã«äŸåããŠããå Žåããã®ã³ãŒã«ããã¯ã䜿çšããŠãæ°ããç¶æ ã䜿çšå¯èœã«ãªã£ãŠããããšã確èªã§ããŸãã
setStateïŒïŒãå®äºããã®ãåŸ ããã«ãã€ãŸãéåææäœãå®è¡ãããšãã«åæããŠåäœããã®ãåŸ ããã«ç¶æ ãæŽæ°ããããšä»®å®ãããšããšã©ãŒãçºçããããšããããŸãïŒããã°ã©ã ã¯ç¶æ å€ã®æŽæ°ã«äŸåããç¶æ ã¯å€ããŸãŸã§ã
ãããŸã§ãç¶æ ããã®æéãã¬ã³ããªã³ã°ããŸããã åæç¶æ ã®èšå®æ¹æ³ã¯æ¢ã«ç¥ã£ãŠããŸãããæ¯ç§æŽæ°ããå¿ èŠããããŸãããïŒ ãããè¡ãã«ã¯ããã©ãŠã¶ã¿ã€ããŒé¢æ°setIntervalïŒïŒïŒhttp://mng.bz/P2d6ïŒã䜿çšããŸããããã«ãããnããªç§ããšã«ç¶æ ãæŽæ°ãããŸãã setIntervalïŒïŒã¡ãœããã¯ãã»ãŒãã¹ãŠã®ææ°ã®ãã©ãŠã¶ãŒã§ã°ããŒãã«ãšããŠå®è£ ãããŠããŸããã€ãŸããè¿œå ã®ã©ã€ãã©ãªããã¬ãã£ãã¯ã¹ãªãã§äœ¿çšã§ããŸãã äŸïŒ
setInterval(()=>{ console.log('Updating time...') this.setState({ currentTime: (new Date()).toLocaleString() }) }, 1000)
ã«ãŠã³ãããŠã³ãéå§ããã«ã¯ãsetIntervalïŒïŒã1åã ãåŒã³åºãå¿ èŠããããŸãã ãã®ç®çã®ããã ãã«launchClockïŒïŒã¡ãœãããäœæããŸãããã launchClockïŒïŒã¯ã³ã³ã¹ãã©ã¯ã¿ãŒã§åŒã³åºãããŸãã ã³ã³ããŒãã³ãã®æçµããŒãžã§ã³ããªã¹ã4.3ã«ç€ºããŸãïŒch04 / clock / jsx / clock.jsxïŒã
äŸã®ããã«ãlaunchClockïŒïŒã¡ãœããïŒã³ã³ã¹ãã©ã¯ã¿ãŒã§åŒã³åºãããïŒã ãã§ãªããsetStateïŒïŒã¡ãœããã¯ã©ãã§ãåŒã³åºãããšãã§ããŸãã éåžžãsetStateïŒïŒã¡ãœããã¯ãã€ãã³ããã³ãã©ãŒããããŸãã¯ããŒã¿ã®åä¿¡æãŸãã¯æŽæ°æã«ã³ãŒã«ããã¯ãšããŠåŒã³åºãããŸãã
ãã³ãthis.state.name = 'new name'ãšãã圢åŒã®ã³ãã³ãã䜿çšããŠã³ãŒãã®ç¶æ ãå€æŽããããšããŠããäœãèµ·ãããŸããã å®éã®DOMã¢ãã«ã®åã¬ã³ããªã³ã°ãšæŽæ°ã¯å¿ èŠãããŸããã ã»ãšãã©ã®å ŽåãsetStateïŒïŒã䜿çšããªãçŽæ¥çãªç¶æ å€æŽã¯ã¢ã³ããã¿ãŒã³ã§ãããåé¿ããå¿ èŠããããŸãã
setStateïŒïŒã¡ãœããã¯ãæž¡ãããç¶æ ã®ã¿ãæŽæ°ããããšã«æ³šæããããšãéèŠã§ãïŒéšåçã«ãŸãã¯ããŒãžãããŸãããå®å šãªçœ®æã¯ãããŸããïŒã æ¯åç¶æ ãªããžã§ã¯ãå šäœã眮ãæããããã§ã¯ãããŸããã ãããã£ãŠã3ã€ã®ç¶æ ã®ãã¡1ã€ã ããå€æŽãããå Žåãä»ã®2ã€ã¯å€æŽãããŸããã 次ã®äŸã§ã¯ãuserEmailãšuserIdã¯å€æŽãããŸããã
constructor(props) { super(props) this.state = { userName: 'Azat Mardan', userEmail: 'hi@azat.co', userId: 3967 } } updateValues() { this.setState({userName: 'Azat'}) }
3ã€ã®ç¶æ ãã¹ãŠãæŽæ°ããå Žåã¯ããããã®ç¶æ ã®æ°ããå€ãsetStateïŒïŒã«æž¡ãããšã«ããããããæ瀺çã«è¡ãå¿ èŠããããŸãã ïŒçŸåšåäœããªããªã£ãå€ãã³ãŒãã§ããthis.replaceStateïŒïŒã¡ãœãããèŠã€ããããšããããŸããããã¯å ¬åŒã«å»æ¢ãããŸãããååããæšæž¬ã§ããããã«ãç¶æ ãªããžã§ã¯ãå šäœããã¹ãŠã®å±æ§ã«çœ®ãæããŸãããïŒ
setStateïŒïŒãåŒã³åºããšrenderïŒïŒã®å®è¡ãéå§ãããããšã«æ³šæããŠãã ããã ã»ãšãã©ã®å Žåãæ©èœããŸãã ã³ãŒããå€éšããŒã¿ã«äŸåããç¹æ®ãªã±ãŒã¹ã§ã¯ãthis.forceUpdateïŒïŒãåŒã³åºããŠåã¬ã³ããªã³ã°ãéå§ã§ããŸãã ããã§ãããã®ãããªãœãªã¥ãŒã·ã§ã³ã¯æãŸãããããŸãããïŒç¶æ ã§ã¯ãªãïŒå€éšããŒã¿ã«äŸåãããšãã³ã³ããŒãã³ãã®ä¿¡é Œæ§ãäœäžããå€éšèŠå ã«äŸåããããã«ãªãããã§ãïŒç·å¯ãªçµåïŒã
åè¿°ããããã«ãç¶æ ãªããžã§ã¯ãã¯this.stateã§ã¢ã¯ã»ã¹ã§ããŸãã JSXã§ã¯ãåºåå€ã¯äžæ¬åŒ§ïŒ{}ïŒã§å²ãŸããŠããããããã¥ãŒïŒã€ãŸããrenderã¡ãœããã®returnã³ãã³ãïŒã§ç¶æ ããããã£ã宣èšããã«ã¯ãè¡šèš{this.state.NAME}ã䜿çšããŸãã
ãã¥ãŒã§ç¶æ ããŒã¿ïŒããšãã°ãåºåãif / elseã³ãã³ããåã®å±æ§å€ãŸãã¯ããããã£å€ãšããŠïŒã䜿çšããsetStateïŒïŒæ°ããå€ãæž¡ããšãReactããžãã¯ãçºçããŸãã ããïŒ Reactã¯ãå¿ èŠãªãã¹ãŠã®HTMLããŒã¯ã¢ãããæŽæ°ããŸãã ããã¯ããæŽæ°äž...ãããã³ãã¬ã³ããªã³ã°äž...ãã«ãŒãã衚瀺ãããDevToolsã³ã³ãœãŒã«ã§ç¢ºèªã§ããŸãã ãããŠçŽ æŽãããããšã¯ãããã¯çµ¶å¯Ÿçã«å¿ èŠãªæå°éã®DOMèŠçŽ ã«ã®ã¿åœ±é¿ãããšããããšã§ãã
»æ¬ã®è©³çŽ°ã«ã€ããŠã¯ãåºç瀟ã®ãŠã§ããµã€ããã芧ãã ãã
» ã³ã³ãã³ã
» æç²
ããŒã«ãŒã®ã¯ãŒãã³ã20ïŒ ãªã-React
æ¬ã®çŽçãæ¯æããããšãé»åçã®æ¬ãé»åã¡ãŒã«ã§éä¿¡ãããŸãã