ããã³ããšã³ããã©ãããŸããïŒ çããèŠã€ããæã確å®ãªæ¹æ³ã¯ãèªåã§æé«ã®ã©ã€ãã©ãªãè©Šãããšã§ãã çæ³çã«ã¯ãæãåçŽãªãã®ããå§ããŠãéå§ãããŠããªããã¶ã€ã³ã®ç¥ç§ãåºåå¯èœãªããŒãžã«å€ããããšãç解ããŠãããšããã§ãããã ããã«ãåºæ¬ãç解ããŠããã°ãããã¥ã¡ã³ããææ矩ã«èªãã§ãçããæããã«ãªããŸã§èªåã®å®éšãè€éã«ããããšãã§ããŸãã
ä»æ¥ã¯ãReact.jsãšVue.jsã«ã€ããŠã話ããŸãã ãããã¯ãäžçã§æã人æ°ã®ããJavaScriptã©ã€ãã©ãªã®äžéšã§ãã
ãã®ãªã¹ããèŠãŠãGitHubã®ãªããžããªãèŠãŠãã ããã ã©ã¡ããåªããæ©èœãåããŠããããŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ã®äœæã«äœ¿çšãããŸãã ãããã®æäœã¯éåžžã«ç°¡åã§ããäž»ãªããšã¯ãäœãäœã§ããããããã«ç解ããæ£ãã第äžæ©ãèžã¿åºãããšã§ãã å®éã®ãšããããã®è³æã¯ãReact and Vueã䜿çšããéçºã®ãã®æåã®ã¹ãããå°çšã§ãã
äžèŠããããã®ã©ã€ãã©ãªã¯éåžžã«äŒŒãŠããŸãã å®éããããã¯åãç®çãæãããŸãã é¡äŒŒç¹ã¯ããã«éå®ãããŸããã ç¹ã«ãVue.jsã®ããã¥ã¡ã³ãã«ã¯ãä»ã®ãã¬ãŒã ã¯ãŒã¯ãšã®æ¯èŒã«é¢ããã»ã¯ã·ã§ã³ããããŸãã ç¹å¥ãªå Žæã¯ããŸãã«å€ãã®å
±éã®ç¹åŸŽã®ããã«
ãReactãšã®æ¯èŒã«ãã£ãŠå ããã
ãŠããŸãã ãã ããäœæ¥ã®å®éçãªåŽé¢ã«é¢ããéãã«ããã«èå³ããããŸãã ã€ãŸãããããã®ã©ã€ãã©ãªã䜿çšããŠãã¢ããªã±ãŒã·ã§ã³ã®ãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ãã©ã®ããã«èšè¿°ããããã«ã€ããŠèª¬æããŠããŸãã
ã€ãã§ã«ãReactã³ãã¥ããã£ã®åå ã§äœæãããVueã®ããã¥ã¡ã³ããåŒçšããŸãããïŒãReactã§ã¯ããã¹ãŠã®ã³ã³ããŒãã³ãã¯JavaScriptå
ã§åäœãã宣èšçãªXMLã®ãããªæ§æã䜿çšããã¬ã³ããªã³ã°é¢æ°ã䜿çšããŠUIãèšè¿°ããŸããã Reactã¡ã«ããºã ã¯ãHTMLããŒã¯ã¢ãããJavaScriptã³ãŒãã«çŽæ¥åã蟌ãã®ã«åœ¹ç«ã¡ãŸãã Vueã§ã¯ãåºæ¬çã«å¥ã®ã¢ãããŒãã䜿çšãããŸãã HTMLãã¡ã€ã«ã«ãããã³ãã¬ãŒãã䜿çšããéåžžã®HTMLããŒã¯ã¢ããã«äŒŒãŠããŸãã åæã«ãJSXã®èª¬æã¯WebããŒãžã«å°éããŸããã
ReactãšVueã®åºæ¬ãç解ããããã«ãããŒãžããªã¹ããããšããåçŽãªã¿ã¹ã¯ã®è§£æ±ºçãæ€èšããŠãã ããã ãŸãããããã©ã®ããã«è¡ãããŠããã®ããããã°æåã§ã®èšèã§ãã
HTMLãªã©
ç§ãã¡ã®ã¿ã¹ã¯ã¯ãç¹å®ã®äŒç€Ÿã®æè¿éçšãããåŸæ¥å¡ã®ååã®ãªã¹ããWebããŒãžã«è¡šç€ºããïŒDOMã«è¿œå ããïŒããšã§ãã
HTMLã®ã¿ã䜿çšããŠãããè¡ãå Žåãæåã«éåžžã®HTMLãã¡ã€ã«ãäœæããå¿
èŠããããŸãïŒindex.htmlãšåŒã³ãŸãããïŒããµãŒãã¹ã¿ã°ã«å ããŠã次ã®ãããªæ§é ããããŸãã
<ul> <li> John </li> <li> Sarah </li> <li> Kevin </li> <li> Alice </li> <ul>
ããã«ã¯ç®ç«ã£ããã®ã¯äœããããŸãã;ããã¯éåžžã®HTMLãªã¹ãã§ãã ãã®äžã«ããã€ãã®èŠçŽ ãããªãéããåŽåã³ãŒãã®æåç·šéã¯ããã§ã¯ãããŸããã ããããæ°çŸãŸãã¯æ°ååã®èŠçŽ ã®ãªã¹ãã«ã€ããŠè©±ããŠããå Žåããã®ãããªãªã¹ãã«ã¯ãããšãã°åçæŽæ°ãå¿
èŠã«ãªãå¯èœæ§ãããããšããèæ
®ããŠããŸãããïŒ ReactãVueãªã©ã®ç¹æ®ãªããŒã«ããªããã°ããã®éã®ããŒã¿ãæ±ãããšã¯éåžžã«å°é£ã§ãã
ããã§ã¯ãReactããŒã«ã䜿çšããŠåãåé¡ã解決ããæ¹æ³ãèŠãŠã¿ãŸãããã
React JSX
ãã®ãããReactã䜿çšããŠãªã¹ãã衚瀺ããŸãã
æåã®ã¹ãããã¯ãå¥ã®index.htmlãã¡ã€ã«ãäœæããããšã§ãã ãããããã®äžã«ããªã¹ãã圢æããã¿ã°ã®ä»£ããã«ãéåžžã®
div
èŠçŽ ãè¿œå ããŸãã ããã¯ãReactããŒã«ã«ãã£ãŠçæããããã®ã衚瀺ãããã³ã³ãããŒãšããŠæ©èœããŸãã
ReactããããèŠã€ããŠæäœã§ããããã«ããã®èŠçŽ ã«ã¯äžæã®
ID
ãå¿
èŠã§ãã Facebookã§ã¯ïŒèª°ãç¥ããªãå Žå-Reactãããããæ¥ãŠããå ŽåïŒããããã®èŠçŽ ã®èå¥åã¯éåžžããŒã¯ãŒããrootãã§ãããããåãããšãè¡ããŸãã
<div id='root'></div>
æãéèŠãªãã®ã«æž¡ããŸãã ãã¹ãŠã®Reactã³ãŒããå«ãJavaScriptãã¡ã€ã«ãäœæããŸãã app.jsãšåŒã³ãŸãããã JSXã䜿çšããŠDOMã«æ°ããåŸæ¥å¡ãäžèŠ§è¡šç€ºã§ããããã«ããããäœæããŸãã
æåã«ãåŸæ¥å¡ã®ååã§é
åãäœæããå¿
èŠããããŸãã
const names = ['John', 'Sarah', 'Kevin', 'Alice'];
次ã«ãååã®ãªã¹ãå
šäœãåçã«è¡šç€ºããReactèŠçŽ ãäœæããå¿
èŠããããŸãã ããããã衚瀺ããããã«ã³ãŒããæåã§èšè¿°ããå¿
èŠã¯ãããŸããã
const displayNewHires = ( <ul> {names.map(name => <li>{name}</li> )} </ul> );
泚æãæãã¹ãæãéèŠãªããšã¯ãåå¥ã®
<li>
èŠçŽ ãèªåã§äœæããå¿
èŠããªãããšã§ãã ã©ã®ããã«èŠãããã説æããã®ã«ååãªã®ã§ãReactãæ®ããè¡ããŸãã ããã¯éåžžã«åŒ·åãªã¡ã«ããºã ã§ãããåè¿°ã®ãæ°åã®ãªã¹ããåé¡ã®è§£æ±ºã«æé©ã§ãã ããŒã¿éã®å¢å ã«äŒŽããReactã®æåæ€åã«å¯Ÿããå©ç¹ã¯éåžžã«æçœã«ãªããŸãã ç¹ã«ã
<li>
èŠçŽ ãããã§äœ¿çšããèŠçŽ ãããè€éãªå Žåã ç»é¢ã«ããŒã¿ã衚瀺ããããã«å¿
èŠãªæåŸã®ã³ãŒãã¯ã
ReactDom.render
é¢æ°ã§ãã
ReactDOM.render( displayNewHires, document.getElementById('root') );
ããã§ã¯ã
root
èå¥åãæã€
div
èŠçŽ ã«
displayNewHires
ã®ã³ã³ãã³ãã衚瀺ããããã«Reactã«æ瀺ããŸãã
const names = ['John', 'Sarah', 'Kevin', 'Alice']; const displayNewHires = ( <ul> {names.map(name => <li>{name}</li> )} </ul> ); ReactDOM.render( displayNewHires, document.getElementById('root') );
ããã§éèŠãªã®ã¯ãç§ãã¡ã®åã«Reactã³ãŒããããããšãå¿ããªãããšã§ãã ã€ãŸããå®è¡åã«ããããã¯ãã¹ãŠéåžžã®JavaScriptã«ã³ã³ãã€ã«ãããŸãã
'use strict'; var names = ['John', 'Sarah', 'Kevin', 'Alice']; var displayNewHires = React.createElement( 'ul', null, names.map(function (name) { return React.createElement( 'li', null, name ); }) ); ReactDOM.render(displayNewHires, document.getElementById('root'));
å®éãããããã¹ãŠã§ãã çµæã¯ãé
åããåŸæ¥å¡åã®ãªã¹ãã衚瀺ããReactã¢ããªã±ãŒã·ã§ã³ã§ãã ç¹å¥ãªããšã¯äœããããŸãããããã®ç°¡åãªäŸãããReactã§äœãã§ããã®ãããããã¯ãã§ãã ãããŠãVueã§åãããšãããæ¹æ³ã¯ïŒ
Vueãã³ãã¬ãŒã
ããã§ã¯ãååãšåæ§ã«ãååã®ãªã¹ãã䜿çšããŠWebããŒãžãäœæã§ããã¢ããªã±ãŒã·ã§ã³ãäœæããŸãã
å¥ã®index.htmlãäœæããŸãã ãã¡ã€ã«å
ã«ã
root
èå¥åãæã€ç©ºã®
div
èŠçŽ ãé
眮ããŸãã èŠçŽ ã®èå¥åã¯å¥œããªããã«å²ãåœãŠãããšãã§ããç¹å¥ãªåœ¹å²ãæãããªãããšã«æ³šæããŠãã ããã äž»ãªããšã¯ããã®
ID
ãã³ãŒãã§äœ¿çšããããã®ãšäžèŽããããšã§ãã
div
èŠçŽ ã¯ãReactã¢ããªã±ãŒã·ã§ã³ãšåã圹å²ãæãããŸãã JSã©ã€ãã©ãªãŒïŒä»åã¯VueïŒã«ãããŒãžãžã®åºåã®éå§æã«ã¢ã¯ã»ã¹ããDOMã®éšåãäŒããŸãã
HTMLãã¡ã€ã«ã®æºåãã§ããããVueã³ãŒããå«ãJavaScriptãã¡ã€ã«ãäœæããŸãã 以åã®ããã«ãapp.jsãšåŒã³ãŸãããã
ããã§ãVueãããŒãžã«ããŒã¿ã衚瀺ããæ¹æ³ãæ£ç¢ºã«èª¬æããŸãã
Vueã¯ãDOMæäœã«é¢ããŠã¯ããã³ãã¬ãŒãã¢ãããŒãã䜿çšããŸãã ããã¯ãReactã®å Žåã®ããã«ãHTMLãã¡ã€ã«ã§ã¯
div
èŠçŽ ãå®å
šã«ç©ºã«ãªããªãããšãæå³ããŸãã å®éãã³ãŒãã®å€§éšåã¯HTMLãã¡ã€ã«ã«ã¬ã³ããªã³ã°ãããŸãã
ãããããããç解ããããã«ãéåžžã®HTMLã䜿çšããŠååã®ãªã¹ããäœæããæ¹æ³ãæãåºããŸãããã
ãªã¹ãã¯ãå€æ°ã®
<li>
èŠçŽ ãå«ã
<ul>
ã¿ã°ã§è¡šãããŸãã Vueã§ã¯ãã»ãšãã©åãããšãè¡ãå¿
èŠããããŸãããããã€ãã®å€æŽãå¿
èŠã§ãã ãããã£ãŠã
<ul>
èŠçŽ ãäœæããŸãã
<ul> </ul>
ããŠããã®èŠçŽ å
ã«ã空ã®
<li>
1ã€äœæããŸãã
<ul> <li> </li> </ul>
ãããŸã§ã®ãšããããã¹ãŠãéåžžã«ããç¥ãããŠããŸãã ã¿ã°ã®å±æ§ã®ããã«èŠããVueãã£ã¬ã¯ãã£ããè¿œå ããŠã
<li>
ç·šéããŸãã
<ul> <li v-for='name in listOfNames'> </li> </ul>
ãã€ãã£ããã£ã¬ã¯ãã£ãã¯ãVueãJavaScriptæ©èœãHTMLã«çŽæ¥è¿œå ããããã«äœ¿çšããã¢ãããŒãã§ãã ãã£ã¬ã¯ãã£ãã®å
é ã«ã¯æå
v-
ããã®åŸã«ãã£ã¬ã¯ãã£ãã®åœ¹å²ãç解ã§ãã説æçãªååãç¶ããŸãã ãã®å Žåã
for
ã«ãŒãããããŸãã
listOfNames
åååã«ã€ããŠã
<li>
èŠçŽ ãã³ããŒãããã®ååãå«ãæ°ãã
<li>
èŠçŽ ã«çœ®ãæããŸãã
ããŠãã³ãŒããå®è¡å¯èœã«ããããã«ãã»ãã®å°ãã ãæ®ã£ãŠããŸãã ã€ãŸãããã§ã«èšè¿°ãããŠãããã®ã«ããããªã¹ãå
ã®ååããšã«
<li>
èŠçŽ ã圢æã§ããŸãã ãããããã®èŠçŽ ã«ã¯ãªã¹ãã®ååãå«ããå¿
èŠãããããšãã·ã¹ãã ã«ãŸã éç¥ããŠããŸããã ãããä¿®æ£ããã«ã¯ã
<li>
èŠçŽ ã«ãMustacheãã³ãã¬ãŒãã«äŒŒãæ§æãæã€æ§æãè¿œå ããå¿
èŠããããŸãã ããªãã¯ãã§ã«ä»ã®JSã©ã€ãã©ãªã§ãããèŠãŠãããããããŸããã
<ul> <li v-for='name in listOfNames'> {{name}} </li> </ul>
<li>
èŠçŽ ã¯æºåå®äºã§ãã ããã§ãVueããŒã«ã«ãã£ãŠåœ¢æããããªã¹ãã®åèŠçŽ ã¯
listOfNames
ããååãåºåã
listOfNames
ã ãã®å Žåã®ãååããšããåèªã¯ä»»æã«éžæãããããšãèŠããŠãã䟡å€ããããŸãã åãæåã§ãä»ã®ãããšãã°ãã¢ã€ãã ãã䜿çšã§ããŸãã ããŒã¯ãŒããè¡ãããšã¯ãååã®ãªã¹ããåŠçãããšãã«äœ¿çšããã眮æãã£ãŒã«ããšããŠæ©èœããã ãã§ãã
ããŒã¿ã»ãããäœæããã¢ããªã±ãŒã·ã§ã³ã§Vueãåæåããããã«ã®ã¿æ®ããŸãã ãããè¡ãã«ã¯ãVueã®æ°ããã€ã³ã¹ã¿ã³ã¹ãäœæããŸãã
app
å€æ°ã«å²ãåœãŠãŸãã
let app = new Vue({ });
Vueãªããžã§ã¯ãã¯ããã€ãã®ãã©ã¡ãŒã¿ãŒãåãå
¥ããŸãã æåã®ããããŠããããæãéèŠãªã®ã¯ã
el
ïŒã€ãŸãèŠçŽ ïŒã§ãã 圌ã¯æ°ããèŠçŽ ãè¿œå ããå¿
èŠãããDOMã®æ£ç¢ºãªå ŽæãVueã«äŒããŸãã ããã¯ãReactã®åäœã«éåžžã«äŒŒãŠããŸãã
let app = new Vue({ el:'#root', });
æåŸã®ã¹ãããã¯ãVueã¢ããªã±ãŒã·ã§ã³ã«ããŒã¿ãè¿œå ããããšã§ãã ãã®ã©ã€ãã©ãªã§ã¯ãããŒã¿ã¯Vueã€ã³ã¹ã¿ã³ã¹ãã©ã¡ãŒã¿ãŒãä»ããŠã¢ããªã±ãŒã·ã§ã³ã«è»¢éãããŸãã ããã«ãåVueã€ã³ã¹ã¿ã³ã¹ã¯ãåçš®é¡ã®ãã©ã¡ãŒã¿ãŒã1ã€ã ãæã€ããšãã§ããŸãã ããªãã®æ°ã®ãã©ã¡ãŒã¿ãŒããããŸããããã®äŸã§ã¯2ã€ã ãã«çŠç¹ãåœãŠãããšãã§ããŸã-ããã¯äžèšã®
el
ãš
data
ãã©ã¡ãŒã¿ãŒã§ãã
let app = new Vue({ el:'#root', data: { listOfNames: ['Kevin', 'John', 'Sarah', 'Alice'] } });
data
ãªããžã§ã¯ãã«
listOfNames
é
åãå«ãŸããããã«
listOfNames
ã ã¢ããªã±ãŒã·ã§ã³ã§ãã®ããŒã¿ã»ããã䜿çšããå¿
èŠãããå Žåã¯ããã£ã¬ã¯ãã£ãã䜿çšããŠåŒã³åºãã ãã§æžã¿ãŸãã ãšãŠãç°¡åã§ãã å®æããã¢ããªã±ãŒã·ã§ã³ã¯æ¬¡ã®ããã«ãªããŸãã
HTMLïŒ
<div id="root"> <ul> <li v-for='name in listOfNames'> {{name}} </li> </ul> </div>
JavaScriptïŒ
new Vue({ el:"#root", data: { listOfNames: ['Kevin', 'John', 'Sarah', 'Alice'] } });
ãããã«
ããã§ãReactãšVueã䜿çšããŠç°¡åãªã¢ããªã±ãŒã·ã§ã³ãäœæããæ¹æ³ãããããŸããã ç°¡åãªäŸã®å©ããåããŠãReactãšVueã䜿çšããŠéçºãšãªã¢ã®æåã®ã¹ããããèžã¿ããããªãã®ãããã³ããšã³ãã©ã€ãã©ãªãæ¢ãã«é²ãæºåãã§ããŠããããšãé¡ã£ãŠããŸãã
æåŸã«ãäž¡æ¹ã®ã©ã€ãã©ãªãåªããæ©èœã»ãããæäŸããŠãããšèšãããã§ãã éåžžãããã¯ããããç¿æ
£ã®åé¡ã§ãããVueã¯å€å°äœ¿ããããã§ãã VueãJSXããµããŒãããŠããããšã¯æ³šç®ã«å€ããŸãããVueã¢ããªã±ãŒã·ã§ã³ãäœæããããã®åæ§ã®ã¢ãããŒãã¯ãã£ãã«äœ¿çšãããŸããã
ãããã«ãããReactãšVueã¯ã©ã¡ãã匷åãªããŒã«ã§ããããããã䜿çšããŠãåªããWebã¢ããªã±ãŒã·ã§ã³ãäœæã§ããäœãéžæããŠã倱ãããããšã¯ãããŸããã
芪æãªãèªè
ïŒ ããã³ããšã³ãéçºã«ã¯äœã䜿çšããŸããïŒ