- React + Storybookã§ã®ã³ã³ããŒãã³ãã©ã€ãã©ãªã®éçº
- JSã§ã®ãã¹ãäž»å°ã®éçºãŸãã¯ææ ã®ããããã°ã©ãã³ã°ãéå§ããæ¹æ³
- å®éã®ãããžã§ã¯ããJavascriptããTypescriptã«ç§»è¡ãã-èŠçãšæ©èœ
ããã§ã¯ãèšäºã«ç§»ããŸãããã
ReactãåŠã³å§ãããšããç解ã§ããªãããšãããã€ããããŸããããããŠãReactã«ç²ŸéããŠããã»ãšãã©ã®äººãåã質åãããŠãããšæããŸãã人ã ã¯å·®ãè¿«ã£ãåé¡ã解決ããããã«ã©ã€ãã©ãªå šäœãæ§ç¯ããŠããã®ã§ãç§ã¯ããã確信ããŠããŸããã»ãšãã©ãã¹ãŠã®Reactéçºè ãæ°ã«ãããŠãããšæããã2ã€ã®äž»ãªè³ªåã次ã«ç€ºã
ãŸããããã³ã³ããŒãã³ããå¥ã®ã³ã³ããŒãã³ãã«ããæ å ±ïŒç¹ã«ç¶æ å€æ°ïŒã«ã©ã®ããã«ã¢ã¯ã»ã¹ããããããã³ã³ããŒãã³ããå¥ã®ã³ã³ããŒãã³ãã«ããé¢æ°ãã©ã®ããã«åŒã³åºãã®ã§ããïŒ
äžè¬çãªJavaScriptéçºè ïŒç¹ã«Reactéçºè ïŒã¯ãæè¿ãããããçŽç²ãªé¢æ°ã®äœæã«ãŸããŸãé¢å¿ãå¯ããŠããŸããç¶æ å€åã«é¢é£ä»ããããŠããªãé¢æ°ãå€éšããŒã¿ããŒã¹æ¥ç¶ãå¿ èŠãšããªãæ©èœããããã®å€éšã§äœãèµ·ãããã«äŸåããªãæ©èœã
ãã¡ãããçŽç²ãªæ©èœã¯é«è²Žãªç®æšã§ããããããå€ããå°ãªããè€éãªã¢ããªã±ãŒã·ã§ã³ãéçºããŠããå Žåããã¹ãŠã®æ©èœãã¯ãªãŒã³ã«ããããšã¯ã§ããŸããã確ãã«ãä»ã®ã³ã³ããŒãã³ãã«äœããã®åœ¢ã§é¢é£ããã³ã³ããŒãã³ããå°ãªããšãããã€ãäœæããå¿ èŠããããšããæ¥ãã§ãããããããé¿ããããšããã®ã¯ã°ãããŠããŸããã³ã³ããŒãã³ãéã®ãããã®æ¥ç¶ã¯ãäŸåé¢ä¿ãšåŒã°ããŸãã
äžè¬ã«ãäŸåé¢ä¿ã¯æªããæ¬åœã«å¿ èŠãªå Žåã«ã®ã¿äœ¿çšããã®ãæé©ã§ããããããç¹°ãè¿ãã«ãªããŸãããã¢ããªã±ãŒã·ã§ã³ãæé·ããå Žåããã®ã³ã³ããŒãã³ãã®äžéšã¯å¿ ç¶çã«çžäºã«äŸåããŸãããã¡ãããReactéçºè ã¯ãããç¥ã£ãŠããã®ã§ã1ã€ã®ã³ã³ããŒãã³ãã«éèŠãªæ å ±ãŸãã¯æ©èœããã®åã³ã³ããŒãã³ãã«æž¡ãæ¹æ³ãèãåºããŸããã
æšæºçãªã¢ãããŒãïŒå°éå ·ã䜿çšããŠå€ãæž¡ã
ä»»æã®ç¶æ å€ã¯ãå°éå ·ãä»ããŠå¥ã®ã³ã³ããŒãã³ãã«æž¡ãããšãã§ããŸãããã¹ãŠã®é¢æ°ã¯ããã¹ãŠåãå°éå ·ãä»ããŠåã³ã³ããŒãã³ãã«æž¡ãããšãã§ããŸããããã¯ãåå«ãããªãŒã«æ ŒçŽãããŠããç¶æ å€ãèªèãã芪ã³ã³ããŒãã³ãã§ã¢ã¯ã·ã§ã³ãåŒã³åºãå¯èœæ§ãããæ¹æ³ã§ãããã¡ãããããã¯ãã¹ãŠè¯ãããšã§ããããããReactã®éçºè ã¯ç¹å®ã®åé¡ãæžå¿µããŠããŸãã
ã»ãšãã©ã®ã¢ããªã±ãŒã·ã§ã³ã¯éå±€åãããŠããŸããè€éãªã¢ããªã±ãŒã·ã§ã³ã§ã¯ãæ§é ãéåžžã«æ·±ããã¹ãã§ããŸããäžè¬çãªã¢ãŒããã¯ãã£ã¯æ¬¡ã®ããã«ãªããŸãã
App
âåç
§ContentArea
ContentArea
ââåç
§MainContentArea
MainContentArea
ââåç
§MyDashboard
MyDashboard
ââåç
§MyOpenTickets
MyOpenTickets
ââåç
§TicketTable
TicketTable
ââåç
§ã·ãŒã±ã³ã¹âTicketRow
å šå¡
TicketRow
âåç
§âTicketDetail
çè«çã«ã¯ããã®è±èŒªã¯é·ãéå·»ãä»ããããšãã§ããŸãããã¹ãŠã®ã³ã³ããŒãã³ãã¯å šäœã®äžéšã§ããããæ£ç¢ºã«ã¯ãéå±€ã®äžéšã§ããããããããã§çåãçããŸãïŒäžèšã®äŸ
ã®ã³ã³ããŒãã³ã
TicketDetail
ã¯ãã«æ ŒçŽãããŠããç¶æ
å€ãèªã¿åãããšãã§ãContentArea
ãŸããïŒãŸãã¯ãã³ã³ããŒãã³ãTicketDetail
ã¯ã«ããé¢æ°ãåŒã³åºãããšãã§ããŸãContentArea
ãïŒ
äž¡æ¹ã®è³ªåã«å¯Ÿããçãã¯ã€ãšã¹ã§ããçè«çã«ã¯ããã¹ãŠã®åå«ã¯ã芪ã³ã³ããŒãã³ãã«æ ŒçŽãããŠãããã¹ãŠã®å€æ°ã«ã€ããŠç¥ãããšãã§ããŸãããŸããç¥å é¢æ°ãåŒã³åºãããšãã§ããŸããã倧ããªæ³šæç¹ããããŸããããã¯ããã®ãããªå€ïŒç¶æ ãŸãã¯é¢æ°ã®å€ïŒãå°éå ·ãä»ããŠåå«ã«æ瀺çã«æž¡ãããå Žåã«ã®ã¿å¯èœã§ããããããªããšãã³ã³ããŒãã³ãã®ç¶æ ãŸãã¯é¢æ°ã®å€ããã®åã³ã³ããŒãã³ãã§äœ¿çšã§ããªããªããŸãã
å°ããªã¢ããªã±ãŒã·ã§ã³ããŠãŒãã£ãªãã£ã§ã¯ãããã¯ç¹å¥ãªåœ¹å²ãæãããŸãããããšãã°ãã³ã³ããŒãã³ã
TicketDetail
ãã«æ ŒçŽãããŠããç¶æ
å€æ°ã«ã¢ã¯ã»ã¹ããå¿
èŠãããå ŽåTicketRow
ãã³ã³ããŒãã³ãã«TicketRow
âãããã®å€ããã®åå«ã«æž¡ãâ TicketDetail
1ã€ä»¥äžã®å°éå
·ãä»ããŠè¡ãã ãã§ååã§ããã³ã³ããŒãã³ãTicketDetail
ãã«ããé¢æ°ãåŒã³åºãå¿
èŠãããå Žåãåãã§ãTicketRow
ãã³ã³ããŒãã³ãTicketRow
âãã®é¢æ°ããã®åå«â TicketDetail
propçµç±ã§æž¡ããŸããããªãŒã®ã¯ããäžã«ããã³ã³ããŒãã³ãããéå±€ã®æäžäœã«ããã³ã³ããŒãã³ãã®ç¶æ
ãŸãã¯æ©èœã«ã¢ã¯ã»ã¹ããå¿
èŠããããšãã«ãåé¡ãçºçããŸãã
ãã®åé¡ã解決ããããã«ãReactã¯äŒçµ±çã«ãã¹ãŠã®ã¬ãã«ã«å€æ°ãšé¢æ°ãæž¡ããŠããŸãããããããããã¯ã³ãŒããä¹±éã«ãããªãœãŒã¹ãæ¶è²»ããçå£ãªèšç»ãå¿ èŠãšããŸããç§ãã¡ã¯ããã®ãããªå€ãã®ã¬ãã«ã«å€ãæž¡ãå¿ èŠããããŸãïŒ
ContentArea
â MainContentArea
â MyDashboard
â MyOpenTickets
â TicketTable
â TicketRow
âTicketDetail
ãããŠããããšãããç¶æ å€æ°ãæž¡ãããã«
ContentArea
ãšTicketDetail
ãç§ãã¡ã¯å€ãã®äœæ¥ãè¡ãå¿
èŠããããŸããçµéšè±å¯ãªéçºè
ã¯ãå€ãæž¡ããšããéãé·ããã§ãŒã³ããããã³ã³ããŒãã³ãã®äžéã¬ãã«ãä»ããŠå°éå
·ãšããŠæ©èœããããšãç解ããŠããŸãã解決çã¯éåžžã«é¢åãªã®ã§ãReactã®åŠç¿ãäœåºŠããããããŸããã
Reduxãšããååã®ã¢ã³ã¹ã¿ãŒ
ãã¹ãŠã®ç¶æ å€ãšã³ã³ããŒãã³ãã«å ±éã®ãã¹ãŠã®é¢æ° ãå°éå ·ãä»ããŠæž¡ãããšã¯éåžžã«éçŸå®çã§ãããšèããã®ã¯ç§ã ãã§ã¯ãããŸãããç¶æ 管çããŒã«ãä»å±ããŠããªãè€éãªReactã¢ããªã±ãŒã·ã§ã³ãèŠã€ããå¯èœæ§ã¯ã»ãšãã©ãããŸããããã®ãããªããŒã«ã¯ããã»ã©å°ãªããããŸãããå人çã«ã¯MobXã倧奜ãã§ããæ®å¿µãªãããReduxã¯ãæ¥çæšæºããšèŠãªãããŠããŸãã
Reduxã¯ãReactã³ã¢ã®äœæè ã®çºæ¡ã«ãããã®ã§ããã€ãŸãã圌ãã¯æåã«çŽ æŽãããReactã©ã€ãã©ãªãäœæããŸããããããã圌ãã¯ããã«åœŒå¥³ã®æ段ã§åœå®¶ã管çããããšã¯ã»ãšãã©äžå¯èœã§ããããšã«æ°ã¥ããŸããããã圌ãããã®ïŒããã§ãªããã°çŽ æŽãããïŒã©ã€ãã©ãªã®åºæã®åé¡ã解決ããæ¹æ³ãèŠã€ããªãã£ãããç§ãã¡ã®å€ãã¯Reactã«ã€ããŠèããããšããªãã£ãã ããã
ããã§åœŒãã¯Reduxãæãã€ããã
ReactãMonaLisaã®å ŽåãReduxã¯ããã«ä»éããå£ã²ãã§ãã Reduxã䜿çšããŠããå Žåã¯ãã»ãŒãã¹ãŠã®ãããžã§ã¯ããã¡ã€ã«ã«å€§éã®å®åã³ãŒããèšè¿°ããå¿ èŠããããŸãããã©ãã«ã·ã¥ãŒãã£ã³ã°ãšã³ãŒãã®èªã¿åãã¯å°çã«ãªããŸããããžãã¹ããžãã¯ã¯è£åºã«æã¡åºãããŸããã³ãŒãã«ã¯æ··ä¹±ãšæºããå«ãŸããŠããŸãã
ãã ããéçºè ãReact + ReduxãŸãã¯ãµãŒãããŒãã£ã®ç¶æ 管çããŒã«ã䜿çšããã«Reactãéžæã§ããå Žåãã»ãšãã©ã®å ŽåãReact + ReduxãéžæããŸãã Reduxã©ã€ãã©ãªã¯Reactã³ã¢ã®äœæè ã«ãã£ãŠéçºããããããããã©ã«ãã§æ¿èªããããœãªã¥ãŒã·ã§ã³ãšèŠãªãããŸãããããŠãã»ãšãã©ã®éçºè ã¯ããã®ããã«æé»ã®ãã¡ã«æ¿èªããããœãªã¥ãŒã·ã§ã³ã䜿çšããããšã奜ã¿ãŸãã
ãã¡ãããReduxã¯äŸåé¢ä¿ã®ãŠã§ãå šäœãäœæããŸãReactã¢ããªã±ãŒã·ã§ã³ã§ãããããå ¬å¹³ãæãããã«ãäžè¬çãªç¶æ 管çããŒã«ã§ãåãããšãã§ããŸããç¶æ 管çããŒã«ã¯ãå€æ°ãšé¢æ°ã®å ±æãªããžããªã§ãããã®ãããªé¢æ°ãšå€æ°ã¯ãå ±æã¹ãã¬ãŒãžã«ã¢ã¯ã»ã¹ã§ãããã¹ãŠã®ã³ã³ããŒãã³ãã§äœ¿çšã§ããŸããããã«ã¯æãããªæ¬ ç¹ã1ã€ãããŸããããã¯ããã¹ãŠã®ã³ã³ããŒãã³ããå ±æã¹ãã¬ãŒãžã«äŸåããããã«ãªãããšã§ãã
Reduxã®äœ¿çšã«æµæããããšããç§ãç¥ã£ãŠããReactéçºè ã®ã»ãšãã©ã¯ãæçµçã«ãããããŸããã ïŒãªããªã...æµæã¯åœ¹ã«ç«ããªãããã§ããïŒç§ã¯ããã«Reduxãå«ãå€ãã®äººã ãç¥ã£ãŠããŸãããããã圌ããéžæã«çŽé¢ãããšã-ReduxãŸãã¯ãå¥ã®Reactéçºè ãèŠã€ããã-圌ãã¯èªåèªèº«ãæããŸãã圌ãã®ç掻ã®äžå¯æ¬ ãªéšåãšããŠReduxãåãå ¥ããããšã«åæããŸãããããã¯çšéã®ãããªãã®ã§ããçŽè žæ€æ»ã®ããã«ãæ¯ç§å»ã«è¡ãããã«ã
Reactã§å ±æå€ãåå¿ããã
ç§ã¯é åºãããŠç°¡åã«è«ŠããŸãããReduxãèŠãåŸãç§ã¯ä»ã®è§£æ±ºçãæ¢ãå¿ èŠãããããšã«æ°ã¥ããŸãããç§ãããããšãã§ããŸãReduxã®ã䜿çšããŠããŸãããããŠãç§ã¯ãã®ã©ã€ãã©ãªã䜿çšããããŒã ã§åããŸãããäžè¬çã«ãç§ã¯åœŒå¥³ãäœãããŠããã®ãç解ããŠããŸããããããããã¯ç§ãReduxã奜ãã ãšããæå³ã§ã¯ãããŸããã
ç§ãèšã£ãããã«ãå¥åã®ç¶æ 管çããŒã«ãäžå¯æ¬ ã§ãããMobXã¯ReduxãããçŽ... 100äžååªããŠããŸãïŒããããç§ã¯ãã£ãšæ·±å»ãªè³ªåã«èŠããã§ããŸããããã¯Reactéçºè ã®éåçãªå¿ã«è§Šã
ãŸãïŒãªãç§ãã¡ã¯åžžã«æåã«ç¶æ 管çããŒã«ãã€ããã®ã§ããïŒ
Reactã§æåã«éçºãå§ãããšããç§ã¯ä»£æ¿ãœãªã¥ãŒã·ã§ã³ãæ¢ãããã«å€ãã®å€ãéãããŸããããããŠãç§ã¯å€ãã®Reactéçºè ãç¡èŠããæ¹æ³ãèŠã€ããŸãããã誰ããã®çç±ãç¥ãããšãã§ããŸããã説æããŸãã
äžã§æžããæ¶ç©ºã®ã¢ããªã±ãŒã·ã§ã³ã§ã次ã®ãããªãã¡ã€ã«ãäœæãããšããŸãã
// components.js
let components = {};
export default components;
ãããŠããããã¹ãŠã§ãããã£ã2è¡ã®çãã³ãŒãã空ã®ãªããžã§ã¯ãïŒå€ãè¯ãJSãªããžã§ã¯ãïŒãäœæããŸããããã©ã«ãã§ã¯
export default
ãã䜿çšããŠãšã¯ã¹ããŒãããŸãã
次ã«ãã³ã³ããŒãã³ãå ã®ã³ãŒããã©ã®ããã«èŠããããèŠãŠã¿ãŸããã
<
ContentArea>
ã
// content.area.js
import components from './components';
import MainContentArea from './main.content.area';
import React from 'react';
export default class ContentArea extends React.Component {
constructor(props) {
super(props);
components.ContentArea = this;
}
consoleLog(value) {
console.log(value);
}
render() {
return <MainContentArea/>;
}
}
ã»ãšãã©ã®å Žåãããã¯å®å šã«éåžžã®ã¯ã©ã¹ããŒã¹ã®Reactã³ã³ããŒãã³ãã®ããã«èŠããŸãã
render()
ããªãŒã®æ¬¡ã®ã³ã³ããŒãã³ãã«ã¢ã¯ã»ã¹ããåçŽãªé¢æ°ããããŸããconsole.log()
ã³ãŒãå®è¡ã®çµæãã³ã³ãœãŒã«ã«åºåããå°ããªé¢æ°ãšãã³ã³ã¹ãã©ã¯ã¿ãŒããããŸããããã...ã³ã³ã¹ãã©ã¯ã¿ãŒã«ã¯ããã€ãã®ãã¥ã¢ã³ã¹ããããŸãã
æåã«ãåçŽãªãªããžã§ã¯ããã€ã³ããŒãããŸãã
components
ã次ã«ãã³ã³ã¹ãã©ã¯ã¿ãŒcomponents
ã§ãçŸåšã®Reactã³ã³ããŒãã³ãïŒthis
ïŒã®ååã§ãªããžã§ã¯ãã«æ°ããããããã£ãè¿œå ããŸããããã®ããããã£ã§ã¯ãã³ã³ããŒãã³ããåç
§ããŸãthis
ãããã§ãã³ã³ããŒãã³ããªããžã§ã¯ãã«ã¢ã¯ã»ã¹ãããã³ã«ãã³ã³ããŒãã³ãã«çŽæ¥ã¢ã¯ã»ã¹ã§ããããã«ãªããŸã<
ContentArea>
ã
éå±€ã®æäžéšã§äœãèµ·ãããèŠãŠã¿ãŸããããã³ã³ããŒãã³ã
<
TicketDetail>
ã¯æ¬¡ã®ããã«ãªããŸãã
// ticket.detail.js
import components from './components';
import React from 'react';
export default class TicketDetail extends React.Component {
render() {
components.ContentArea.consoleLog('it works');
return <div>Here are the ticket details.</div>;
}
}
ãããäœãèµ·ãããã§ããã³ã³ããŒãã³ã
TicketDetail
ãã¬ã³ããªã³ã°ããããã³ã«ãã³ã³ããŒãã³ãã«consoleLog()
æ ŒçŽãããŠããé¢æ°ãåŒã³åºããContentArea
ãŸããé¢æ°ã¯ãå°éå
·ãä»ããŠéå±€å
šäœã«æž¡ãããããã§ã¯ãªãããšã«
泚æããŠãã ãã
consoleLog()
ãå®éãé¢æ°ã¯consoleLog()
ã©ãã«ããã©ãã«ããã©ã®ã³ã³ããŒãã³ãã«ãæž¡ãããŸããã
ããã§ãã2ã€ã®ããšãè¡ã£ããããã«æ ŒçŽãããŠ
TicketDetail
ããé¢æ°consoleLog()
ãåŒã³åºãããšãã§ããŸãContentArea
ã
ContentArea
ããŒãããããšãã³ã³ããŒãã³ãã¯ããèªäœãžã®ãªã³ã¯ãã³ã³ããŒãã³ãå ±æãªããžã§ã¯ãã«è¿œå ããŸãããTicketDetail
ããŒãããããšãã³ã³ããŒãã³ãã¯å ±æãªããžã§ã¯ããã€ã³ããŒãããŸããcomponents
ãã€ãŸããããããã£ãå°éå ·ãä»ããŠã³ã³ããŒãã³ãã«æž¡ãããªãã£ãã«ãããããããã³ã³ããŒãã³ãã«çŽæ¥ã¢ã¯ã»ã¹ã§ããŸãããContentArea
ContentArea
TicketDetail
ãã®ã¢ãããŒãã¯ãé¢æ°/ã³ãŒã«ããã¯ã§ã®ã¿æ©èœããããã§ã¯ãããŸãããç¶æ å€æ°ã®å€ãçŽæ¥ç §äŒããããã«äœ¿çšã§ããŸãã
<
ContentArea>
ãã®ããã«èŠãããã®ãæ³åããŠã¿ãŸãããïŒ
// content.area.js
import components from './components';
import MainContentArea from './main.content.area';
import React from 'react';
export default class ContentArea extends React.Component {
constructor(props) {
super(props);
this.state = { reduxSucks:true };
components.ContentArea = this;
}
render() {
return <MainContentArea/>;
}
}
次ã«ã次ã®
<
TicketDetail>
ããã«æžãããšãã§ããŸãã
// ticket.detail.js
import components from './components';
import React from 'react';
export default class TicketDetail extends React.Component {
render() {
if (components.ContentArea.state.reduxSucks === true) {
console.log('Yep, Redux is da sux');
}
return <div>Here are the ticket details.</div>;
}
}
ããŠãã³ã³ããŒãã³ããæç»ããããã³ã«
<
TicketDetail
ãããã¯å€æ°ã®å€ãæ¢ããŸãstate.reduxSucks
ã®äžã§<
ContentArea>
ãå€æ°ãå€ãè¿ãå Žåãtrue
é¢æ°console.log()
ã¯ã³ã³ãœãŒã«ã«ã¡ãã»ãŒãžãåºåããŸããããã¯ãå€æ°ã®å€ãContentArea.state.reduxSucks
å°éå
·ãä»ããŠããªãŒããïŒããããã®ã³ã³ããŒãã³ãã«ïŒæž¡ãããããšããªãå Žåã§ãçºçããŸãããããã£ãŠãæšæºã®Reactã©ã€ããµã€ã¯ã«ã®å€ã«ãã1ã€ã®åçŽãªåºã«ãªãJSãªããžã§ã¯ãã䜿çšããŠãã³ã³ããŒãã³ããªããžã§ã¯ãã«ããŒãããã芪ããåå«ãç¶æ
å€æ°ãçŽæ¥èªã¿åãããšãã§ããããã«ããããšãã§ããŸãã芪ã³ã³ããŒãã³ãã®é¢æ°ããã®åå«ã§åŒã³åºãããšãã§ããŸãã
åã³ã³ããŒãã³ãã§é¢æ°ãçŽæ¥åŒã³åºãããšãã§ãããšããããšã¯ã芪ã³ã³ããŒãã³ãã®ç¶æ ãåããçŽæ¥å€æŽã§ããããšãæå³ããŸããããšãã°ããã®ããã«ã
ãŸããã³ã³ããŒãã³ã
<
ContentArea>
ã§ãå€æ°ã®å€ãå€æŽããåçŽãªé¢æ°ãäœæããŸãreduxSucks
ã
// content.area.js
import components from './components';
import MainContentArea from './main.content.area';
import React from 'react';
export default class ContentArea extends React.Component {
constructor(props) {
super(props);
this.state = { reduxSucks:true };
components.ContentArea = this;
}
toggleReduxSucks() {
this.setState((previousState, props) => {
return { reduxSucks: !previousState.reduxSucks };
});
}
render() {
return <MainContentArea/>;
}
}
次ã«ãã³ã³ããŒãã³ãã§
<
TicketDetail>
ããªããžã§ã¯ããä»ããŠãã®ã¡ââãœãããåŒã³åºããŸãcomponents
ã
// ticket.detail.js
import components from './components';
import React from 'react';
export default class TicketDetail extends React.Component {
render() {
if (components.ContentArea.state.reduxSucks === true) {
console.log('Yep, Redux is da sux');
}
return (
<>
<div>Here are the ticket details.</div>
<button onClick={() => components.ContentArea.toggleReduxSucks()}>Toggle reduxSucks</button>
</>
);
}
}
ããã§ãã³ã³ããŒãã³ããã¬ã³ããªã³ã°ãããã³ã«ã
<
TicketDetail>
ãŠãŒã¶ãŒã¯ãã¿ã³ãæŒãããšãã§ããŸãããã¿ã³ãæŒããšContentArea.state.reduxSucks
ãé¢æ°ContentArea.toggleReduxSucks()
ãå°éå
·ãä»ããŠããªãŒã«æž¡ãããããšããªãå Žåã§ããå€æ°ã®å€ããªã¢ã«ã¿ã€ã ã§å€æŽïŒåãæ¿ãïŒã§ããŸãã
ãã®ã¢ãããŒãã§ã¯ã芪ã³ã³ããŒãã³ãã¯ãã®åããçŽæ¥é¢æ°ãåŒã³åºãããšãã§ããŸããããããã®æ¹æ³ã§ããæŽæ°ãããã³ã³ããŒãã³ã
<
ContentArea>
ã¯æ¬¡ã®ããã«ãªããŸãã
// content.area.js
import components from './components';
import MainContentArea from './main.content.area';
import React from 'react';
export default class ContentArea extends React.Component {
constructor(props) {
super(props);
this.state = { reduxSucks:true };
components.ContentArea = this;
}
toggleReduxSucks() {
this.setState((previousState, props) => {
return { reduxSucks: !previousState.reduxSucks };
});
components.TicketTable.incrementReduxSucksHasBeenToggledXTimes();
}
render() {
return <MainContentArea/>;
}
}
次ã«ãã³ã³ããŒãã³ãã«ããžãã¯ãè¿œå ããŸããã
<
TicketTable>
ããã®ãããªïŒ
// ticket.table.js
import components from './components';
import React from 'react';
import TicketRow from './ticket.row';
export default class TicketTable extends React.Component {
constructor(props) {
super(props);
this.state = { reduxSucksHasBeenToggledXTimes: 0 };
components.TicketTable = this;
}
incrementReduxSucksHasBeenToggledXTimes() {
this.setState((previousState, props) => {
return { reduxSucksHasBeenToggledXTimes: previousState.reduxSucksHasBeenToggledXTimes + 1};
});
}
render() {
const {reduxSucksHasBeenToggledXTimes} = this.state;
return (
<>
<div>The `reduxSucks` value has been toggled {reduxSucksHasBeenToggledXTimes} times</div>
<TicketRow data={dataForTicket1}/>
<TicketRow data={dataForTicket2}/>
<TicketRow data={dataForTicket3}/>
</>
);
}
}
ãã®çµæãã³ã³ããŒãã³ãã¯
<
TicketDetail>
å€æŽãããŠããŸãããããã¯ãŸã ãã®ããã«èŠããŸãïŒ
// ticket.detail.js
import components from './components';
import React from 'react';
export default class TicketDetail extends React.Component {
render() {
if (components.ContentArea.state.reduxSucks === true) {
console.log('Yep, Redux is da sux');
}
return (
<>
<div>Here are the ticket details.</div>
<button onClick={() => components.ContentArea.toggleReduxSucks()}>Toggle reduxSucks</button>
</>
);
}
}
ãããã®3ã€ã®ã¯ã©ã¹ã«é¢é£ããå¥åŠãªããšã«æ°ã¥ããŸãããïŒã¢ããªã±ãŒã·ã§ã³ã®éå±€ã§
ContentArea
ã¯ãããã¯ã®èŠªã³ã³ããŒãã³ãTicketTable
ã§ãããã¯ã®èŠªã³ã³ããŒãã³ãã§ãTicketDetail
ãç§ãã¡ã¯éšåãå®è£
ããå Žåããã®æ段ContentArea
ãããã¯ãŸã ãã®ååšããç¥ããªããTicketTable
ããããŠæ©èœtoggleReduxSucks()
ã§æžãããããContentArea
æé»ã®ãã¡ã«åé¢æ°ãåŒã³åºã:.ããã¯
incrementReduxSucksHasBeenToggledXTimes()
ããšãå€æããã³ãŒãã¯åäœããŸããå³ãïŒ
ããããéããŸãã
èŠãŠãã¢ããªã±ãŒã·ã§ã³ã«ããã€ãã®ã¬ãã«ãäœæããŸããããé¢æ°ãåŒã³åºãæ¹æ³ã¯1ã€ãããããŸãã
toggleReduxSucks()
ããã®ãããªã
- ããŠã³ãããŠã¬ã³ããªã³ã°ããŸã
ContentArea
ã - ãã®ããã»ã¹äžã«ãã³ã³ããŒãã³ããžã®åç
§ãã³ã³ããŒãã³ããªããžã§ã¯ãã«ããŒããããŸã
ContentArea
ã - çµæãããŠã³ããããã¬ã³ããªã³ã°ãããŸã
TicketTable
ã - ãã®ããã»ã¹äžã«ãã³ã³ããŒãã³ããžã®åç
§ãã³ã³ããŒãã³ããªããžã§ã¯ãã«ããŒããããŸã
TicketTable
ã - çµæãããŠã³ããããã¬ã³ããªã³ã°ãããŸã
TicketDetail
ã - « reduxSucks» (Toggle reduxSucks).
- « reduxSucks».
-
toggleReduxSucks()
,ContentArea
. -
incrementReduxSucksHasBeenToggledXTimes()
TicketTable
. - , , « reduxSucks»,
TicketTable
components.toggleReduxSucks()
ContentArea
incrementReduxSucksHasBeenToggledXTimes()
,TicketTable
, components.
ã¢ããªã±ãŒã·ã§ã³ã®éå±€ã«ãããã³ã³ããŒãã³ããããŠã³ãããããšãã«ã³ã³ããŒãã³ãã®ååšãèªèããŠããªãã£ãã«ããããããã
ContentArea
åã³ã³ããŒãã³ãããé¢æ°ãåŒã³åºãã¢ã«ãŽãªãºã ãã³ã³ããŒãã³ãã«è¿œå ã§ããããšãããããŸãããContentArea
TicketTable
ãŠã§ã«ã¹ãããžã¡ã³ãããŒã«-ãã³ã
ç§ã説æããããã«ãç§ã¯ReduxãMobXã«å¹æµããªãããšãæ·±ã確信ããŠããŸãããããŠããããžã§ã¯ãã«æåããåãçµãç¹æš©ãåŸããšãïŒæ®å¿µãªããé »ç¹ã§ã¯ãããŸããïŒãç§ã¯åžžã«MobXã®ãã£ã³ããŒã³ãè¡ããŸããReduxçšã§ã¯ãããŸãããããããç¬èªã®ã¢ããªã±ãŒã·ã§ã³ãéçºãããšãããµãŒãããŒãã£ã®ç¶æ 管çããŒã«ã䜿çšããããšã¯ãã£ãã«ãããŸãããã»ãšãã©äœ¿çšããŸããã代ããã«ãå¯èœãªéããªããžã§ã¯ã/ã³ã³ããŒãã³ãããã£ãã·ã¥ããŸãããããŠããã®ã¢ãããŒããæ©èœããªãå Žåãç§ã¯Reactã®ããã©ã«ãã®ãœãªã¥ãŒã·ã§ã³ã«ãã©ãŒã«ããã¯ããããšããããããŸããã€ãŸããé¢æ°/ç¶æ å€æ°ãå°éå ·ã«æž¡ãã ãã§ãã
ãã®ã¢ãããŒãã®æ¢ç¥ã®ãåé¡ã
åºã«ãªããªããžã§ã¯ãããã£ãã·ã¥ãããšããç§ã®èããã
components
å
±æç¶æ
/æ©èœã®åé¡ã解決ããã®ã«å¿
ãããé©ããŠãããšã¯éããªãããšãç§ã¯ããç¥ã£ãŠããŸããæã
ããã®ã¢ãããŒãã¯...æ®é
·ãªåè«ãèšãããšãã§ããŸãããŸãã¯ããŸã£ããæ©èœããªãå¯èœæ§ããããŸããããã§èŠããŠããã¹ãããšããããŸãã
- ã·ã³ã°ã«ã§æé©ã«åäœããŸãã
ããšãã°ãéå±€ã§ã¯ã<TicketTable>ã³ã³ããŒãã³ãã«0察å€ã®é¢ä¿ãæã€<TicketRow>ã³ã³ããŒãã³ããå«ãŸããŠããŸãã<TicketRow>ã³ã³ããŒãã³ãïŒããã³ãã®å<TicketDetail>ã³ã³ããŒãã³ãïŒå ã®åæœåšçãªã³ã³ããŒãã³ããžã®åç §ãã³ã³ããŒãã³ããã£ãã·ã¥ã«ãã£ãã·ã¥ããå Žåã¯ãããããé åã«æ ŒçŽããå¿ èŠããããããã¯æ³šæãå¿ èŠã§ããç§ã¯ãã€ããããé¿ããŠããŸããã - components , / , components. .
, . , , . / , , components. - ,
components
, (setState()
),setState()
, .
ç§ã®ã¢ãããŒããšãã®å¶éã®ããã€ãã説æããã®ã§ãèŠåããªããã°ãªããŸããããã®ã¢ãããŒããçºèŠããŠä»¥æ¥ãç§ã¯èªåãã¡ãããã®Reactéçºè ãšèŠãªããŠãã人ã ãšå ±æããŠããŸããã圌ããåãããšãçãããã³ã«ïŒ
ããŒã...ããããªãã§ãã ããã圌ãã¯çãã²ãããç§ããã 空æ°ãå°ç¡ãã«ããããã«æ¯ãèããŸããç§ã®ã¢ãããŒãã®äœãã圌ãã«æããŸã...ééã£ãŠããŸããåæã«ã圌ãã®è±å¯ãªå®åçµéšã«åºã¥ããŠãæ£ç¢ºã«äœãééã£ãŠããã®ãããŸã 誰ãç§ã«èª¬æããŠããŸããã誰ããç§ã®ã¢ãããŒããæ€èšããŠããã ãã§ã...åæ¶ã
ãããã£ãŠããã®ã¢ãããŒããæ°ã«å ¥ã£ãå Žåããç¶æ³ã«ãã£ãŠã¯äŸ¿å©ã ãšæã£ãå Žåã§ãããå§ãããŸãããReactéçºè ãšããŠã®ä»äºãåŸããå Žåã¯ãã€ã³ã¿ãã¥ãŒã§ããã«ã€ããŠè©±ããŠãã ãããä»ã®Reactéçºè ãšè©±ãããã ãã§ãããã®æ¹æ³ã«ã€ããŠè©±ãåã«äœçŸäžåãèããå¿ èŠããããšæããŸãããããã¯ãäœãèšããªãã»ãããããããããŸããã
JSéçºè ïŒç¹ã«Reactéçºè ïŒã¯é床ã«åé¡çã§ããå¯èœæ§ãããããšãããããŸãããã¢ãããŒãAããééã£ãŠãããçç±ãšã¢ãããŒãBããæ£ãããçç±ã説æããããšããããŸããããããã»ãšãã©ã®å Žåã圌ãèªèº«ãçç±ã説æã§ããªãå Žåã§ããã³ãŒãã®äžéšãèŠãŠãæªãããšå®£èšããã ãã§ãã
ã§ã¯ããªããã®ã¢ãããŒããReactéçºè ã«ãšã£ãŠããã»ã©ç ©ãããã®ã§ããããã
ç§ãèšã£ãããã«ãç§ã®ååã®èª°ãç§ã®æ¹æ³ãæªãçç±ã«åççã«çããããšãã§ããŸããã§ããããããŠã誰ããçãã§ç§ã称ããããšãããšããªããªããããã¯éåžžã次ã®èšãèš³ã®1ã€ã§ãïŒãããã®ããã€ãã¯ãããŸããïŒã
- , .
.... , , Redux ( MobX, ) / React-. , . â . , /, . : ,components
. , /components
, / , components. /,components
, components . , , . , , Redux, MobX, - . - React « ». ⊠.
⊠. ? , . â - « » « », , , . React, . , . . « », . , React 100 %, ( ) , .
, ?
ç§ã¯ãã®ã¢ãããŒããäœå¹ŽãïŒå人çãªãããžã§ã¯ãã§ïŒäœ¿çšããŠããã®ã§ããã®æçš¿ãæžããŸããããããŠããã¯çŽ æŽãããåããããŸããããããç§ãå人çãªããã«ããæãåºããä»ã®ãµãŒãããŒãã£ã®Reactéçºè ãšãã®ã¢ãããŒãã«ã€ããŠã€ã³ããªãžã§ã³ããªäŒè©±ãããããšãããã³ã«ããæ¥çæšæºãã«ã€ããŠã®æ確ãªå£°æãšæããªå€æã«åºãããã ãã§ãã
ãã®ã¢ãããŒãã¯æ¬åœã«æªãã§ããïŒãŸããæ¬åœã«ãç§ã¯ç¥ãããã§ããããã確ãã«ãåãã¿ãŒã³ãã§ãããªãã°ãç§ã¯ãã®èª€ããæ£åœåãã人ã ã«éåžžã«æè¬ããŸãã ãç§ã¯ããã«æ £ããŠããªãããšããçãã¯ç§ã«ã¯åããŸãããããããç§ã¯ãã®æ¹æ³ã«åºå·ããŠããŸããããããReactéçºè ã«ãšã£ãŠäžèœè¬ã§ããããšã瀺åããŠããããã§ã¯ãããŸããããããŠãç§ã¯ããããã¹ãŠã®ç¶æ³ã§æ©èœãããšã¯éããªãããšãèªããŸããã ãã©ããã¶ã誰ããç§ã«ããã®äœãåé¡ãªã®ã説æã§ããŸããïŒ
ç§ã¯æ¬åœã«ãã®åé¡ã«ã€ããŠã®ããªãã®æèŠãç¥ãããã§ã-ããšãããªããç§ãéå¶å±ã«å¹ãé£ã°ãããšããŠãã