
Reactã®æãåªããæ©èœã®1ã€ã¯ããããžã§ã¯ãã®ãã¡ã€ã«æ§é ã«å¶éã課ããªãããšã§ãã ãããã£ãŠãStackOverflowã«ã¯éåžžã«å€ãã®è³ªåããããReactã¢ããªã±ãŒã·ã§ã³ãæ§æããæ¹æ³ã«ã€ããŠã¯åæ§ã®ãªãœãŒã¹ããããŸãã ããã¯éåžžã«ç©è°ãéžããããã¯ã§ãã æ£ããæ¹æ³ã¯ãããŸããã
Jack Franklinã®èšäºã®å©ããåããŠãã®åé¡ãç解ããããšãææ¡ããŸããJackFranklinã¯ã倧èŠæš¡ãªReactã¢ããªã±ãŒã·ã§ã³ãæ§é åããã¢ãããŒãã«ã€ããŠèª¬æããŠããŸãã ããã§ã¯ãããŒã«ã®éžæããã¡ã€ã«ã®æ§é åãã³ã³ããŒãã³ããããå°ããªéšåã«å解ããããšã«ã€ããŠãReactã¢ããªã±ãŒã·ã§ã³ãäœæãããšãã«ã©ã®ãããªæ±ºå®ãäžãããšãã§ãããã説æããŸãã
ã³ãŒãæ§ç¯ããã³æ€èšŒããŒã«
Webpackã¯ããããžã§ã¯ããåéããããã®åªããããŒã«ã§ãã ãã®è€éãã«ãããããããããŒã ãããŒãžã§ã³2ãšæ°ããããã¥ã¡ã³ããµã€ãã§çŽ æŽãããä»äºããããšããäºå®ã¯ãåé¡ã倧å¹
ã«ç°¡çŽ åããŸãã æ確ãªã³ã³ã»ããã念é ã«çœ®ããŠWebpackã䜿çšãããšãããã«ä¿¡ããããªãã»ã©åŒ·åãªããŒã«ãæã«å
¥ããŸãã Babelã䜿çšããŠãReactåºæã®å€æãå«ãã³ãŒããã³ã³ãã€ã«ã§ããŸããããšãã°ããµã€ãã®ããŒã«ã«ããã¹ãã£ã³ã°ãçšã®JSXããã³webpack-dev-serverã§ãã ããããHMRã¯å€§ããªå©ç¹ããããããªãã®ã§ãwebpack-dev-serverãèªåããŒãžæŽæ°ãšãšãã«äœ¿çšããã ãã§ååã§ãã
ãŸããäŸåé¢ä¿ã®ã€ã³ããŒããšãšã¯ã¹ããŒãã«ã¯ãES2015ã¢ãžã¥ãŒã«ïŒBabelã«ãã£ãŠå€æãããïŒã®æ§æã䜿çšããŸãã ãã®æ§æã¯é·ãéååšããŠãããWebpackã¯CommonJSïŒããŒãã¹ã¿ã€ã«ã®ã€ã³ããŒãæ§æïŒããµããŒãããŠããŸãããææ°ãã€æé«ã®ãã®ã䜿çšããã®ãæåã§ãã ããã«ãWebpackã¯ES2015ã¢ãžã¥ãŒã«ã䜿çšããŠãã³ãã«ãããããã³ãŒããåé€ã§ããŸããããã¯ãçæ³çã§ã¯ãããŸããããã³ãã¥ããã£ãES2015æšæºã®npmã§ã³ãŒãã®å
¬éãéå§ããéã«åœ¹ç«ã€äŸ¿å©ãªæ©èœã§ãã
Webpackã¢ãžã¥ãŒã«ã®è§£æ±ºã®æ§æ
æ·»ä»ãã¡ã€ã«æ§é ãæã€å€§èŠæš¡ãªãããžã§ã¯ãã§äœæ¥ãããšãã«å€±æããããšãã§ããå¯äžã®ããšã¯ããã¡ã€ã«éã®çžå¯Ÿãã¹ã®æ±ºå®ã§ãã 次ã®ãããªã³ãŒããããããããããšãããããŸãã
import foo from './foo' import bar from '../../../bar' import baz from '../../lib/baz'
Webpackã䜿çšããŠã¢ããªã±ãŒã·ã§ã³ãäœæãããšãã«ãWebpackããã¡ã€ã«ãèŠã€ããããªãå Žåã«Webpackããã¡ã€ã«ãæ€çŽ¢ãããã£ã¬ã¯ããªãæå®ã§ããŸãã ããã«ãããã€ã³ããŒãå
šäœãå±ããããŒã¹ãã©ã«ãã決å®ã§ããŸãã ããšãã°ããã€ã§ãã³ãŒããsrcãã£ã¬ã¯ããªã«çœ®ãããšãã§ããŸãã ãŸããWebpackã«åžžã«ãã®ãã£ã¬ã¯ããªã衚瀺ãããããšãã§ããŸãã ããã¯ã䜿çšããŠããå¯èœæ§ã®ããä»ã®ãã¡ã€ã«æ¡åŒµåãããšãã°jsxãWebpackã«éç¥ããã®ãšåãå Žæã§è¡ãããŸãã
resolve.modulesã®ããã©ã«ãå€ã¯
['node_modules']
ãªã®ã§ãè¿œå ããå¿
èŠããããŸããè¿œå ããªããšãWebpackã¯npmãŸãã¯yarnã䜿çšããŠã€ã³ã¹ããŒã«ããããã¡ã€ã«ãã€ã³ããŒãã§ããŸããã
ãã®åŸãsrcãã£ã¬ã¯ããªã«é¢é£ãããã¡ã€ã«ããã€ã§ãã€ã³ããŒãã§ããŸãã
import foo from './foo' import bar from 'app/bar'
ããã«ããWebpackã¢ããªã±ãŒã·ã§ã³ã®ã³ãŒããææãããŸãããã³ãŒãã®å®è¡ã容æã«ãªããã€ã³ããŒãã®è¿œå ãã¯ããã«ç°¡åã«ãªããããããã¯ããããæçãªåŠ¥åæ¡ã§ãã
ãã£ã¬ã¯ããªæ§é
ãã¹ãŠã®Reactã¢ããªã±ãŒã·ã§ã³ã«åäžã®æ£ãããã£ã¬ã¯ããªæ§é ã¯ãããŸããã ãã®èšäºã®æ®ãã®éšåãšåæ§ã«ã奜ã¿ã«åãããŠæ§é ãå€æŽããå¿
èŠããããŸãã é©åã«æ©èœããæ§é ã®äžäŸã以äžã«èª¬æããŸãã
ã³ãŒãã¯srcã«ãããŸã
æŽçããããã«ããã¹ãŠã®ã¢ããªã±ãŒã·ã§ã³ã³ãŒããsrcãšãããã£ã¬ã¯ããªã«é
眮ããŸãã ããã«ã¯ã³ãŒãã®ã¿ãå«ãŸããŠãããæçµçãªãã³ãã«ã«ãªããŸããããã以äžã®ãã®ã¯ãããŸããã ããã¯ãBabelïŒãŸãã¯ã³ãŒããåŠçããä»ã®ããŒã«ïŒã«1ã€ã®ãã£ã¬ã¯ããªã調ã¹ãŠãå¿
èŠã®ãªãã³ãŒããåŠçããªãããã«æ瀺ã§ãããã䟿å©ã§ãã Webpackæ§æãã¡ã€ã«ãªã©ã®ä»ã®ã³ãŒãã¯ãé©åãªãã£ã¬ã¯ããªã«ãããŸãã ããšãã°ããããã¬ãã«ã®ãã£ã¬ã¯ããªæ§é ã«ã¯æ¬¡ã®ãã®ãå«ãŸããŸãã
- src => app code here - webpack => webpack configs - scripts => any build scripts - tests => any test specific code (API mocks, etc)
éåžžãæäžäœã®ãã¡ã€ã«ã¯ãindex.htmlãpackage.jsonãããã³.babelrcãªã©ã®ããããã¡ã€ã«ã®ã¿ã§ãã package.jsonã«Babelèšå®ãå«ããããšã奜ã人ãããŸãããå€ãã®äŸåé¢ä¿ãæã€å€§èŠæš¡ãªãããžã§ã¯ãã§ã¯ããããã®ãã¡ã€ã«ã倧ãããªããããå¯èœæ§ãããããã.eslintrcã.babelrcãªã©ã䜿çšããããšããå§ãããŸãã
ã¢ããªã±ãŒã·ã§ã³ã³ãŒããsrcã«
resolve.modules
ããšã«ãã
resolve.modules
äžèšã®
resolve.modules
èšå®ã䜿çšããããšãã§ããŸããããã«ãããã€ã³ããŒãã容æã«ãªããŸãã
åå¿ã³ã³ããŒãã³ã
srcãã£ã¬ã¯ããªã決å®ããããã³ã³ããŒãã³ãã®æ§é åæ¹æ³ã決å®ããå¿
èŠããããŸãã ãããã®ãã¹ãŠãsrc / componentsãªã©ã®1ã€ã®å€§ããªãã©ã«ããŒã«é
眮ãããŠããå Žåã倧èŠæš¡ãªãããžã§ã¯ãã§ã¯éåžžã«ãã°ããæ··ä¹±ããŸãã
äžè¬çãªåŸåã¯ãã¹ããŒãã³ã³ããŒãã³ããšæããªã³ã³ããŒãã³ãïŒã³ã³ããã³ã³ããŒãã³ãããã³ãã¬ãŒã³ããŒã·ã§ã³ã³ã³ããŒãã³ããšãåŒã°ããïŒã«åå¥ã®ãã©ã«ãã䜿çšã§ããããšã§ããããã®ãããªæ瀺çãªåå²ã¯å¿
ãããæçšã§ã¯ãããŸããã ãŸãããããããã¹ããŒãããšããã«ãã«åé¡ã§ããã³ã³ããŒãã³ãããããŸããïŒè©³çŽ°ã¯ä»¥äžïŒããããã®ã«ããŽãªããšã«ãã©ã«ããŒãäœæããå¿
èŠã¯ãããŸããã
䜿çšãããã¢ããªã±ãŒã·ã§ã³é åã«åºã¥ããŠã³ã³ããŒãã³ããã°ã«ãŒãåããã©ãã§ã䜿çšãããäžè¬çãªã³ã³ããŒãã³ãïŒãã¿ã³ãããããŒãããã¿ãŒ-ãŠãããŒãµã«ã§åå©çšå¯èœãªã³ã³ããŒãã³ãïŒã®ã³ã¢ãã£ã¬ã¯ããªã䜿çšããŸããã æ®ãã®ãã£ã¬ã¯ããªã¯ãã¢ããªã±ãŒã·ã§ã³ã®ç¹å®ã®é åã«å¯Ÿå¿ããŠããŸãã ããšãã°ãã·ã§ããã³ã°ã«ãŒãã«é¢é£ä»ãããããã¹ãŠã®ã³ã³ããŒãã³ããå«ãcartãšããã«ã¿ãã°ãšããŠãŒã¶ãŒãããŒãžã§è³Œå
¥ã§ãããã®ã®ãªã¹ãã®ã³ãŒããå«ãListingsãšããã«ã¿ãã°ããããŸãã
ãŸãããã£ã¬ã¯ããªã§ã°ã«ãŒãåãããšãã³ã³ããŒãã³ãã䜿çšãããã¢ããªã±ãŒã·ã§ã³é åãæãäžèŠãªãã¬ãã£ãã¯ã¹ãé¿ããããšãã§ããŸãã ããšãã°ããŠãŒã¶ãŒã®ãã¹ã±ããã®åèšã³ã¹ãã衚瀺ããã³ã³ããŒãã³ããããå Žåãã«ãŒããã£ã¬ã¯ããªããã€ã³ããŒãããããããCartTotalã§ã¯ãªãTotalãšåŒã¶ããšãã§ããŸãã
import Total from 'src/cart/total'
ãã®èŠåã«éåããå ŽåããããŸããç¹ã«é¡äŒŒããååã®ã³ã³ããŒãã³ãã2ã3åããå Žåã¯ããã¬ãã£ãã¯ã¹ãè¿œå ãããšæ確ã«ãªãå ŽåããããŸãã ããããå€ãã®å Žåããã®æ¹æ³ã§ã¯ååã®éè€ãåé¿ãããŸãã
倧æåã§ã¯ãªãJSXæ¡åŒµå
å€ãã®äººã¯ãReactã³ã³ããŒãã³ãã®ååã«å€§æåã䜿çšããŠãéåžžã®JavaScriptãã¡ã€ã«ãšåºå¥ããŠããŸãã ãããã£ãŠãäžèšã®ã€ã³ããŒãã§ã¯ããã¡ã€ã«ã¯CartTotal.jsãŸãã¯Total.jsãšåŒã°ããŸãã ãã ããåºåãæåãšããŠãã€ãã³ã䜿çšããŠå°æåã«åºå·ããããšãã§ããŸããã€ãŸããReactã³ã³ããŒãã³ããåºå¥ããã«ã¯ã.jsxïŒcart-total.jsxãã¡ã€ã«æ¡åŒµåã䜿çšããŸãã
ããã«ãããããããªè¿œå ã®å©ç¹ãåŸãããŸããReactãã¡ã€ã«ã®ã¿ãç°¡åã«æ€çŽ¢ãã.jsxã§ãã¡ã€ã«å
ã®æ€çŽ¢ãå¶éã§ããå¿
èŠã«å¿ããŠç¹å®ã®Webpackãã©ã°ã€ã³ãé©çšããããšãã§ããŸãã
ã©ã®ãã¡ã€ã«åœåèŠåãéžæããŠããããã«åºå·ããããšãéèŠã§ãã ã¢ããªã±ãŒã·ã§ã³ã§ããã€ãã®èŠåãçµã¿åãããŠäœ¿çšââãããšãããã«æªå€¢ã«é¥ããã©ãã«ãããŠããã²ãŒãããå¿
èŠããããŸãã
ãã¡ã€ã«å
ã®1ã€ã®ã³ã³ããŒãã³ãã®ã¿
åã®èŠåã«åŸã£ãŠã1ã€ã®ãã¡ã€ã«ã«åžžã«1ã€ã®ã³ã³ããŒãã³ãã®ã¿ãé
眮ãããã®ã³ã³ããŒãã³ããåžžã«ããã©ã«ãã®ãšã¯ã¹ããŒãã«ããå¿
èŠããããšããåæã«æºæ ããŸãã
éåžžãReactãã¡ã€ã«ã¯æ¬¡ã®ããã«ãªããŸãã
import React, { Component, PropTypes } from 'react' export default class Total extends Component { ... }
ReduxããŒã¿ãŠã§ã¢ããŠã¹ãªã©ã«æ¥ç¶ããããã«ã³ã³ããŒãã³ããã©ããããå¿
èŠãããå Žåãå®å
šã«ã©ãããããã³ã³ããŒãã³ããããã©ã«ãã®ãšã¯ã¹ããŒãã«ãªããŸãã
import React, { Component, PropTypes } from 'react' import { connect } from 'react-redux' export class Total extends Component { ... } export default connect(() => {...})(Total)
å
ã®ã³ã³ããŒãã³ãããŸã ãšã¯ã¹ããŒãããŠããããšã«æ°ã¥ããŸãããïŒ ããã¯ããŠããããã¹ãã§Reduxãæ§æããã®ã§ã¯ãªãããåçŽãªãã³ã³ããŒãã³ãã§äœæ¥ã§ããå Žåã®ãã¹ãã«éåžžã«åœ¹ç«ã¡ãŸãã
ããã©ã«ãã§ã³ã³ããŒãã³ãããšã¯ã¹ããŒãããå Žåãæ£ç¢ºãªååãæ¢ãã®ã§ã¯ãªããã³ã³ããŒãã³ããã€ã³ããŒãããŠååŸããæ¹æ³ãç¥ãã®ã¯ç°¡åã§ãã ãã®ã¢ãããŒãã®æ¬ ç¹ã®1ã€ã¯ãã€ã³ããŒããããŠãŒã¶ãŒãã³ã³ããŒãã³ããèªç±ã«åŒã³åºãããšãã§ããããšã§ãã ç¹°ãè¿ãã«ãªããŸãããããã«ã¯åæããããŸããã€ã³ããŒãã¯ãã¡ã€ã«åã§å®è¡ããå¿
èŠããããŸãã ãããã£ãŠãtotal.jsxãã€ã³ããŒãããå Žåãã³ã³ããŒãã³ãã®ååã¯Totalã«ããå¿
èŠããããŸãã user-header.jsxã¯UserHeaderãªã©ã«ãªããŸãã
ã¹ããŒãããã³ãã Reactã³ã³ããŒãã³ã
äžèšã§ã¯ãã³ã³ããŒãã³ããã¹ããŒããšãã«ã«åé¢ããããšã«ã€ããŠç°¡åã«èšåããŸããã ãŸããããããå¥ã
ã®ãã£ã¬ã¯ããªã«é
眮ããŸããããã¢ããªã±ãŒã·ã§ã³ã次ã®2ã€ã®ã¿ã€ãã®ã³ã³ããŒãã³ãã«å€§ããåããããšãã§ããŸãã
- ã¹ããŒãã³ã³ããŒãã³ãã¯ãããŒã¿ãæäœããReduxã«æ¥ç¶ãããŠãŒã¶ãŒã®æäœãåŠçããŸãã
- æããªã³ã³ããŒãã³ãã¯ãç»é¢ã«ããŒã¿ã衚瀺ããããã®ããããã£ã»ããã®ã¿ãæäŸããŸãã
æããªã³ã³ããŒãã³ããç§ãã¡ã®ã¢ããªã±ãŒã·ã§ã³ã®å€§éšåãå ããŠãããå¯èœã§ããã°ããããã«åžžã«å¥œã¿ãäžããã¹ãã§ãã äœæ¥ãç°¡åã§ãåé¡ãå°ãªãããã¹ããç°¡åã§ãã
ã¹ããŒãã³ã³ããŒãã³ããäœæããå¿
èŠãããå Žåã§ãããã¹ãŠã®JavaScriptããžãã¯ãå¥ã®ãã¡ã€ã«ã«ä¿åããããšããŸãã çæ³çã«ã¯ãããŒã¿æäœã³ã³ããŒãã³ãã¯ãã®ããŒã¿ãJavaScriptã«æž¡ããå®éã«ãããå®è¡ããå¿
èŠããããŸãã ãã®åŸãReactãšã¯å¥ã«æäœã³ãŒãããã¹ãã§ããŸããReactã³ã³ããŒãã³ãããã¹ããããšãã«ãã³ãŒãã䜿çšããŠäœã§ãã§ããŸãã
倧ããªã¬ã³ããªã³ã°æ¹æ³ãé¿ãã
ç§ãã¡ãç®æããŠããããšã®1ã€ã¯ãå°æ°ã®å€§ããªReactã³ã³ããŒãã³ãã§ã¯ãªããå€æ°ã®å°ããªReactã³ã³ããŒãã³ãã䜿çšããããšã§ãã ã³ã³ããŒãã³ãã倧ãããªããããŠããããšã瀺ãè¯ãææšã¯ãã¬ã³ããªã³ã°é¢æ°ã®ãµã€ãºã§ãã é¢åã«ãªãå ŽåããŸãã¯ããã€ãã®å°ããªæ©èœã«åå²ããå¿
èŠãããå Žåã¯ãã³ã³ããŒãã³ããåå²ããããšãæ€èšããæéã§ãã
ããã¯å³å¯ãªèŠåã§ã¯ãããŸããã ããªããšããªãã®ããŒã ã¯ãæ°ãå¢ããåã«ãããªãã«ãšã£ãŠã倧ããªãã³ã³ããŒãã³ããšã¿ãªããããã®ãæ確ã«ç解ããå¿
èŠããããŸãã ãã ããã³ã³ããŒãã³ãã®
render
é¢æ°ã®ãµã€ãºã¯é©åãªã¬ã€ãã§ãã ç¶æ
ã«ããå°éå
·ãã¢ã€ãã ã®æ°ãå¥ã®è¯ãææšãšããŠäœ¿çšããããšãã§ããŸãã ã³ã³ããŒãã³ãã7ã€ã®ç°ãªãå°éå
·ãåãå
¥ããå Žåãããã¯ãããå€ãããããšã瀺ããŠããå¯èœæ§ããããŸãã
åžžã«æ¯æ±ã¿ã€ãã䜿çšãã
Reactã§ã¯ãprop-typesããã±ãŒãžã䜿çšããŠãã³ã³ããŒãã³ãã«æž¡ããããšäºæ³ãããããããã£ã®ååãšã¿ã€ããææžåã§ããŸãã ããã¯React 15.5ã«ã¯åœãŠã¯ãŸããªãããšã«æ³šæããŠãã ãã;以åã¯ãproptypeã¯Reactã¢ãžã¥ãŒã«ã®äžéšã§ããã
äºæ³ãããããããã£ã®ååãšã¿ã€ããããã³ãããããªãã·ã§ã³ã§ãããã©ããã宣èšããå Žåãã³ã³ããŒãã³ãã®æäœã«èªä¿¡ãæã¡ãããããã£ã®ååãå¿ããããééã£ãã¿ã€ããå²ãåœãŠããããå Žåã®ãããã°æéãççž®ããå¿
èŠããããŸãã ããã¯ãESLint-React PropTypesã«ãŒã«ã䜿çšããŠå®çŸã§ããŸãã
ããããè¿œå ããæéãç¡é§ã«ãªãããã«æããããããããŸããã ãã ãããããè¡ãå Žåã¯ã6ãæåã«äœæããã³ã³ããŒãã³ããåå©çšããããšã«æè¬ããŸãã
Redux
Reduxã䜿çšããŠãå€ãã®ã¢ããªã±ãŒã·ã§ã³ã§ããŒã¿ã管çããŠããŸãããŸããReduxã¢ããªã±ãŒã·ã§ã³ã®æ§é åã¯ãããŸããŸãªæèŠãæã€éåžžã«äžè¬çãªè³ªåã§ãã
ç§ãã¡ã®åè
ã¯Ducksã§ãã¢ããªã±ãŒã·ã§ã³ã®åéšåã®ã¢ã¯ã·ã§ã³ãã¬ãã¥ãŒãµãŒãã¢ã¯ã·ã§ã³ã¯ãªãšãŒã¿ãŒã1ã€ã®ãã¡ã€ã«ã«å
¥ããŸãã
ãããããäºãã«éä¿¡ããããã®ã³ãŒãã®æçãå«ãreducers.jsãšactions.jsã䜿çšãã代ããã«ãDucksã·ã¹ãã ã¯ãé¢é£ããã³ãŒããåäžã®ãã¡ã€ã«ã«ã°ã«ãŒãåããããšãçã«ããªã£ãŠãããšäž»åŒµããŠããŸãã 2ã€ã®æäžäœããŒ
user
ãš
posts
ãæã€Reduxã¹ãã¢ããããšããŸãã ãã©ã«ãæ§é ã¯æ¬¡ã®ããã«ãªããŸãã
ducks - index.js - user.js - posts.js
index.jsã«ã¯ãã¡ã€ã³ã®ã¬ãã¥ãŒãµãŒãäœæããã³ãŒããå«ãŸããŸããããããReduxã®
combineReducers
ã䜿çšããuser.jsããã³posts.jsã«ãããã®ãã¹ãŠã®ã³ãŒããé
眮ããŸããéåžžã¯æ¬¡ã®ããã«ãªããŸãã
ããã«ãããç°ãªããã¡ã€ã«ããã¢ã¯ã·ã§ã³ãšã¢ã¯ã·ã§ã³äœæè
ãã€ã³ããŒãããå¿
èŠããªããªãããªããžããªã®ããŸããŸãªéšåã®è¿ãã®ã³ãŒããä¿åã§ããŸãã
ã¹ã¿ã³ãã¢ãã³JavaScriptã¢ãžã¥ãŒã«
ãã®èšäºã§ã¯Reactã³ã³ããŒãã³ãã«çŠç¹ãåœãŠãŸããããReactã¢ããªã±ãŒã·ã§ã³ãäœæãããšãã«ãReactãšã¯å®å
šã«åé¢ããå€ãã®ã³ãŒããæžãããšãã§ããŸãã
ã³ã³ããŒãã³ãããåé€ã§ããããžãã¹ããžãã¯ãæã€ã³ã³ããŒãã³ããèŠã€ãããã³ã«ããããè¡ãããšããå§ãããŸãã éåžžãlibãŸãã¯servicesãšããååã®ãã£ã¬ã¯ããªã¯ããŸãæ©èœããŸã-ç¹å®ã®ååã¯éèŠã§ã¯ãããŸãããããéReactã³ã³ããŒãã³ããã§ãã£ã±ãã®ãã£ã¬ã¯ããªãæ¬åœã«å¿
èŠãªãã®ã§ãã
ãããã®ãµãŒãã¹ã¯ãæ©èœã®ã°ã«ãŒãããŸãã¯é¢é£ããæ©èœã®ãªããžã§ã¯ãããšã¯ã¹ããŒãããå ŽåããããŸãã ããšãã°ããã€ãã£ãã®
window.localStorage
APIã®å°ããªã©ãããŒãæäŸãã
services/local-storage
ããããŸãã
ããžãã¯ããã®ãããªã³ã³ããŒãã³ãããåé¢ããŠããããšã«ã¯ãããã€ãã®æ¬åœã«å€§ããªå©ç¹ããããŸãã
- Reactã³ã³ããŒãã³ããã¬ã³ããªã³ã°ããå¿
èŠãªãããã®ã³ãŒããåç¬ã§ãã¹ãã§ããŸãã
- Reactã³ã³ããŒãã³ãã§ã¯ããµãŒãã¹ãã¹ã¿ãåããŠãç¹å®ã®ãã¹ãã«å¿
èŠãªããŒã¿ãååŸã§ããŸãã
ãã¹ã
Jest Facebookãã¬ãŒã ã¯ãŒã¯ã¯ããã¹ãçšã®åªããããŒã«ã§ãã å€ãã®ãã¹ããéåžžã«è¿
éãã€é©åã«åŠçãã衚瀺ã¢ãŒãã§è¿
éã«å®è¡ããããã«ãã£ãŒãããã¯ãæäŸããReactã®ãã¹ãã«äŸ¿å©ãªæ©èœãæäŸããŸãã ãã¹ãã®æ§ææ¹æ³ãæ€èšããŠãã ããã
誰ããããã¹ãŠã®ã¿ã¹ã¯ã®ãã¹ãŠã®ãã¹ããå«ãå¥ã®ãã£ã¬ã¯ããªãçšæããæ¹ãè¯ããšèšãã§ãããã src / app / foo.jsxãããå Žåã¯ãtests / app / foo.test.jsxããããŸãã ãããå®éã«ã¯ãã¢ããªã±ãŒã·ã§ã³ã倧ãããªããšãå¿
èŠãªãã¡ã€ã«ãèŠã€ããããšãé£ãããªããŸãã ãŸãããã¡ã€ã«ãsrcã«ç§»åãããšããã¹ãã®ããã«ãã¡ã€ã«ã移åããã®ãå¿ããŠããŸããæ§é ã®åæã倱ãããŸãã ãŸããsrcãããã¡ã€ã«ãã€ã³ããŒãããå¿
èŠããããã¹ãã«ãã¡ã€ã«ãããå Žåãéåžžã«é·ãã€ã³ããŒããååŸããŸãã ãã£ãšèª°ããåºããããŸããïŒ
import Foo from '../../../src/app/foo'
æäœãé£ããããã£ã¬ã¯ããªæ§é ãå€æŽããå Žåã¯ä¿®æ£ãå°é£ã§ãã
ãã ããåãã¹ããã¡ã€ã«ããœãŒã¹ãã¡ã€ã«ãšå
±ã«é
眮ãããšããããã®åé¡ããã¹ãŠåé¿ãããŸãã ããããåºå¥ããããã«ããã¹ãã«æ¥å°ŸèŸ.specãè¿œå ããŸãããä»ã®ãã®ã¯.testãŸãã¯åã«-testã䜿çšããŸããããã¹ãŠåãååã®ãœãŒã¹ãã¡ã€ã«ã®é£ã«ãããŸãã
- cart â total.jsx â total.spec.jsx - services â local-storage.js â local-storage.spec.js
ãã£ã¬ã¯ããªæ§é ãå€æŽããããšãæ£ãããã¹ããã¡ã€ã«ãç°¡åã«ç§»åã§ããŸãã ãŸãããã¡ã€ã«ã«ãã¹ãããªãå Žåã«ãããã«ããããŸãã ãããã®åé¡ããã°ããç¹å®ããŠä¿®æ£ã§ããŸãã
çµè«
ç®æšãéæããæ¹æ³ã¯ãããããããŸãããããã¯Reactã«ã€ããŠèšããããšã§ãã ãã¬ãŒã ã¯ãŒã¯ã®æãåªããæ©èœã®1ã€ã¯ãããŒã«ããã«ãããŒã«ããã£ã¬ã¯ããªæ§é ã«é¢ããã»ãšãã©ã®æ±ºå®ãã©ã®ããã«è¡ãããšãã§ãããã§ãã ãã®èšäºãããã倧ããªReactã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããæ¹æ³ã«ã€ããŠã®ã¢ã€ãã¢ãäžããŠãããããšãé¡ã£ãŠããŸãã