ã¯ããã«
æšå¹Žãç§ãã¡ã®ããŒã ã¯ã瀟å ã®ã¢ããªã±ãŒã·ã§ã³ã®1ã€ãAngularããReactã«æžãæããŸããã 以åã¯ãå€ãã®äººãReactãæ±ã£ãŠããŸãããããåå¿è ããšãçµéšè ãã®äž¡æ¹ãããŸããã ããããç§ãã¡ã¯çããã®ãããžã§ã¯ãã§å€ãã®æ°ããããšãåŠã³ãŸãããç¹ã«ãéçºäžã«çãããéå¹çæ§ã«èŠããã§ãããååã®æåããæ¹æ³ãç 究ããããŸãã¯è©Šè¡é¯èª€ã«ãã£ãŠç§ãã¡ã«ãšã£ãŠæé©ãªãã®ãèŠã€ããçã¿ç¹ãæŽçãããšãã ãããç§ãã¡ãåŸããã®ã§ãã
Typescriptã䜿çšããŸãã
ãã®ãããžã§ã¯ãã§æãæåãã決å®ã®1ã€ã¯ãTypescriptã䜿çšããããšã§ãã TypescriptãšFlowãéžæããå¿ èŠããããŸããã Flowã«ã¯äœããããŸããã§ããããã¯ãŒã¯ãããŒã«ããé©ããŠãããããTypeScriptãåæ¢ããŸããã ç§ãã¡ã®å Žåã®TypeScriptã¯åãªã倩ã®æµã¿ã§ãããããŒã å šäœãšããŠã³ãŒãããŒã¹ãéçºãããšããç§ãã¡ã¯ããèªä¿¡ãæã€ããã«ãªããŸããã 巚倧ãªã³ãŒãããŒã¹ããªãã¡ã¯ã¿ãªã³ã°ããå Žåã3ã4åã®åŒã³åºããæ·±ããã¢ããªã±ãŒã·ã§ã³ã®ããŸããŸãªéšåããã®åŒã³åºããçºçããŸããããã¯ç¥çµè³ªã§ãã Typescriptã䜿çšããå Žåããã¹ãŠã®é¢æ°ãå ¥åãããšãäžç¢ºå®æ§ã¯ã»ãŒå®å šã«ãªããªããŸãã ãããããã¡ããããšã©ãŒã®åå ãšãªãäžæ£ãªã³ãŒããŸãã¯äžå®å šãªã³ãŒããTypeScriptã«èšè¿°ããããšã¯å¯èœã§ãããå³å¯ã«å ¥åãå³å®ãããšãããã€ãã®ãšã©ãŒã¯ã©ã¹ïŒããšãã°ãééã£ãåŒæ°ã»ãããæž¡ãïŒãäºå®äžæ¶æ» ããŸãã
Typescriptã§æ³³ãã§ããå ŽåããŸãã¯ã¢ããªã±ãŒã·ã§ã³ã®ãªã¹ã¯ã¬ãã«ãå€§å¹ ã«æžããããå Žåã¯ãTypescriptã䜿çšããŠãã ããã
ãšããã§ãç§ãã¡ã¯typestyle.github.io/#ã䜿çšããŸããããéåžžã«æºè¶³ããŠããŸãã
å³æ Œãªã³ãŒãã¹ã¿ã€ã«ãšæšæºãæããªããããã³/ãŸãã¯JavaScriptã§åãã§ãã¯ããŒã«ïŒFlowãTypescriptãªã©ïŒã䜿çšããªã倧èŠæš¡ãªã¢ããªã±ãŒã·ã§ã³ã¯é¿ããŠãã ãã ã ç¹ã«ãScala.jsãªã©ã®ä»ã®ããŒã«ãããã§åœ¹ç«ã¡ãŸãã
ããã©ããã ãå ¥åããã«javascriptãããžã§ã¯ããé·ããªãã»ã©ããªãã¡ã¯ã¿ãªã³ã°ãé£ãããªãããšã«æ³šæããŠãã ããã åãã§ãã¯ã«ãã£ãŠãªã¹ã¯ãå®å šã«åãé€ãããããšã¯ãããŸããããå€§å¹ ã«è»œæžãããŸãã
ãã°ã远跡ãã
ããŒã å šäœãè¡ã£ããã1ã€ã®éåžžã«éèŠãªæ±ºå®ã¯ãSentryã䜿çšããããšã§ããïŒ sentry.io/welcome ã ç§ã¯èªç¶ã«ãšã©ãŒã远跡ããããã®åªããããŒã«ã¯ä»ã«ããããšç¢ºä¿¡ããŠããŸãããç§ãã¡ã¯ã»ã³ããªãŒããå§ããŸããã Sentryã䜿çšãããšããŸãã§èŠãŠããããã«èŠããŸãã ãããŠæåã®æ®µéã§ãç§ãã¡ã¯ãŸãã§ç²ç®çã«å åŒã®ããã«ãå®çšŒåç°å¢ã«ç§»åããŸããã æåã¯åœŒãã¯ãã¹ã¿ãŒãšãŠãŒã¶ãŒã«äŸåããŠããã補åã®ãã°ã«ã€ããŠåœŒãããåŠã¶ã ãããšèãããŠãŒã¶ãŒã¯åžžã«ãã¹ã¿ãŒãéãããã°ãèŠã€ããã§ãããã ãããã»ã³ããªãŒãæ¬åœã«å©ããå Žæã§ãã ãªãªãŒã¹ãæ£ããé åžããã°ãç¹å®ã®ãªãªãŒã¹ãç¹å®ã®ãŠãŒã¶ãŒã°ã«ãŒãã«éäžããå®éã«ãã°ããšã©ãŒãé²ãããšãã§ããŸãã æ¬çªã«å ¥ãåã«å€ãã®ãšã©ãŒããã£ããããSentryã§ã³ãŒãã®å質ãåæããŸãããSentryã§ã¯ãäºæããªãããŒã¿ã®åé¡ããã®ä»ã®äžæãªç¶æ³ãç°¡åã«ç¹å®ã§ããŸãã
ãšã©ãŒãèªåçã«ãã£ããããæ©èœãå®çŸãããŸã§ãæ¬çªç°å¢ã«å ¥ããªãããã«ããŠãã ããã
SentryãŸãã¯ãã®ä»ã®ãšã©ãŒå ±åããŒã«ãšã®é£æºãæ¹åãããŸããã
ãã«ãããã»ã¹ãåçåãã
ã¯ããæéããããŠãã ããã ããŒã«ã«ã®éçºãã«ãã«20ç§ããããšããŸãããã ãããžã§ã¯ãã«10人ã®éçºè ãããŠã12åããšãã€ãŸã1æ¥ã«40åã³ãŒããåã³ã³ãã€ã«ãããšããŸãã ããã¯ã1æ¥800ç§åŸ æ©ããããšã«ãªããŸãã å°±æ¥æ¥ãšå¹Žé1ãæã®äŒæãèæ ®ã«å ¥ãããšãåéçºè ã¯å¹Žé50æéãããŒã å šäœã¯500人æã浪費ããããšãããããŸãã ã¢ã»ã³ããªæéãç°¡åã«ççž®ããã³ã³ããã¹ãã®åãæ¿ããšåŸ æ©ã«è²»ããæéãç¯çŽã§ããå Žåãããã¯ããããªããšã§ã¯ãããŸããã
Webpack DLLã®äœ¿çšãšéçºåŽããã®ä»ã®æé©åã®ãããã§ãåæ§ç¯ã«ã¯2ã5ç§ããããããŸããã ãŸããã¢ãžã¥ãŒã«ã®ã³ãŒãåå²ãšããããªããŒãã䜿çšããŸããã€ãŸããå€æŽãããã¢ãžã¥ãŒã«ã®ã¿ããªããŒããããŸãã ã¢ã»ã³ããªã®æ©èœãåæžããããŒãžã§ã³ããããããã¢ããªã±ãŒã·ã§ã³ã®ç¹å®ã®éšåã§äœæ¥ããã¢ããªã±ãŒã·ã§ã³å šäœãæåããã³ã³ãã€ã«ããŸãã webpackã§ã¯å€ãã®ããªãã¯ãå®è¡ã§ããŸãã
AirBnBã¯ããã«ãããã»ã¹ãã©ã®ããã«æé©åãããã«é¢ããçŽ æŽãããã¬ããŒããæžããŸããïŒ github.com/webpack/webpack/issues/5718 ããã«èšèŒãããŠããæé©åææ³ã®å€ãã¯åœç€Ÿã§ã䜿çšãããŠããŸãããä»ã®æé©åææ³ã¯äœ¿çšãããŠããŸããã
æšæºã®webpack-assemblyã«éå®ãããªãããã«ããŠãã ãããããªãæ·±ãæé©åãè¡ãããšããå§ãããŸãã
ããããç¹å®ã®ã¢ããªã±ãŒã·ã§ã³ã®è©³çŽ°ãèæ ®ããŠwebpackã¢ã»ã³ããªãã«ã¹ã¿ãã€ãºããå¿ èŠããããŸãã ããšãã°ãTypescriptã䜿çšããŠããå Žåãawesome-typescript-loaderã«é Œã£ãŠããŸãããããã§ãªãå Žåã¯ãç¥çŠãããããã¯ã䜿çšããŸãã
ææ°ã®Javascriptã³ã³ã¹ãã©ã¯ãã䜿çšããŸããããããäœã«ã€ãªããããèŠããŠãããŠãã ããã ããšãã°ãasync / awaitã䜿çšãããšãå®å šã«ã¯ãªãŒã³ãªéåæã³ãŒããæžãã®ã«éåžžã«äŸ¿å©ã§ãã ãããã
Promise.all
ãæåŸ ããpromiseã®èŠçŽ ãå®è¡ãããªãå ŽåãåŒã³åºãå šäœã厩å£ããããšãå¿ããªãã§ãã ããã reduxã¢ã¯ã·ã§ã³ãæ§ç¯ãããã®ã¯ãã®èšç®ã§ãããããªããšãå°ããªAPIã®é害ãåå ã§ãã¢ããªã±ãŒã·ã§ã³å šäœãããŒããããªãå¯èœæ§ããããŸãã
ãã1ã€ã®éåžžã«åªããèšèšã¯æ¡åŒµæŒç®åã§ããããªããžã§ã¯ãã®å¹³çã®èŠåã«éåããããã
PureComponent
ã䜿çšããèªç¶ãªæ¹æ³ããã€ãã¹ããããšã«
PureComponent
ããŠ
PureComponent
ã
Webã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ã«åœ±é¿ãããå Žåã¯ãES6 / ES7ã³ã³ã¹ãã©ã¯ãã®äœ¿çšãé¿ããŠãã ãã ã ããšãã°ã
onClick
ã§ãã®å¿åã®å éšé¢æ°ãæ¬åœã«å¿ èŠã§ããïŒ è¿œå ã®åŒæ°ãæž¡ããªãå Žåãã»ãšãã©ã®å Žåå¿ èŠãããŸããã
ããŸããŸãªãã¶ã€ã³ã®å¹æãããããç解ããããããåççã«äœ¿çšããŸãã
ããã«ãå¿ èŠã§ããïŒ
å€ãè¯ãJavascriptããTypescriptãžã®æžãæãã®æåã®æ®µéã®1ã€ã§ã¯ããŸã ãã€ãã©ã€ã³ã«ããã«ããããŸããã ããããããæç¹ã§ãããã®ããã¯ã¹ã§babelã¯äœãããã®ãããšèªåããŸãããBabelã¯ãç®çã®ã¿ã¹ã¯ãå®å šã«è§£æ±ºããéåžžã«è²Žéãªã©ã€ãã©ãªã§ãããTypescriptã䜿çšããŸãã ããã«ã¯å¿ èŠãããŸããã ãããªãã§ã³ãŒããæžãçŽãããšã§ããã«ãããã»ã¹ãå éãã1ã¬ãã«ã®è€éããåãé€ããŸããã
å¿ èŠã®ãªãã©ã€ãã©ãªãããŠã³ããŒããŒã䜿çšããªãããã«ããŠãã ãã ã package.jsonãŸãã¯webpackã®èšå®ãæåŸã«ç¢ºèªããæªäœ¿çšã®ããŒããŒãšã©ã€ãã©ãªã確èªããã®ã¯ãã€ã§ããïŒ
ãã«ãããŒã«ãã§ãŒã³ãšããŠã³ããŒãå¯èœãªã©ã€ãã©ãªãå®æçã«ç¢ºèªããããšããå§ãããŸã-ããããäœããåãé€ãããšãã§ããŸãã
ããªããæã£ãŠããäžèŠãªã©ã€ãã©ãªãæ€èšãã
äŸåé¢ä¿ãæŽæ°ããå Žåãåžžã«ããçšåºŠã®ãªã¹ã¯ããããŸããæ©èœãã¹ããTypescriptãããã³é©åãªã¢ã»ã³ããªã®å©ããåããŠæžããããšãã§ããŸãã æŽæ°ãããªãå Žåããªã¹ã¯ã¯ããã«é«ããªãå¯èœæ§ããããŸãã ããšãã°ãäž»èŠãªå€æŽãè¡ãããReact 16ãèããŠã¿ãŸããããReact15ã®æè¿ã®ããŒãžã§ã³ã§ã¯ãäžéšã®äŸåé¢ä¿ããŸã æ°ããPropTypesæšæºã«æºæ ããŠãããã次ã®ãªãªãŒã¹ã§éåããããšãèŠåã§ããŸãã ãããã®èŠåã¯æ¬¡ã®ããã«ãªããŸããã
Warning: Accessing PropTypes via the main React package is deprecated. Use the prop-types package from npm instead.
ãããã£ãŠããã®ãããªåé¡ã解決ããäŸåã©ã€ãã©ãªãäžåºŠãæŽæ°ããããšããªãå ŽåãReact 16ã«ã¢ããã°ã¬ãŒãããããšã¯ã§ããŸããã
äŸåã©ã€ãã©ãªã®ç®¡çã¯ãäž¡åã®å£ã®äžçš®ã§ãã äŸåé¢ä¿ãä¿®æ£ããå Žåãæåã¯ãªã¹ã¯ã軜æžããŸãããå°æ¥ãäœããä¿®æ£ããããïŒæœåšçã«ïŒæé©åããæ©äŒãéããããããªã¹ã¯ããããŸãã äžéšã®ã©ã€ãã©ãªã®äŸåé¢ä¿ã¯ã«ãŒã«ã«åŸã£ãŠããªãå Žåãããã補åææè ã¯éèŠãªä¿®æ£ãå€ãããŒãžã§ã³ã«ç§»æ€ããªãå ŽåããããŸãã
ãã®ãã¹ãã£ãã¯ãã®å察åŽ-ã©ã€ãã©ãªã®ããŒãžã§ã³ãé »ç¹ã«æŽæ°ããããšã匷ãäŸåé¢ä¿ãå¹²æžããå¯èœæ§ããããŸãã
ã©ã€ãã©ãªã®ã³ããããšæŽæ°ã®ãã©ã³ã¹ãé »ç¹ã«èŠã€ããããšãã§ããŸããã ãã®å Žåã劥åç¹ããããŸããã¡ã€ã³ãªãªãŒã¹ãå®å®ãããããã¢ããªã±ãŒã·ã§ã³ã®åŒ·åã®æ®µéã§äŸåé¢ä¿ãæŽæ°ããæéãäœãããšããŸãã
äŸåé¢ä¿ãä¿®æ£ãããæŽæ°ãæåŠããªãã§ãã ãã ã ããã«ããªãªãŒã¹ã®çŽåŸã«åã¡ãžã£ãŒãªãªãŒã¹ãæŽæ°ããå¿ èŠã¯ãããŸããã
äŸåé¢ä¿ãªãªãŒã¹ã®ãã§ãã¯ã·ãŒã±ã³ã¹ãããé©åã«å®è¡ããçŸåšæŽæ°ãã䟡å€ããããã®ãè©äŸ¡ããã¢ããªã±ãŒã·ã§ã³ã®äŸµå ¥æ®µéã§ãã®ãããªæŽæ°ãå®è¡ããŸãã
ã¹ã¿ãã¯ã®åŒ±ç¹ãç¥ã
ããšãã°ã
react-actions
ãš
react-redux
ã䜿çšããŸãããæ¬ ç¹ããããŸãïŒã¢ã¯ã·ã§ã³åŒæ°ã®ã¿ã€ãã¯ã¢ã¯ã·ã§ã³ãšãªãã¥ãŒãµãŒéã§ãã§ãã¯ãããŸããã ãã®ã³ã³ããã¹ãã§ã¯ãã¢ã¯ã·ã§ã³ãæŽæ°ãããšãã«ããã€ãã®åé¡ãçºçããŸããããã³ã³ããŒã¿ãŒã®èŠçŽ ãæŽæ°ããã®ãå¿ããåãã§ãã¯äžã«ãã£ãããããªãã£ãäžäžèŽããããŸããã ãã®åé¡ãåé¿ãã1ã€ã®æ¹æ³ã¯ããã¹ãŠã®åŒæ°ãå«ãåäžã®ã€ã³ã¿ãŒãã§ã€ã¹ãèšè¿°ãããããæäœããããšã§ãã ãã®å Žåããã®ç¹å®ã®å ±æã€ã³ã¿ãŒãã§ã€ã¹ãæŽæ°ããŠããããããã¹ãŠã®ã¿ã€ããé©åã«ãã§ãã¯ãããŸãã
ãããããªãã§ãã ãã ïŒ
interface IActionProductName { productName: string; } interface IActionProductVersion { productVersion string; } const requestUpdateProductVersion = createAction(types.REQUEST_UPDATE_PRODUCT_VERSION, (productName: string, productVersion: string) => ({productName, productVersion}), null ); const receiveUpdateProductVersion = createAction(types.RECEIVE_UPDATE_PRODUCT_VERSION, (productName: string, productVersion: string) => ({productName, productVersion}), isXhrError ); [types.RECEIVE_UPDATE_PRODUCT_VERSION]: (state: ICaseDetailsState, action: ActionMeta): ICaseDetailsState => { // ... });
倧èŠæš¡ãªã¢ããªã±ãŒã·ã§ã³ã§ã¯ããã®ã¢ãããŒãã¯ããã·ã³ãã«ã§ãããã¯ãªãŒã³ã§ãããã³ã³ãã¯ãã§ãããã¢ã¯ã·ã§ã³ãšã³ã³ããŒã¿ãŒã®éã®ANDã€ã³ã¿ãŒãã§ãŒã¹ã§ã®åãã§ãã¯ãæ¬ ããŠããŸãã å³å¯ã«èšãã°ãã¢ã¯ã·ã§ã³ãšã³ã³ããŒã¿ãŒã®éã«ã¯ãŸã çã®åãã§ãã¯ã¯ãããŸãããããã¹ãŠã®åŒæ°ã«å¯ŸããŠåäžã®ã€ã³ã¿ãŒãã§ã€ã¹ããªãããããªãã¡ã¯ã¿ãªã³ã°æã«ãšã©ãŒã®ãªã¹ã¯ããããŸãã
ããè¯ããããè¡ãïŒ
interface IActionUpdateProductNameVersion { productName: string; productVersion: string; } const requestUpdateProductVersion = createAction(types.REQUEST_UPDATE_PRODUCT_VERSION, (productName: string, productVersion: string) => ({productName, productVersion}), null ); const receiveUpdateProductVersion = createAction(types.RECEIVE_UPDATE_PRODUCT_VERSION, (productName: string, productVersion: string) => ({productName, productVersion}), isXhrError ); [types.RECEIVE_UPDATE_PRODUCT_VERSION]: (state: ICaseDetailsState, action: ActionMeta): ICaseDetailsState => { // ... });
å ±éã®
interfaces.IActionUpdateProductNameVersion
ã䜿çšããå Žåããã®ã€ã³ã¿ãŒãã§ã€ã¹ã®å€æŽã¯ã¢ã¯ã·ã§ã³ãšã³ã³ããŒã¿ãŒã®äž¡æ¹ã§ååŸãããŸãã
ãã©ãŠã¶ãŒã§ã¢ããªã±ãŒã·ã§ã³ã®ãããã¡ã€ã«ãäœæãã
Reactã¯ããã©ãŒãã³ã¹ã®åé¡ãããããšãèªããŸããããŸããjavascriptã®ãããã¡ã€ãªã³ã°æ å ±ãèŠãªããšãå®éã«ããããç¹å®ããããšã¯å°é£ã§ãã
å€ãã®React / Javascriptã®ããã©ãŒãã³ã¹ã®åé¡ã¯ã次ã®3ã€ã®ã«ããŽãªã®ããããã«è©²åœãããšæããŸãã
æåïŒã³ã³ããŒãã³ãã¯æŽæ°ããããããããŸããããæŽæ°ãããã¹ãã§ã¯ãããŸãããïŒ ãããŠã次ã®åé¡ïŒã³ã³ããŒãã³ããæŽæ°ããã®ã¯ãåã«è¡šç€ºãããããè²»çšããããã®ã§ããããïŒ æåã®è³ªåã«çããã®ã¯ç°¡åã§ããã2çªç®ã®è³ªåã«çããã®ã¯ããã»ã©ç°¡åã§ã¯ãããŸããã ããããæåã®è³ªåã«çãããšã github.com/MalucoMarinero/react-wastage-monitorã®ãããªãã®ã䜿çšã§ããŸããããã¯ç°¡åã§ãã ããŒã«ã¯ãã³ã³ããŒãã³ããæŽæ°ããããããã®ããããã£ãå€æŽãããŠããªãå Žåããã®ãããªå Žåã«ã€ããŠã³ã³ãœãŒã«ã«éç¥ããŸãã ãã®ç¹å®ã®ç®çã®ããã«ã圌ã¯è¯ãã§ãã node_modulesãé©åã«é€å€ããããšãã§ããªãã£ãããããã®ã©ã€ãã©ãªã䜿çšããŠæé©åãå®è¡ããç¡å¹ã«ããŸãããããèªäœãäžå®å šã§ãããã倱æããŸãããããããã£ãªã©ã®æ©èœã«äŸåããŸãã åããŒã«ã¯ãç®çã«é©ããŠããŸãã
Javascriptæé©åã®2çªç®ã®ã«ããŽãªã¯ããããã¡ã€ãªã³ã°ã«ãã£ãŠéæãããŸãã ã³ãŒãã«äºæ³ãããé ãã»ã¯ã·ã§ã³ããããŸããïŒ ã¡ã¢ãªãªãŒã¯ã¯ãããŸããïŒ
ã°ãŒã°ã«ã¯ãã®äž»é¡ã«é¢ããŠçŽ æŽãããå©ããããã
developers.google.com/web/tools/chrome-devtools/evaluate-performance/reference and developers.google.com/web/tools/chrome-devtools/memory-problems
3çªç®ã®ã«ããŽãªã¯ãäžèŠãªåŒã³åºããšæŽæ°ã®æé€ã§ãã ãã®æé©åã¯æåã®ãã®ãšã¯ç°ãªããŸãã 次ã«ãã³ã³ããŒãã³ããæŽæ°ããå¿ èŠããããã©ããã確èªããŸããã ãã®å Žåãæé©åã¯ãåŒã³åºãããŸã£ããå¿ èŠãã©ããã®è³ªåããå§ãŸããŸãã ãããã£ãŠããã®ãããªãã¹ãç¯ãããšã¯äŸ¡å€ããããŸãããããã¯ãšã³ãããåãã³ã³ããŒãã³ãã«èª€ã£ãŠå€ãã®åŒã³åºããéä¿¡ããŸãã
ããã«éå®ãããªãããã«ããŠãã ãã ïŒ
componentWillReceiveProps(nextProps: IProps) { if (this.props.id !== nextProps.id) { this.props.dispatch(fetchFromBackend(id)); } } export function fetchFromBackend(id: string) { return async (dispatch, getState: () => IStateReduced) => { // ... } }
ããè¯ããããè¡ãïŒ
componentWillReceiveProps(nextProps: IProps) { if (this.props.id !== nextProps.id && !nextProps.isFetchingFromBackend) { this.props.dispatch(fetchFromBackend(id)); } } , : export function fetchFromBackend(id: string) { return async (dispatch, getState: () => IStateReduced) => { if (getState().isFetchingFromBackend) return; ... } }
ãã®äŸã¯å°ã工倫ãããŠããŸããããã¹ãŠãããžãã¯ã®äžã§æŽç¶ãšããŠããŸãã ã³ã³ããŒãã³ãã§componentWillReceivePropsãæ©èœããå Žåã«åé¡ãçºçããŸãããæåããããã¯ãšã³ãããã®åŒã³åºããå¿ èŠãã©ããã®ãã§ãã¯ãã€ã³ã¹ããŒã«ããªãã£ãå Žåãç¡æ¡ä»¶ã«å®è¡ãããŸãã
ããŸããŸãªã¯ãªãã¯ãåŒæ°ã®å€æŽã«å¯ŸåŠããå¿ èŠãããå Žåãåé¡ã¯ããã«è€éã«ãªããŸãã 販売泚æã衚瀺ããŠããŠãã³ã³ããŒãã³ããæ°ãã泚æã§å衚瀺ããå¿ èŠãããå Žåããããèµ·ããåã«ããŠãŒã¶ãŒã¯å¥ã®å Žæãã¯ãªãã¯ããŠæ°ãã泚æãè¡ãããšãã§ããŸãã ãã®ãããªéåæåŒã³åºããè¡ãããšã¯ãåžžã«æ±ºå®çã§ã¯ãããŸããã ããã«ãããã¯ãšã³ãã§ã®äºæããªãé 延ãåå ã§ãæåã®éåæåŒã³åºãã2çªç®ã®éåæåŒã³åºããããåŸã«è¡ãããå Žåã¯ã©ããªããŸããïŒ ãã®åŸããŠãŒã¶ãŒã«ã¯ééã£ãé åºã衚瀺ãããŸãã äžèšã®ã³ãŒãäŸã§ã¯ããã®åé¡ã¯åœ±é¿ãåããŸãããããã®ãããªã³ãŒãã§ã¯ã1ã€ã®åŒã³åºããè¡ãããŠããéã«å€ãã®åŒã³åºããè¡ãããšã¯ã§ããŸããã æçµçã«ããã®ãããªä»®æ³ã®ç¶æ³ã«å¯ŸåŠããããã«ã次ã®ããã«ãã³ã³ããŒã¿ãŒã§ããŒã¢ã¯ã»ã¹ãæã€ãªããžã§ã¯ããäœæããå¿ èŠããããŸãã
objectCache: {[id: string]: object}; isFetchingCache: {[id: string]: boolean};
ã³ã³ããŒãã³ãã«ã¯åžžã«ã¯ãªãã¯ãããæåŸã®
id
ãžã®ãªã³ã¯ãå«ãŸãã
isFetchingCache
ã¯æåŸã®
id
ããŒã¯ãããŸãã
ReactãšJavaScriptã䜿çšããéã«çºçããå¯èœæ§ããããã¹ãŠã®ããã©ãŒãã³ã¹ã®åé¡ãäžèšã§èæ ®ãããããã§ã¯ãªãããšã«æ³šæããŠãã ããã ç¹ã«ãäžåºŠãªãã¥ãŒãµãŒãåŒã³åºãããšãã«ããã©ãŒãã³ã¹ã®äœäžã«ééããããšããããŸãã åé¡ã®åå ã¯ãreduxã®APIããã®å¿çã«éåžžã«æ·±ãåã蟌ãŸãã倧ããªãªããžã§ã¯ããããããã§ããããã£ãŒãã¯ããŒãã³ã°ã®ããã©ãŒãã³ã¹ãæãªãããŠããããšãå€æããŸããã Chromeã§JavaScriptããããã¡ã€ãªã³ã°ããããšã§åé¡ããã£ããã§ããŸãããã¯ããŒã³æ©èœããã°ãã䜿çšããããšãã«ãåé¡ãããã«ããããŸããã