ãã®ã¢ãããŒãã«ã¯é·æããããŸããReactããã¹ã¿ãŒããªããããã«ç·Žç¿ããããšåªåãã人ã¯ãå ¬åŒããã¥ã¡ã³ãã調ã¹ãŠããžãã¹ã«åãæããã ãã§ãã ãã®è³æïŒããã§ã¯ãèå³ãããå Žåã¯ããã®ãããªããŒãžã§ã³ïŒã¯ã次ã®è³ªåã«å¯ŸããçããèŠã€ããã人ã®ããã«æžãããŠããŸããReactããã®ããã«æ©èœããã®ã¯ãªãã§ããïŒReact APIããã®ããã«èšèšãããŠããã®ã¯ãªãã§ããïŒã
ãªãåå¿ããã®ã§ããïŒ
ã³ã³ããŒãã³ãããããã¯ãŒã¯éä¿¡ãã¢ããªã±ãŒã·ã§ã³ã®ããžãã¹ããžãã¯ããŸãã¯ãã®ç¶æ ãèªèããŠããªããšãäœæ¥ã楜ã«ãªããŸããåãå ¥åãã©ã¡ãŒã¿ãåãåããã®ãããªã³ã³ããŒãã³ãã¯ãåžžã«åãèŠèŠèŠçŽ ã圢æããŸãã
Reactã©ã€ãã©ãªãç»å ŽãããšãJavaScriptãã¬ãŒã ã¯ãŒã¯ãšã©ã€ãã©ãªã®åäœæ¹æ³ãæ ¹æ¬çã«å€ãããŸãããä»ã®åæ§ã®ãããžã§ã¯ããMVCãMVVMãªã©ã®ã¢ã€ãã¢ãæšé²ããäžæ¹ã§ãReactã¯ç°ãªãã¢ãããŒããæ¡çšããŸãããã€ãŸããããã§ã¯ãã¢ããªã±ãŒã·ã§ã³ã®ããžã¥ã¢ã«ã³ã³ããŒãã³ãã®ã¬ã³ããªã³ã°ã¯ãã¢ãã«ã®è¡šç€ºããåé¢ãããŠããŸãã Reactã®ãããã§ãå®å šã«æ°ããã¢ãŒããã¯ãã£ãJavaScriptããã³ããšã³ããšã³ã·ã¹ãã ã«ç»å ŽããŸãã-Fluxã
ReactããŒã ããããè¡ã£ãã®ã¯ãªãã§ããïŒ MVCã¢ãŒããã¯ãã£ãjQueryã§èšè¿°ãããã¹ãã²ããã£ã³ãŒããªã©ããã®ã¢ãããŒãã以åã®ã¢ãããŒããããåªããŠããã®ã¯ãªãã§ããïŒãããã®è³ªåã«èå³ãããå Žåã¯ãFacebookã§JavaScriptã¢ããªã±ãŒã·ã§ã³éçºã«é¢ãããã®2013幎ã®è¬æŒãã芧ãã ããã
2013幎ãFacebookã¯ãã£ãããã©ãããã©ãŒã ãžã®æ¬æ Œçãªçµ±åäœæ¥ãå®äºããŸããããã®æ°æ©èœã¯ãããžã§ã¯ãã®ã»ãŒãã¹ãŠã®ããŒãžã«çµã¿èŸŒãŸããŠããããã£ããã¯ãã©ãããã©ãŒã ã§ã®äœæ¥ã®éåžžã®ã·ããªãªã«åœ±é¿ãäžããŸãããããã¯ã以åã¯ç°¡åã§ã¯ãªãã£ãå¥ã®ã¢ããªã±ãŒã·ã§ã³ã«åã蟌ãŸããè€éãªã¢ããªã±ãŒã·ã§ã³ã§ããã FacebookããŒã ã¯ãå¶åŸ¡ãããŠããªãDOMãã¥ãŒããŒã·ã§ã³ãšãæ°ããç°å¢ã§åæéåæãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãæäŸããå¿ èŠæ§ã«å¯ŸåŠãããšãããéèŠãªèª²é¡ã«å¯ŸåŠããå¿ èŠããããŸããã
ããšãã°ããã€ã§ãçç±ãåãããäœããDOMã«ã¢ã¯ã»ã¹ããŠããã§å€æŽãå ããããšãã§ããç¶æ³ã§ãç»é¢ã«äœã衚瀺ãããããäºåã«ã©ã®ããã«ç¥ãããšãã§ããŸããïŒãŠãŒã¶ãŒã«è¡šç€ºããããã®ãæ£ãããããããããŠããããšã確èªããã«ã¯ã©ãããã°ããã§ããïŒ
Reactã®åã«ååšããŠãã人æ°ã®ããããã³ããšã³ãããŒã«ã䜿çšãããšããã®ãããªããšã¯ä¿èšŒã§ããŸããã§ãããåæã®Webã¢ããªã±ãŒã·ã§ã³ã§ã¯ãDOMã®ãã¬ãŒã¹ç¶æ ããæãäžè¬çãªåé¡ã®1ã€ã§ããã
決å®è«ã®æ¬ åŠ=䞊åèšç®+å¯å€ç¶æ ã
Martin Oderski
ReactéçºããŒã ã®äž»ãªã¿ã¹ã¯ã¯ããã®åé¡ã解決ããããšã§ããã圌ãã¯2ã€ã®äž»èŠãªé©æ°çãªã¢ãããŒãã§ãããæ±ããŸããïŒ
- Fluxã¢ãŒããã¯ãã£ã䜿çšããåæ¹åããŒã¿ãã€ã³ãã£ã³ã°ã
- ã³ã³ããŒãã³ãç¶æ ã®äžå€æ§ãã³ã³ããŒãã³ãã®ç¶æ ãèšå®ããããšããããå€æŽããããšã¯ã§ããªããªããŸããç¶æ ã®å€æŽã¯ãã¬ã³ããªã³ã°ãããã³ã³ããŒãã³ãã«ã¯åœ±é¿ããŸããã代ããã«ããã®ãããªå€æŽã¯ãæ°ããç¶æ ã®æ°ãããã¥ãŒã®åºåã«ã€ãªãããŸãã
æŠå¿µçãªèŠ³ç¹ãããã³ã³ããŒãã³ããæ§é åããã³ã¬ã³ããªã³ã°ããããã«ç§ãã¡ãèŠã€ããæãç°¡åãªæ¹æ³ã¯ãåçŽã«ãŒããã¥ãŒããŒã·ã§ã³ãç®æãããšã§ããã
Tom OchchinoãJSConfUS 2013
Reactã©ã€ãã©ãªã¯ãFluxã¢ãŒããã¯ãã£ã䜿çšããããšã«ãããå¶åŸ¡ãããŠããªãå€ç°ã®åé¡ãåçã«æžããããšãã§ããŸãããã€ãã³ããã³ãã©ãŒãã¢ã¿ããããŠãä»»æã®æ°ã®ä»»æã®ãªããžã§ã¯ãïŒã¢ãã«ïŒãžã®DOMæŽæ°ãããªã¬ãŒãã代ããã«ãReactã©ã€ãã©ãªã¯ãéçºè ã«ã³ã³ããŒãã³ãã®ç¶æ ã管çããå¯äžã®æ¹æ³ãæäŸããŸãããããã¯ãããŒã¿ãŠã§ã¢ããŠã¹ã«åœ±é¿ãäžããã¢ã¯ã·ã§ã³ã®ãã£ã¹ãããã§ããã¹ãã¢ã®ç¶æ ãå€åãããšãã·ã¹ãã ã¯ã³ã³ããŒãã³ãã«ã¬ã³ããªã³ã°ãèŠæ±ããŸãã
ãã©ãã¯ã¹ã¢ãŒããã¯ãã£
Reactã«æ³šæãæãå¿ èŠãããçç±ãå°ãããããšããç§ã¯ç°¡åãªçããåºããŸãããèŠç¹ã¯ããã¥ãŒã®æ±ºå®è«çã¬ã³ããªã³ã°ãå¿ èŠã§ãããReactã¯ãã®ã¿ã¹ã¯ãã¯ããã«ç°¡åã«ããŸããã
äžéšã®ããžãã¯ãå®è£ ããããã«DOMããããŒã¿ãèªã¿åãããšã¯ãåãã¿ãŒã³ã§ããããšã«æ³šæããŠãã ããããããè¡ã人ã¯èª°ã§ããReactã䜿çšããç®çã«åããŸãã代ããã«ãããŒã¿ãã¹ãã¢ããèªã¿åãå¿ èŠãããã察å¿ããã³ã³ããŒãã³ããã¬ã³ããªã³ã°ããåã«ããã®ããŒã¿ã«åºã¥ããŠæ±ºå®ãè¡ãå¿ èŠããããŸãã
ã³ã³ããŒãã³ãã®æ±ºå®è«çã¬ã³ããªã³ã°ãReactã®å¯äžã®ããšã§ããå Žåãããã ãã§ã倧ããªé©æ°ã«ãªããŸããããããReactéçºããŒã ã¯ããã ãã§ã¯ãããŸããããã®ããŒã ã¯ãä»ã®èå³æ·±ããŠããŒã¯ãªæ©èœãåããã©ã€ãã©ãªãäžçã«æäŸããŸããããããŠããããžã§ã¯ããçºå±ããã«ã€ããŠãReactã¯ããã«äŸ¿å©ãªãã®ãè¿œå ããŸããã
JSX
JSXã¯ããŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ã³ã³ããŒãã³ãã宣èšçã«äœæã§ããããã«ããJavaScriptæ¡åŒµæ©èœã§ããJSXã«ã¯ã次ã®æ³šç®ãã¹ãæ©èœããããŸãã
- åçŽãªå®£èšçããŒã¯ã¢ãããé©çšããŸãã
- ããŒã¯ã¢ããã³ãŒãã¯ãã³ã³ããŒãã³ãã³ãŒããšåãå Žæã«ãããŸãã
- ( â ). , , ( â HTML, CSS, JavaScript).
- DOM.
- , React-. , React , ( , , React Native, , Netflix Gibbon, Canvas/WebGL-, react-html-email).
JSXãç»å Žããåã«ãã€ã³ã¿ãŒãã§ã€ã¹ã宣èšçã«èšè¿°ããå¿ èŠããã£ãå ŽåãHTMLãã³ãã¬ãŒãã䜿çšããã«ãããè¡ãããšã¯äžå¯èœã§ãããåœæããã®ãããªãã³ãã¬ãŒããäœæããããã®äžè¬çã«åãå ¥ããããŠããæšæºã¯ãããŸããã§ãããåãã¬ãŒã ã¯ãŒã¯ã¯ç¬èªã®æ§æã䜿çšããŸããããã®æ§æã¯ãããšãã°ãäžéšã®ããŒã¿ãã«ãŒãããããå€æ°ããããã¹ããã³ãã¬ãŒãã«å€ãåã蟌ãã ãã衚瀺ããã€ã³ã¿ãŒãã§ã€ã¹ã³ã³ããŒãã³ããšè¡šç€ºããªãã€ã³ã¿ãŒãã§ã€ã¹ã³ã³ããŒãã³ãã決å®ãããããå¿ èŠããã人ãåŠç¿ããå¿ èŠããããŸããã
ä»æ¥ãããŸããŸãªããã³ããšã³ãããŒã«ãèŠããš
*ngFor
ãAngularã®ãã£ã¬ã¯ãã£ãã®ãããªç¹å¥ãªæ§æãªãã§ã¯å®è¡ã§ããªãããšãããããŸãããã ããJSXã¯JavaScriptã®ã¹ãŒããŒã»ãããšåŒã¶ããšãã§ãããããJSXããŒã¯ã¢ãããäœæãããšãæ¢åã®JSæ©èœãå©çšã§ããŸãã
ããšãã°ãã¡ãœããã䜿çšããŠèŠçŽ ã®ã»ãããå埩åŠçã§ããŸã
Array.prototype.map
ãè«çæŒç®åã䜿çšãã3å€æŒç®åã䜿çšããŠæ¡ä»¶ä»ãã¬ã³ããªã³ã°ãæŽçã§ããŸããçŽç²ãªé¢æ°ã䜿çšã§ãããã³ãã¬ãŒããªãã©ã«ã䜿çšããŠæååãäœæã§ããŸããäžè¬ã«ããã¹ãŠã®JavaScriptæ©èœã¯ãJSXã®ã€ã³ã¿ãŒãã§ã€ã¹ã説æãããŠãŒã¶ãŒãå©çšã§ããŸããããã¯ãä»ã®ãã¬ãŒã ã¯ãŒã¯ãã©ã€ãã©ãªã«å¯ŸããReactã®å€§ããªå©ç¹ã ãšæããŸãã
JSXã³ãŒãã®ãµã³ãã«ã¯æ¬¡ã®ãšããã§ãã
const ItemList = ({ items }) => (
<ul>
{items.map((item) => (
<li key={item.id}>
<div>{item.name}</div>
</li>
))}
</ul>
);
確ãã«ãJSXã䜿çšãããšãã¯ãæåã¯ç°åžžã«èŠãããããããªãããã€ãã®æ©èœãèæ ®ããå¿ èŠããããŸãã
- , , HTML. ,
class
className
. camelCase. - , , , JSX-
key
. .id
,key
.
Reactã¯ãéçºè ã«CSSãæäœããå¯äžã®æ£ããæ¹æ³ã課ããŸãããããšãã°ãã¹ã¿ã€ã«ãå«ãJavaScriptãªããžã§ã¯ããããããã£ã«æžã蟌ãããšã§ãã³ã³ããŒãã³ãã«æž¡ãããšãã§ããŸã
style
ããã®ã¢ãããŒãã§ã¯ãããªãã¿ã®ã¹ã¿ã€ã«åã®ã»ãšãã©ããåçã®camelCaseã«çœ®ãæããããŸããããããã¹ã¿ã€ã«ãæäœããå¯èœæ§ã¯ããã«éå®ãããŸãããå®éã«ã¯ãReactã¢ããªã±ãŒã·ã§ã³ã®ã¹ã¿ã€ãªã³ã°ã«ããŸããŸãªã¢ãããŒããåæã«äœ¿çšããŠããŸããã©ã®ã¢ãããŒããéžæãããã¯ãã¹ã¿ã€ã«ãèšå®ããæ¹æ³ã«ãã£ãŠç°ãªããŸããããšãã°ãã°ããŒãã«ã¹ã¿ã€ã«ã䜿çšããŠã¢ããªã®ããŒããšããŒãžã¬ã€ã¢ãŠãã®ã¹ã¿ã€ã«ãèšå®ããããŒã«ã«ã¹ã¿ã€ã«ã䜿çšããŠç¹å®ã®ã³ã³ããŒãã³ãã®å€èŠ³ãã«ã¹ã¿ãã€ãºããŸãã
ãããç§ã®ãæ°ã«å ¥ãã®Reactã¹ã¿ã€ãªã³ã°æ©èœã§ãã
- CSS-, . , . â , .
- CSS- â CSS- . JavaScript-. CSS-, . Next.js, , .
- ã¹ã¿ã€ã«ã»JSXããã±ãŒãžããªãã«çŽæ¥ã¹ã¿ã€ã«ã宣èšããããšãã§ããã³ã³ããŒãã³ãã®ã³ãŒããåå¿ããŸããããã¯
<style>
ãHTMLã§ã¿ã°ã䜿çšããã®ãšäŒŒãŠããŸãããã®ãããªã¹ã¿ã€ã«ã®ç¯å²ã¯ããã€ããŒããŒã«ã«ããšåŒã¶ããšãã§ããŸããéèŠãªã®ã¯ãã¹ã¿ã€ã«ã¯ãé©çšãããèŠçŽ ãšãã®åã«ã®ã¿åœ±é¿ãããšããããšã§ããNext.jsã䜿çšããå Žåãstyled-jsxããã±ãŒãžã¯ãèªåã§æ¥ç¶ããŠæ§æããå¿ èŠãªãã«äœ¿çšã§ããŸãã
åæã€ãã³ã
Reactã¯ã
SyntheticEvents
åæã€ãã³ããè¡šããäœæ¥ãDOMã€ãã³ããšçµ±åããããã«èšèšãããã¯ãã¹ãã©ãŠã¶ãŒã©ãããŒãæäŸããŸããåæã€ãã³ãã¯ãããã€ãã®çç±ã§åœ¹ç«ã¡ãŸãã
- , . .
- . , , , JavaScript HTML, . . , , React- .
- . . , , . , , , . . , . , JavaScript, .
ã€ãã³ãããŒã«ã®ãããéåæé¢æ°ããåæã€ãã³ãã®ããããã£ã«ã¢ã¯ã»ã¹ã§ããªãããšã«æ³šæããŠãã ããããã®ãããªäœæ¥ã¹ããŒã ãå®è£ ããã«ã¯ãã€ãã³ããªããžã§ã¯ãããããŒã¿ãååŸããéåæé¢æ°ã«ã¢ã¯ã»ã¹ã§ããå€æ°ã«æžã蟌ãå¿ èŠããããŸãã
ã³ã³ããŒãã³ãã®ã©ã€ããµã€ã¯ã«
Reactã³ã³ããŒãã³ãã®ã©ã€ããµã€ã¯ã«ã®æŠå¿µã¯ãã³ã³ããŒãã³ãã®ç¶æ ãä¿è·ããããšã«éç¹ã眮ããŠããŸããã³ã³ããŒãã³ãã®ç¶æ ã¯ã衚瀺äžã«å€æŽããªãã§ãã ãããããã¯ã次ã®äœæ¥ã¹ããŒã ã«ãã£ãŠå®çŸãããŸããã³ã³ããŒãã³ããç¹å®ã®ç¶æ ã«ãããã¬ã³ããªã³ã°ãããŠããããããŠãã©ã€ããµã€ã¯ã«ã€ãã³ãã®ãããã§ãããã«ãšãã§ã¯ããé©çšããããšãå¯èœã«ãªãããã®ç¶æ ã«åœ±é¿ãäžããããã€ãã³ããæäœãããããããšãã§ããŸãã
Reactã³ã³ããŒãã³ãã®ã©ã€ããµã€ã¯ã«ãç解ããããšã¯ãã€ã³ã¿ãŒãã§ã€ã¹ãéçºãããšåæã«ReactãšæŠãã®ã§ã¯ãªããéçºè ãæå³ãããšããã«ãã®ã©ã€ãã©ãªã䜿çšããããã«éåžžã«éèŠã§ããã³ã³ããŒãã³ãã®ç¶æ ã誀ã£ãŠå€æŽããããDOMããããŒã¿ãèªã¿åã£ãããããªã©ãReactãšã®ãæŠããã¯ããã®ã©ã€ãã©ãªã®é·æãæã¡æ¶ããŸãã
Reactã§ã¯ãããŒãžã§ã³0.14以éãã³ã³ããŒãã³ãã®ã©ã€ããµã€ã¯ã«ã€ãã³ããåŠçã§ããã¯ã©ã¹ããŒã¹ã®ã³ã³ããŒãã³ãèšè¿°æ§æããããŸãããReactã³ã³ããŒãã³ãã®ã©ã€ããµã€ã¯ã«ã«ã¯ãããŠã³ããæŽæ°ãã¢ã³ããŠã³ãã®3ã€ã®éèŠãªæ®µéããããŸãã
ã³ã³ããŒãã³ãã®ã©ã€ããµã€ã¯ã«
æŽæ°æ®µéã¯ãã¬ã³ããªã³ã°ïŒã¬ã³ããªã³ã°ïŒãããªã³ãããïŒDOMããªãŒã«å€æŽãå ããæºåïŒãã³ãããïŒDOMããªãŒã«å€æŽãå ããïŒã®3ã€ã®éšåã«åããããšãã§ããŸãã
æŽæ°æ®µéã®æ§é
ã³ã³ããŒãã³ãã®ã©ã€ããµã€ã¯ã«ã®ãããã®æ®µéã«ã€ããŠè©³ããèŠãŠãããŸãããã
- Render â .
render()
, . , JSX. - Precommit â DOM,
getSnapShotBeforeUpdate
. , , . - ã³ããã-ã³ã³ããŒãã³ãã®ã©ã€ããµã€ã¯ã«ã®ãã®ãã§ãŒãºã§ãReactã¯DOMãšrefãæŽæ°ããŸããããã§ã¯ãã¡ãœãã
componentDidUpdate
ãŸãã¯ããã¯ã䜿çšã§ããŸãuseEffect
ãããã§ããšãã§ã¯ãã®å®è¡ãæŽæ°ã®ã¹ã±ãžã¥ãŒã«èšå®ãDOMã®äœ¿çšãããã³ãã®ä»ã®åæ§ã®ã¿ã¹ã¯ãå®è¡ã§ããŸãã
Dan Abramovã¯ãã³ã³ããŒãã³ãã®ã©ã€ããµã€ã¯ã«ã¡ã«ããºã ãã©ã®ããã«æ©èœãããã瀺ãåªããå³ãäœæããŸããã
Reactã³ã³ããŒãã³ãã®ã©ã€ããµã€ã¯ã«
ã³ã³ããŒãã³ããé·å¯¿åœã®ã¯ã©ã¹ãšããŠè¡šãããšã¯ãReactã®æè¯ã®ã¡ã³ã¿ã«ã¢ãã«ã§ã¯ãªããšæããŸãã Reactã³ã³ããŒãã³ãã®ç¶æ ã¯å€åããŠã¯ãªããªãããšã«æ³šæããŠãã ãããå»æ¢ãããç¶æ ã¯ãæ°ããç¶æ ã«çœ®ãæããå¿ èŠããããŸãããã®ãããªçœ®æã®ãã³ã«ãã³ã³ããŒãã³ããåã¬ã³ããªã³ã°ãããŸããããã«ãããReactã¯ãééããªãæãéèŠã§æã䟡å€ã®ããæ©èœãã€ãŸãã³ã³ããŒãã³ãã®ããžã¥ã¢ã«ãã¬ã³ããªã³ã°ããããã®æ±ºå®è«çã¢ãããŒãã®ãµããŒããæäŸããŸãã
ãã®åäœã¯ã次ã®ããã«èããã®ãæé©ã§ããã³ã³ããŒãã³ããã¬ã³ããªã³ã°ããããã³ã«ãã©ã€ãã©ãªã¯JSXãè¿ã決å®è«çé¢æ°ãåŒã³åºããŸãããã®é¢æ°ã¯ãããèªäœã§ç¬èªã®å¯äœçšãåŒãèµ·ãããŠã¯ãªããŸããããããã圌女ã¯ãããå¿ èŠãªå Žåããã®ãããªå¹æãå®è¡ããããã«Reactã«ãªã¯ãšã¹ããæž¡ãããšãã§ããŸãã
èšãæãããšãã»ãšãã©ã®Reactã³ã³ããŒãã³ãããå ¥åãã©ã¡ãŒã¿ãŒãåãåããJSXãè¿ãçŽç²ãªé¢æ°ãšèããã®ã¯çã«ããªã£ãŠããŸããçŽç²ãªé¢æ°ã«ã¯æ¬¡ã®æ©èœããããŸãã
- åãå ¥åãäžãããããšããããã¯åžžã«åãåºåãè¿ããŸãïŒãããã¯æ±ºå®è«çã§ãïŒã
- å¯äœçšã¯ãããŸããïŒã€ãŸãããããã¯ãŒã¯ãªãœãŒã¹ã§ã¯æ©èœãããã³ã³ãœãŒã«ã«äœãåºåãããäœãæžã蟌ã¿ãŸãã
localStorage
ïŒã
ã³ã³ããŒãã³ããæ©èœããããã«å¯äœçšãå¿ èŠãªå Žåã¯ãå°éå ·ãä»ããŠã³ã³ããŒãã³ãã«æž¡ãããã¢ã¯ã·ã§ã³ã¯ãªãšãŒã¿ãŒ
useEffect
ã䜿çšãŸãã¯åç
§ããã³ã³ããŒãã³ãã®å€éšã§å¯äœçšãåŠçã§ããããã«ããããšã§ãå¯äœçšãå®è¡ã§ããããšã«æ³šæããŠãã ããã
åå¿ããã¯
React 16.8ã§ã¯ãReactããã¯ãšåŒã°ããæ°ããæŠå¿µãå°å ¥ãããŠããŸãããããã¯ãã¯ã©ã¹æ§æã䜿çšããã«ãã³ã³ããŒãã³ãã©ã€ããµã€ã¯ã«ã¡ãœããã«äŸåããã«ãã³ã³ããŒãã³ãã©ã€ããµã€ã¯ã«ã€ãã³ãã«æ¥ç¶ã§ããããã«ããé¢æ°ã§ãããã®çµæãã¯ã©ã¹ã®åœ¢ã§ã¯ãªããé¢æ°ã®åœ¢ã§ã³ã³ããŒãã³ããäœæããããšãå¯èœã«ãªããŸããã
äžè¬ã«ãããã¯ãåŒã³åºããšãå¯äœçšãçºçããŸããããã«ãããã³ã³ããŒãã³ãããã®ç¶æ ããã³I / Oãµãã·ã¹ãã ãšé£æºã§ããããã«ãªããŸããå¯äœçšã¯ãé¢æ°ã«ãã£ãŠè¿ãããå€ã®å€æŽãé€ããŠãé¢æ°ã®å€éšã«è¡šç€ºãããç¶æ ã®å€æŽã§ãã
ããã¯useEffectåŸã§å®è¡ããããã«å¯äœçšããã¥ãŒã«å ¥ããããšãã§ããŸãããããã¯ãã³ã³ããŒãã³ãã®ã©ã€ããµã€ã¯ã«ã®é©åãªã¿ã€ãã³ã°ã§åŒã³åºãããŸãããã®æéã¯ãã³ã³ããŒãã³ããããŠã³ããããçŽåŸïŒããšãã°ãcomponentDidMountã©ã€ããµã€ã¯ã«ã¡ãœãããåŒã³åºããããšãïŒãã³ããããã§ãŒãºäžïŒcomponentDidUpdateã¡ãœããïŒãã³ã³ããŒãã³ããããŠã³ã解é€ãããçŽåïŒcomponentWillUnmountïŒã«çºçããå¯èœæ§ããããŸãã
1ã€ã®ããã¯ã«é¢é£ä»ãããã3ã€ã®ã³ã³ããŒãã³ãã©ã€ããµã€ã¯ã«ã¡ãœãããããããšã«æ³šæããŠãã ãããããã§ã®ãã€ã³ãã¯ãããã¯ã䜿çšãããšãã³ã³ããŒãã³ãã®ã©ã€ããµã€ã¯ã«ã®ããŸããŸãªæ¹æ³ã«åŸã£ãŠãé¢é£ããããžãã¯ãçµã¿åãããããšãã§ãã以åã®ããã«ãã¬ã€ã¢ãŠããããããšã¯ã§ããŸããã
å€ãã®ã³ã³ããŒãã³ãã¯ãããŠã³ãäžã«äœããã®ã¢ã¯ã·ã§ã³ãå®è¡ããå¿ èŠããããã³ã³ããŒãã³ããåæç»ããããã³ã«äœããæŽæ°ããå¿ èŠããããã¡ã¢ãªãªãŒã¯ãé²ãããã«ãã³ã³ããŒãã³ããã¢ã³ããŠã³ãããçŽåã«ãªãœãŒã¹ã解æŸããå¿ èŠããããŸãã䜿çšã®ãããã§ã
useEffect
ãããã®ã¿ã¹ã¯ã¯ãã¹ãŠããœãªã¥ãŒã·ã§ã³ã3ã€ã®ç°ãªãã¡ãœããã«åå²ããããšãªããã³ãŒãããããã«é¢é£ããªãããããã®ã¡ãœãããå¿
èŠãšããä»ã®ã¿ã¹ã¯ã®ã³ãŒããšæ··åããããšãªãã1ã€ã®é¢æ°ã§è§£æ±ºã§ããŸãã
Reactããã¯ãæäŸãããã®ã¯æ¬¡ã®ãšããã§ãã
- ãããã䜿çšãããšãã¯ã©ã¹ã§ã¯ãªãé¢æ°ãšããŠè¡šãããã³ã³ããŒãã³ããäœæã§ããŸãã
- ã³ãŒããããé©åã«æŽçããã®ã«åœ¹ç«ã¡ãŸãã
- ãããã«ãããç°ãªãã³ã³ããŒãã³ãéã§åãããžãã¯ãç°¡åã«å ±æã§ããŸãã
- æ°ããããã¯ã¯ãæ¢åã®ããã¯ãäœæããããšã§äœæã§ããŸãïŒä»ã®ããã¯ããåŒã³åºããŸãïŒã
äžè¬ã«ãã¯ã©ã¹ããŒã¹ã®ã³ã³ããŒãã³ãã§ã¯ãªããæ©èœã³ã³ããŒãã³ããšããã¯ã䜿çšããããšããå§ãããŸããæ©èœã³ã³ããŒãã³ãã¯éåžžãã¯ã©ã¹ããŒã¹ã®ã³ã³ããŒãã³ããããã³ã³ãã¯ãã§ãã圌ãã®ã³ãŒãã¯ããããæŽçãããããèªã¿ããããããåå©çšå¯èœã§ããã¹ããããç°¡åã§ãã
ã³ã³ããã³ã³ããŒãã³ããšãã¬ãŒã³ããŒã·ã§ã³ã³ã³ããŒãã³ã
ã³ã³ããŒãã³ãã®ã¢ãžã¥ãŒã«æ§ãšãã®åå©çšæ§ãåäžãããããã«ãç§ã¯2çš®é¡ã®ã³ã³ããŒãã³ãã®éçºã«çŠç¹ãåœãŠãŠããŸãã
- ã³ã³ããã³ã³ããŒãã³ãã¯ãããŒã¿ãœãŒã¹ã«æ¥ç¶ãããå¯äœçšãåŒãèµ·ããå¯èœæ§ã®ããã³ã³ããŒãã³ãã§ãã
- ãã¬ãŒã³ããŒã·ã§ã³Beanã¯ãã»ãšãã©ã®å Žåãåãå°éå ·ãšã³ã³ããã¹ããäžãããããšãåžžã«åãJSXãè¿ãçŽç²ãªBeanã§ãã
çŽç²ãªã³ã³ããŒãã³ããåºæ¬ã¯ã©ã¹React.PureComponentãšæ··åããªãã§ãã ãããããã¯ãçŽç²ã§ãªãã³ã³ããŒãã³ããäœæããããã«äœ¿çšããã®ã¯å®å šã§ã¯ãªãããããã®ããã«åä»ããããŠããŸãã
âãã¬ãŒã³ããŒã·ã§ã³ã³ã³ããŒãã³ã
ãã¬ãŒã³ããŒã·ã§ã³ã³ã³ããŒãã³ãã®æ©èœãæ€èšããŠãã ããã
- ãããã¯ãããã¯ãŒã¯ãªãœãŒã¹ãšçžäºäœçšããŸããã
- ããŒã¿ã
localStorage
ããã«ä¿åããããããããããŒããããããããšã¯ãããŸããã - 圌ãã¯ããã€ãã®äºæž¬ã§ããªãããŒã¿ãæäŸããŸããã
- ãããã¯ãçŸåšã®ã·ã¹ãã æå»ãçŽæ¥åç
§ããŸããïŒããšãã°ãã¡ãœãããåŒã³åºãããšã«ãã£ãŠ
Date.now()
ïŒã - ãããã¯ãã¢ããªã±ãŒã·ã§ã³ã®ç¶æ ã¹ãã¢ãšçŽæ¥å¯Ÿè©±ããŸããã
- - , , , .
ãã¬ãŒã³ããŒã·ã§ã³ã³ã³ããŒãã³ãã«ã€ããŠè©±ããšãã«ãããããã»ãšãã©çŽç²ãªã³ã³ããŒãã³ãã§ãããšè¿°ã¹ãã®ã¯ããã®ãªã¹ãã®æåŸã®é ç®ã®ããã§ãããããã®ã³ã³ããŒãã³ãã¯ãã°ããŒãã«Reactç¶æ ããç¶æ ãèªã¿åããŸãããããã£ãŠãããã¯ã®ããã«ãç¹å®ã®æé»çãªããŒã¿ïŒã€ãŸãã眲åé¢æ°ã§èšè¿°ãããŠããªãããŒã¿ïŒãããã¯
useState
ã«useReducer
æäŸããŸããããã¯ãæè¡çãªèŠ³ç¹ããããã®ãããªã³ã³ããŒãã³ãããã¯ãªãŒã³ããšã¯åŒã¹ãŸãããããããæ¬åœã«ã¯ãªãŒã³ã«ããå¿
èŠãããå Žåã¯ãç¶æ
ã管çãããã¹ãŠã®ã¿ã¹ã¯ãã³ã³ããã³ã³ããŒãã³ãã«å§ä»»ã§ããŸãããå°ãªããšãã³ã³ããŒãã³ãã®æ£ããåäœãã¢ãžã¥ã©ãŒã䜿çšããŠç¢ºèªã§ãããŸã§ã¯ããããè¡ãã¹ãã§ã¯ãªããšæããŸãããã¹ãã
åã®æµãæé«ã«ã
ãŽã©ã«ããŒã«
âã³ã³ããã³ã³ããŒãã³ã
ã³ã³ããã³ã³ããŒãã³ãã¯ãç¶æ ã®ç®¡çãI / Oæäœã®å®è¡ããŸãã¯å¯äœçšãšãªãå¯èœæ§ã®ãããã®ä»ã®ã¿ã¹ã¯ãæ åœããã³ã³ããŒãã³ãã§ããèªåã§ããŒã¯ã¢ãããã¬ã³ããªã³ã°ããå¿ èŠã¯ãããŸããã代ããã«ãã¬ã³ããªã³ã°ã¿ã¹ã¯ããã¬ãŒã³ããŒã·ã§ã³ã³ã³ããŒãã³ãã«å§ä»»ãããããèªäœããã®ãããªã³ã³ããŒãã³ãã®ã©ãããŒãšããŠæ©èœããŸããå žåçã«ã¯ã容åšå ã®æåã+ Reduxã®ã¢ããªã±ãŒã·ã§ã³åã«åŒã³åºãã«åå¿
mapStateToProps()
ããmapDispatchToProps()
次ãã§ããã¬ãŒã³ããŒã·ã§ã³ã³ã³ããŒãã³ãã«é©åãªããŒã¿ãæž¡ããŸããã³ã³ããã¯ã以äžã§èª¬æããããã€ãã®äžè¬çãªã¿ã¹ã¯ã«ã䜿çšã§ããŸãã
é«æ¬¡ã³ã³ããŒãã³ã
é«æ¬¡ã³ã³ããŒãã³ãïŒHOCïŒã¯ãä»ã®ã³ã³ããŒãã³ããåãåããå ã®ã³ã³ããŒãã³ãã«åºã¥ããŠæ°ããæ©èœãå®è£ ããæ°ããã³ã³ããŒãã³ããè¿ãã³ã³ããŒãã³ãã§ãã
é«æ¬¡ã³ã³ããŒãã³ãã¯ãäžéšã®ã³ã³ããŒãã³ããä»ã®ã³ã³ããŒãã³ãã§ã©ããããããšã«ãã£ãŠæ©èœããŸããã©ãããŒã³ã³ããŒãã³ãã¯ãããã€ãã®ããžãã¯ãå®è£ ããDOMèŠçŽ ãäœæã§ããŸããã©ãããããã³ã³ããŒãã³ãã«è¿œå ã®å ¥åãã©ã¡ãŒã¿ãŒãæž¡ãå Žåãšæž¡ããªãå ŽåããããŸãã
Reactããã¯ãã¬ã³ããªã³ã°å°éå ·ãšã¯ç°ãªããé«æ¬¡ã³ã³ããŒãã³ãã¯ãé¢æ°æ§æãžã®æšæºçãªã¢ãããŒãã䜿çšããæ§æã«é©ããŠããŸããããã«ãããã¢ããªã±ãŒã·ã§ã³ã®ããŸããŸãªå Žæã§ã®äœ¿çšãç®çãšããæ©èœã®æ§æã®çµæã宣èšçã«èšè¿°ããããšãã§ããŸããåæã«ãæ¢è£œã®ã³ã³ããŒãã³ãã¯ç¹å®ã®å¯èœæ§ã®ååšãèªèããŠã¯ãªããŸãããEricElliottJS.comã®HOCã®äŸã次ã«ç€ºããŸãã
import { compose } from 'lodash/fp';
import withFeatures from './with-features';
import withEnv from './with-env';
import withLoader from './with-loader';
import withCoupon from './with-coupon';
import withLayout from './with-layout';
import withAuth from './with-auth';
import { withRouter } from 'next/router';
import withMagicLink from '../features/ethereum-authentication/with-magic-link';
export default compose(
withEnv,
withAuth,
withLoader,
withLayout({ showFooter: true }),
withFeatures,
withRouter,
withCoupon,
withMagicLink,
);
ããã«ç€ºãããŠããã®ã¯ããµã€ãã®ãã¹ãŠã®ããŒãžã§å ±æãããŠããå€ãã®æ©èœã®çµã¿åããã§ããã€ãŸãã
withEnv
ç°å¢å€æ°ããèšå®ãèªã¿åãwithAuth
ãGitHubèªèšŒã¡ã«ããºã ãå®è£
ããwithLoader
ãŠãŒã¶ãŒããŒã¿ã®èªã¿èŸŒã¿äžã«ã¢ãã¡ãŒã·ã§ã³ã, withLayout({ showFooter: true })
衚瀺ããããã¿ãŒä»ãã®æšæºã¬ã€ã¢ãŠãã衚瀺ããwithFeature
èšå®ã衚瀺ãwithRouter
ãã«ãŒã¿ãŒãèªã¿èŸŒã¿ãwithCoupon
ã¯ãŒãã³ã®æäœãæ
åœãwithMagicLing
ããã¹ã¯ãŒãã䜿çšããã«ãŠãŒã¶ãŒèªèšŒããµããŒãããŸããéæ³ã
ã¡ãªã¿ã«ããã¹ã¯ãŒãèªèšŒã¯æ代é ãã§å±éºãªæ £è¡ã§ããããšãèãããšãæè¿ã§ã¯ä»ã®ãŠãŒã¶ãŒèªèšŒæ¹æ³ã䜿çšãã䟡å€ããããŸãã
åè¿°ã®ãµã€ãã®ã»ãšãã©ãã¹ãŠã®ããŒãžã¯ãããããã¹ãŠã®æ©èœãå©çšããŠããŸããããããé«æ¬¡ã®ã³ã³ããŒãã³ãã«ãã£ãŠæ§æãããŠããããšãèãããšã1è¡ã®ã³ãŒãã§ãã¹ãŠãã³ã³ãããŒã³ã³ããŒãã³ãã«å«ããããšãã§ããŸããããšãã°ããã¥ãŒããªã¢ã«ããŒãžã®æ€çŽ¢æ¹æ³ã¯æ¬¡ã®ãšããã§ãã
import LessonPage from '../features/lesson-pages/lesson-page.js';
import pageHOC from '../hocs/page-hoc.js';
export default pageHOC(LessonPage);
ãããã®é«æ¬¡ã³ã³ããŒãã³ãã«ã¯ä»£æ¿æ段ããããŸãããããã¯ãéåœã®ãã©ãããããšåŒã°ããçãããæ§é ã§ããã䜿çšããªãã®ãæé©ã§ããããã¯ãããã©ã®ããã«èŠãããã§ãïŒ
import FeatureProvider from '../providers/feature-provider';
import EnvProvider from '../providers/env-provider';
import LoaderProvider from '../providers/loader-provider';
import CouponProvider from '../providers/coupon-provider';
import LayoutProvider from '../providers/layout-provider';
import AuthProvider from '../providers/auth-provider';
import RouterProvider from '../providers/RouterProvider';
import MagicLinkProvider from '../providers/magic-link-provider';
import PageComponent from './page-container';
const WrappedComponent = (...props) => (
<EnvProvider { ...props }>
<AuthProvider>
<LoaderProvider>
<LayoutProvider showFooter={ true }>
<FeatureProvider>
<RouterProvider>
<CouponProvider>
<MagicLinkProvider>
<YourPageComponent />
</MagicLinkProvider>
</CouponProvider>
</RouterProvider>
</FeatureProvider>
</LayoutProvider>
</LoaderProvider>
</AuthProvider>
</EnvProvider>
);
ãããŠãããã¯ãã¹ãŠã®ããŒãžã§ç¹°ãè¿ãããå¿ èŠããããŸãããŸãããã®æ§é ã§äœããå€æŽããå¿ èŠãããå Žåã¯ããããååšããå Žæã§ããã°ã©ãã§ãå€æŽãå ããå¿ èŠããããŸãããã®ã¢ãããŒãã®æ¬ ç¹ã¯éåžžã«æçœã ãšæããŸãã
ã³ã³ããžã·ã§ã³ã䜿çšããŠäžè¬çãªåé¡ã解決ããããšã¯ãã¢ããªã±ãŒã·ã§ã³ã³ãŒãã®è€éãã軜æžããããã®æè¯ã®æ¹æ³ã®1ã€ã§ããäœæ²ã¯ãšãŠãéèŠãªã®ã§ãç§ãããã«ã€ããŠæ¬ãæžããŸããã
çµæ
- ãªãåå¿ããã®ã§ããïŒReactã¯ãäžæ¹åã®ããŒã¿ãã€ã³ãã£ã³ã°ãšã³ã³ããŒãã³ãã®äžå€ç¶æ ã«åºã¥ããŠãã³ã³ããŒãã³ãã®èŠèŠçè¡šçŸã決å®è«çã«ã¬ã³ããªã³ã°ããŸãã
- JSXã䜿çšãããšãJavaScriptã³ãŒãã§ã€ã³ã¿ãŒãã§ã€ã¹ãç°¡åã«å®£èšçã«èšè¿°ããããšãã§ããŸãã
- - .
- . , . , DOM DOM.
- React , . , , .
- - . - .
- , . ( , ).
?
ãã®Reactã®èšäºã§ã¯ãå€ãã®æ©èœçãªããã°ã©ãã³ã°ã®æŠå¿µã«ã€ããŠèª¬æããŸããã Reactã¢ããªã±ãŒã·ã§ã³éçºã®ååãæ·±ãç解ããããã«åªåããŠããå Žåã¯ãçŽç²ãªé¢æ°ãäžå€æ§ãé¢æ°ã®ã«ã¬ãŒãšéšåçãªã¢ããªã±ãŒã·ã§ã³ãé¢æ°ã®æ§æã«ã€ããŠã®ç¥èã磚ãããšã圹ç«ã¡ãŸããé¢é£è³æã¯EricElliottJS.comã«ãããŸãã
ReactãReduxãRedux-Sagaãããã³RITEwayãšçµã¿åãããŠäœ¿çšââããããšããå§ãããŸããAutoduxããã³Immerã§ã®äœ¿çšã«ã¯Reduxããå§ãããŸã..ãè€éãªç¶æ ã¹ããŒã ãæŽçããã«ã¯ãRedux-DSMã䜿çšããŠã¿ãŠãã ããã
åºæ¬ãç解ããå®éã®Reactã¢ããªãæ§ç¯ããæºåãã§ããããNext.jsãšVercelãèŠãŠãã ããããããã®ããŒã«ã¯ããããžã§ã¯ããã«ãã·ã¹ãã ãšCI / CDãã€ãã©ã€ã³ã®æ§æãèªååããã®ã«åœ¹ç«ã¡ããµãŒããŒäžã§æé©åãããå±éã®ããã«ãããžã§ã¯ããæºåããã®ã«åœ¹ç«ã¡ãŸãããããã¯DevOpsããŒã å šäœãšåãå¹æããããŸãããå®å šã«ç¡æã§äœ¿çšã§ããŸãã
Reactã¢ããªã±ãŒã·ã§ã³ãéçºãããšãã«ã©ã®è£å©ããŒã«ã䜿çšããŸããïŒ