componentDidReceivePropsããã¯ãè¬èã«ãªã¯ãšã¹ããããã®ã§ãããcomponentWillMountãšcomponentWillReceivePropsã®äž¡æ¹ã§äœãããããããšããããããŸããã this.props
ããŸã èšå®ãããŠããªããããçŽæ¥èªã¿åãã®ã§ã¯ãªããå°éå
·ãæž¡ãå¿
èŠããããŸãã this.props
ã
componentWillMount() {
this.setup(this.props.id);
}
componentWillReceiveProps(next) {
this.setup(next.id);
}
setup(id) {
UserActions.load(id);
}
componentWillMount() {
this.setup();
}
componentDidReceiveProps() {
this.setup();
}
setup() {
UserActions.load(this.props.id);
}
ãã®åçŽãªäŸã§ã¯ãããã¯å°ããªããšã®ããã«èŠãããããããŸããããå€ãã®å Žåãå°éå ·ã®ééã¯æ·±ãå®è¡ãããthis.propsã䟿å©ã«åç §ãã代ããã«ãã³ã³ããŒãã³ãå šäœã§å°éå ·ãé 管ããå¿ èŠããããŸãã
ã³ã³ããŒãã³ãå
šäœã§äž¡æ¹ã«å°éå
·ã匷å¶ããããšãªããcomponentWillMountã§å©çšãããã®ãšåãã³ãŒãã掻çšããããã®ããã¯ãšããŠã componentDidReceiveProps
ãè¿œå ããããšãæ€èšããŠãã ããã
ãªãsetup(props)
ãªãã®ã§ããïŒ
ç§èªèº«ã®ãããžã§ã¯ããèŠããšãç§ãåæ§ã®ããŒãºãæã£ãŠããå Žæã§ãããè¡ã£ãããšãããããŸãïŒå¥ã®ãããžã§ã¯ãã¯å°éå ·ã«åºã¥ããŠç¶æ ã®ãã£ã³ã¯ãå°åºããŠããŸãïŒãå¿ èŠã«å¿ããŠå¥ã®å°éå ·ã®ã»ãããæž¡ãã ããªã®ã§ãäœåãªãã®ãæž¡ãã ãã§æžã¿ãŸãåå©çšããå Žåãã©ã®å°éå ·ãå¿ èŠãã«ã€ããŠã®ç¥èãè€è£œããããšãªãïŒ
setup(props) {
props = props || this.props
UserActions.load(props.id)
}
@syranideåé¡ã¯ãã»ããã¢ãããå°éå ·ãå¿ èŠãšããã¡ãœãããåŒã³åºãå¿ èŠãããå Žåã§ããããã¯ãå°éå ·ãå¿ èŠãšããã¡ãœãããåŒã³åºãå¿ èŠããããŸã...æçµçã«ãã³ã³ããŒãã³ãå šäœãå°éå ·ã®åšãã«é 管ãããŸãã
+1ã¯ãçŸåšã®ãã¿ãŒã³ã§ã¢ããªå ã«äžèŠãªé ç·ãããããããããã«èŠããŸãã åé¡ã解決ããããã®ç°¡æœã§æšæºåãããæ¹æ³ã§ããå¯èœæ§ããããŸãã ComponentWillReceivePropså ã®this.propsã§å€ãã®äººãããã©ãè² ã£ãŠããã®ãèŠãŠãçŽæçã§ã¯ãªãããšãæ確ã«ç€ºããŠããŸãã
+1ããããã€ã©ã€ã©ããŸãã
ãããåé¡ã«ãªãããšã¯ãããããŸããã
+1ãç§ãå°éå ·ãããããåããŠããããšã«æ°ã¥ããŠããŸãã äžèšã®@insinãšåæ§ã«ãç§ã¯ãã°ããã®éããã©ã«ãã®
setup(props = this.props) {
doSomething(props);
}
ããããnewPropsãæž¡ãã®ãå¿ããå Žåã«çºçããå¯èœæ§ã®ãã埮åŠãªãã°ã®ãããã¢ã³ããã¿ãŒã³ã§ãããšå€æããŸããã
+1
å©çšã§ããªãçç±ã¯ã this.props
ãšthis.state
åžžã«ã¬ã³ããªã³ã°ãããå€ã«å¯Ÿå¿ããŠããããã ãšæããŸãã ãã®å¶çŽãç Žããã«å¥ã®ã¬ã³ããªã³ã°ãããªã¬ãŒããªãcomponentDidReceiveProps
ãå®è£
ããæ¹æ³ã¯ãããŸããã
ã»ãšãã©ã®å Žåã componentWillReceiveProps
ã䜿çšããŠããå Žåãå®éã«ã¯ãªã¬ãŒã®ãããªé«æ¬¡ã®ã³ã³ããŒãã³ããã React 0.14çšã«ææ¡ãããobserve
ããã¯ã®ãããªãã®ãå¿
èŠã§ãã
+1
ãŸãã this.props
ãŸãã¯this.state
ãå€æŽããã«componentDidReceiveProps
ãå®è£
ã§ããŸãã ãããããèªã¿åãã ãã®å Žåã¯ãå¥ã®ã¬ã³ããªã³ã°ãããªã¬ãŒããŸããã ãã®ææ¡ãããé¢æ°åŒã³åºãå
ã§å°éå
·ãç¶æ
ã«æžã蟌ãã§ããå Žåã¯ãèªåã®è¶³ãæã£ãŠããŸãããã©ã€ããµã€ã¯ã«ã®ä»ã®ãã¹ãŠã®ã¡ãœããã«ã€ããŠãåãã§ãã
+1
shouldComponentUpdate
ãfalse
è¿ãããšãã«ãæ°ããå°éå
·ã€ãã³ãã«å¿çã§ããããã«ãããã®ã§ãç§ã®å Žåã¯componentDidUpdate
䜿çšã§ããŸããã
+1
+1
componentWillMount
ãšcomponentWillUpdate
@ iammerrickã¯ã©ãã§ãã
shouldComponentUpdateãfalseãè¿ãããšãã«ãæ°ããpropsã€ãã³ãã«å¿çã§ããããã«ãããã®ã§ãç§ã®å ŽåãcomponentDidUpdateã䜿çšã§ããŸããã
componentWillReceiveProps
ãŸããïŒ
+1
+1ããã¯ãDRYã³ãŒããšããžãã¯ã®ç°¡çŽ åã«åœ¹ç«ã¡ãŸãã
ãã®ã¹ã¬ãããéå§ããäŸãåäžã®é¢æ°ã«ããããã«ãåæèšå®ã§componentDidReceivePropsãåŒã³åºãããšãã§ããŸãã
componentDidReceiveProps() {
UserActions.load(this.props.id);
}
èãïŒ
componentWillReceiveProps() {
setTimeout(()=> {
if(this.isMounted()) {
this.componentDidReceiveProps();
}
});
}
componentDidReceiveProps() {
UserActions.load(this.props.id);
}
ã©ãæããŸããïŒ
@YourDeveloperFriendããã¯ãä»ã®ã©ã€ããµã€ã¯ã«ããã¯ãšæ¯èŒããŠã©ã®ããã«æ©èœããããããã³ãã¹ããããã³ã³ããŒãã³ãã®ã«ã¹ã±ãŒãã¿ã€ã ã¢ãŠãã«ããã¬ã³ããªã³ã°ã®é 延ã«äŸåãããšæããŸãã
ãããã®çš®é¡ã®ã©ã€ããµã€ã¯ã«ããã¯ã¯ãã¬ã³ããªã³ã°åã«åŒã³åºãããããšãä¿èšŒãããŠãããã¹ã§åæçã«åŒã³åºãããå¿ èŠããããŸãã Reactã®ã³ãŒãããŒã¹ã«ã€ããŠã¯èª¿ã¹ãŠããŸããããã¿ã€ã ã¢ãŠãæã«ã¬ã³ããªã³ã°ãåŒã³åºãããªããšæ³å®ããŠããŸãã
ã»ãšãã©ã®å Žåãæè¯ã®è§£æ±ºçã¯ãäºåã¬ã³ããªã³ã°ããã¯ã®ç»é²ã«æ²¿ã£ããã®ããã¬ã³ããªã³ã°ããžãã¯ãrenderãåŒã³åºãåã«componentDidReceivePropsãåŒã³åºãããã«å°éå ·ãå€æŽãããã³ã³ããŒãã³ããããŒã¯ããããšã§ãã
+1ããŠãã ããã ãšãŠãéãã
ãããå æ°ã§ãã ããè¯ã解決çããããŸãã
+1
componentDidReceiveProps()
ãã§ã«ååšããŸãïŒ render()
ãšåŒã°ããŸãã ãã ããã¬ã³ããªã³ã°ãå®è¡ããåã«ãäœããããŒã/ããªã¬ãŒãªã©ããå¿
èŠãããå ŽåããããŸãïŒ @iammerrickã®äŸã®ããã«ïŒã ããã¯å¯äžã®ããšãæå³ããŸãïŒããªãã¯äœãééã£ãããšãããŸãã
ããªãã次ã®ãããªããšããããšã
setup(id) {
UserActions.load(id);
}
ã³ã³ããŒãã³ãå
ãŸãã¯ïŒããã«æªãããšã«ïŒå€éšã®ããããã«ã¹ããŒããã«ãã¹ãå°å
¥ããŸãã ã³ã³ããŒãã³ããå°éå
·ãåãåããã³ã«load()
ããŒã¿ãå¿
èŠã«ãªãã®ã¯ãªãã§ããïŒæ°ããããšãä¿èšŒãããŠããããã§ã¯ãããŸããïŒã é
延èªã¿èŸŒã¿ãè¡ãå Žåãé©åãªæ¹æ³ã¯render()
ã¡ãœããã§ããŒã¿ãèŠæ±ããããšã§ãã
render() {
var actions = UserActions.load(id);
if (actions) // render
else // show spinner or return null, etc.
}
UserActions.load = function(id) {
if (data) return data;
else // request the data, emit change on success
}
@robyoder ãé¢æ°ã«åŒæ°ãæž¡ãã®ã¯éãããšã§ã¯ãããŸããã åé·ãããããã«èŠãããããããŸããããéžæããããã°ã©ãã³ã°èšèªã§ã¯åœç¶ã§ãã åé·æ§ãæžããããã ãã«äºåã®ã©ã€ããµã€ã¯ã«ã¡ãœãããè¿œå ããŠAPIãç Žæ£ããããšã¯ã確ãã«éãããšã§ãã
@ me-andreããªãcomponentWillUpdate
ãšcomponentWillReceiveProps
äž¡æ¹ãããã®ã§ããïŒ
ç§ã®æèŠã§ã¯ãããã¯ããããç°ãªãç®çãæãããäž¡æ¹ã圹ç«ã€ããã§ãã ããã2ã€ãåãã§ã¯ãªãã®ãšåãããã«ã render
ã¯ãæ°ããå°éå
·ä»¥å€ã®çç±ã§åŒã³åºããããããæ¶ç©ºã®componentDidReceiveProps
ãšåãã§ã¯ãããŸããã ããã«ã以åã®å°éå
·ãžã®ã¢ã¯ã»ã¹ã¯èš±å¯ãããŠããŸããã
以åã®å°éå ·ã®å©ç¹ã¯ãæ¯åããŒã¿ãããŒãããå¿ èŠããªãããšã§ãã å°éå ·ãšããããå€æŽããããã©ããã«åºã¥ããŠæ¡ä»¶ä»ãã«ããããšãã§ããŸãã
æããã«ãã[éã]ã¯èŠã人ã®ç®ã«ãããŸãããé©åãªã©ã€ããµã€ã¯ã«æ¹æ³ãè¿œå ããããšã¯ãç§ã«ãšã£ãŠã¯ããã«ã¯ãªãŒã³ãªè§£æ±ºçã®ããã«æããããã§ãã
å€åãããèŠãå¥ã®æ¹æ³ããããŸã...
ããã§ã®äž»ãªç®æšã¯æ¬¡ã®ãšããã§ãã
ïŒ1ïŒäººçºçãšã©ãŒãæžãã-ãã©ã¡ãŒã¿ãæž¡ãã®ãå¿ãããã props = props || this.props
ããäžåºŠäœ¿çšãã
ïŒ2ïŒä»å 䟡å€ã®ãªããã€ã©ãŒãã¬ãŒãã³ãŒããæžããããã«-ãªãäžå¿
èŠã«äœããæžãã®ã
ïŒ3ïŒäœ¿çšããã©ã€ããµã€ã¯ã«æ¹æ³ã決å®ããããšããèªç¥çè² æ
ã軜æžããããã«-ãªããã®ãããªããšãèããå¿
èŠãããã®ãââããªããã®æ¥ã®æ°åã«å¿ããŠãããã«ç°ãªãã¢ãããŒãã䜿çšãç¶ããã®ããªã©
ãããã£ãŠããããããœãªã¥ãŒã·ã§ã³ã¹ããŒã¹ã¯ããããã®ç®æšãéæããããã«ReactãšReactAPIèªäœã®äž¡æ¹ã®äœ¿çšãç°¡çŽ åããããšã§ãã
ãããã®ç®æšã念é ã«çœ®ããŠåé¡ãèããå Žåãããã€ãã®ã©ã€ããµã€ã¯ã«ã¡ãœãããããŒãžãããå¯èœæ§ããããŸããåæåãšæŽæ°ã®ã©ã¡ãã§ããããç¥ãããå Žåã¯ã眲å/åŒæ°ãåŒã³åºãããšã§ããããŸãã äŸïŒ beforeRender(prevProps, prevState)
ãŸãã¯update(prevProps, prevState)
ã
å人çã«ã¯ãã©ã€ããµã€ã¯ã«ã¡ãœãããå€ãããããã«æããŸããããããããäžè²«ããŠåŒã³åºãããå ŽåïŒæåã®ãã¹ãšæŽæ°ã§prevProps / prevStateã®æç¡ã«ãããããïŒãã³ãŒããç°¡çŽ åãããçç£æ§ãåäžããå¯èœæ§ããããŸãã ããã«ãã©ã€ããµã€ã¯ã«ã¡ãœããåã¯ããªãé·ãïŒå ¥åããã®ã§ã¯ãªãã³ããŒ/貌ãä»ãããåŸåããããŸãïŒãã©ã¡ããååšããã/ååšããããæãåºãã®ãé£ãããããåçŽåã§ãã/ãã¹ãã ãšæããŸãã
@robyoder ã componentWillUpdate
ãšcomponentDidReceiveProps
äž¡æ¹ãããçç±ã®ç°¡åãªçãã¯ããããã®éã«å€§ããªéãããããšããããšã§ãã ãã¡ãã䌌ãŠããŸãããäž»ã«componentWill
ãšãããã¬ãã£ãã¯ã¹ãä»ããŠããŸãã
| | ç¶æ
ãå€åããŸãã| ã³ã³ããŒãã³ããæŽæ°ãããŸããã§ãã|
| --- | --- | --- |
| componentWillUpdateïŒïŒ| ã¯ã| ããã|
| componentWillReceivePropsïŒïŒ| ããã| ã¯ã|
ãæ°ã¥ããããããŸããããäžæ¹ã®ã¡ãœãããåŒã³åºãããããäžæ¹ã®ã¡ãœãããåŒã³åºãããªãã©ã€ããµã€ã¯ã«ãã€ã³ã/æ¡ä»¶ããããŸãã ãã®ããã2ã€ã®ç°ãªãã©ã€ããµã€ã¯ã«ã¡ãœããããããŸãã
ãã ãããã®ãããã¯ã§èª¬æãããŠããcomponentDidReceiveProps()
ã¯ãã³ã³ããŒãã³ãã®ç¶æ
ãç¶æ
ãè¡šããã®ã§ã¯ãªãã componentWillReceiveProps()
ãã¢ã¯ã»ã¹ã§ããªããã®ãžã®ã¢ã¯ã»ã¹ãæäŸããŸããã ããããªæ§æç³è¡£ãè¿œå ããã ãã§ã䟿å©ãŸãã¯ç°¡åã«èŠããå Žåãšããã§ãªãå ŽåããããŸããããã¯
@ me-andreããªãã¯ç§ïŒ@kmalakoffïŒãš@robyoderã«åæã«å¿çããŠãããããããŸããã ãããã¯ããã§ã¯ãªããããããŸããããç§ã¯ãã®æ©äŒã«è°è«ãåé²ãããŸã...
ç§ãæèµ·ããã®ã¯ããããããäžèšã®3ã€ã®ç®æšã䜿çšããŠçŸåšã®APIãè¶ ããŠèããããšã§ãAPIãåçŽåããŠããããå®çŸããæ¹æ³ã«ã€ããŠæ°ããæŽå¯ãèŠç¹ãåŸãããšãã§ãããšããããšã§ããã ãã¡ãããæŒç¿ãçµããåŸãåãå Žæã«ãã©ãçããããããŸããã
æŒç¿ãè¡ããŸãããã
ãã®ãããã¯ã«ã¯éèŠãªããšãããããããã®ãããã¯ããã©ããŒãããŠ+1ãããŠãããšä»®å®ããŸããããšãã°ã componentDidReceiveProps
è¿œå ãããšãAPIã®è¡šé¢ç©ãå¢ããããããå§ãã§ããŸããã
è¡šãšç§ãææ¡ãã3ã€ã®ç®æšã念é ã«çœ®ããŠãAPIãåçŽåããããã®ã¢ã€ãã¢ãããã®ã¹ã¬ããã®äººã ã«APIãæ¡åŒµããªãããã«ããããã®å¥ã®æ¹æ³ïŒãããããããåæž/åçŽåããããã®æ¹æ³ïŒã¯ãããŸããïŒ ïŒïŒ
@kmalakoff ãããªãã話ããŠãã3ã€ã®ãã€ã³ãã¯ããããã«ééãããšãã«APIã䜿çšãããšããç¹ã§ã®ã¿APIã«é¢é£ããŠããŸãã ãããã¯æªããã¶ã€ã³ãåå ã§ã¯ãããŸããã
ããªãã話ãæåã®åé¡ã¯ãã©ã€ããµã€ã¯ã«ã¡ãœãããç°ãªãè°è«ããããšããããšã§ãã ãŸããããã¯å®å
šã«èªç¶ãªããšã§ã-圌ãã¯ç°ãªãç®çãæãããŸãã componentWillReceiveProps
ã¯ããã®ã¡ãœãããè¿œå ããããšãã«æããã£ã±ãã ã£ãããã§ã¯ãªããã³ã³ããŒãã³ãã«ãŸã å²ãåœãŠãããŠããªãå°éå
·ãåãåãããã«å°éå
·ãåãåããŸãã props
ã¯ã this.props
ãšã¯ç°ãªãïŒå¯èœæ§ãããïŒã¡ãœããã§ã®ã¿æž¡ãããŸãã ããã¯å®éã«ã¯ãã³ãã§ãããåââé¡ã§ã¯ãããŸããã
åé¡ïŒ3ã¯ã䜿çšããã³ãŒã«ããã¯/ã¢ãããŒãã決å®ããã®ãé£ããããšã§ãã ããŠãç§ãäžã§è©±ããã¡ãœãããåã眲åãæã€ãŸã§ãstate
ãšthis.state
ã props
ãšthis.props
äž¡æ¹ãã»ãšãã©ã®ã¡ãœããã§çããïŒæå³ããªãïŒãšãäºåã®ãªãã·ã§ã³ã«å·»ã蟌ãŸãã代æ¿æ¡ã
åé¡ïŒ2ã¯ããã€ã©ãŒãã¬ãŒãã³ãŒãã«é¢ãããã®ã§ã...ãŸããReactã¯èãã©ã€ãã©ãªã§ã-ãã®ãããçŸãããç°¡åã§ãå³å¯ã§ãã ç§ãã¡ã®ç掻ãç°¡çŽ åããæ¯æ¥æžãã³ãŒãã®éãæžããã©ãããŒãäœãããã®ãªããããããã£ãŠã¿ãŸãããïŒ react
äŸåããç¬èªã®npm
ãšããŠå
¬éããã°ãå®äºã§ãã
ãã©ã€ããµã€ã¯ã«ã¡ãœãããå€ããããã«é¢ããŠã¯ãæè¡çãªå¿ èŠããªãæ°ããã³ãŒã«ããã¯ã®èŠæ±ãåæ¢ããå ŽåããŸã ããããŠããããããããªãããšã¯ãããŸããã æè¡çãªå¿ èŠæ§ã¯ãè€éãªã³ã³ããŒãã³ããå®è£ ãããšãã«ãäœæ¥ã®éäžã§ãéãããã¯ãªãã«ãããå®è¡ããããšã§ãã ããã¯ããããªãããŒãªDOMã¡ãœãããããªã¬ãŒããã«ã¯ãã³ã³ããŒãã³ããXãå®è¡ãããšãã«åŒã³åºããããã®ãå¿ èŠã§ããããã®ãããªã¡ãœããããªããè¿œå ã§ããªããããsetTimeoutã䜿çšããå¿ èŠä»¥äžã«æ©ãçéžããªãããšãé¡ã£ãŠããŸãããšããããšã§ãã ããããç§ã¯å°éå ·= this.propsãæžãã®ã«é£œããããšèšããšãã§ã¯ãããŸããã
åŸããäžã€...
é©åã«èšèšãããReactã¢ããªã±ãŒã·ã§ã³ã§ã¯ãããã§èª¬æããã»ãšãã©ã®ã¡ãœããã¯å¿
èŠãªãããã»ãšãã©äœ¿çšããŸããã getInitialState
ã componentWillMount
ã componentWillUnmount
99ïŒ
ã®ç¢ºçã§ååã§ãã æ¯èŒç倧èŠæš¡ãªåçšã¢ããªã§ããç§ã®çŸåšã®ãããžã§ã¯ãã§ã¯ã componentWillReceiveProps
ããã¹ãŠã®ã¢ããªã§2å䜿çšãããŠããŸãã ç§ã¯ããããŸã£ãã䜿çšããŸããããç°å¢ïŒãã©ãŠã¶ã®èªã¿åãïŒã¯äžå®å
šã§ã- scrollTop
ãªã©ã®ç¹å®ã®ãã¹ããŒããã«ã»ã€ã³ã»ã»ã«ããã®ãã®ãæäœããããå°æ¥ã®render
ã®ã¬ã€ã¢ãŠãèšç®ã«äŸåãããããŸãprops
é·ç§»ãšDOMå€æŽã®éã§æåã§åæããå¿
èŠããããŸãã ãã ããã»ãšãã©ã®ãéåžžã®ãã±ãŒã¹ã§ã¯ã props
é·ç§»ããã€çºçããããç¥ãå¿
èŠã¯ãããŸããã
@ me-andre Reactã§ã®ç§ã®çµéšã«åºã¥ããŠãAPIãæ¹å/ç°¡çŽ åããäœå°ããããšæããŸãã ç§ã ãã§ã¯ãªãã®ã§ããã®åé¡ã¯ããããæèµ·ããã+ 1ãããŠããŸãã
ç§ãããªãã®åæã«ã€ããŠãã£ãŒãããã¯ãæäŸããããšã«ãã£ãŠçãããªãã°ãããã¯çŸç¶ã«å°ãåã£ãŠãããçŸåšã®APIãæ£åœåããã®ã§ããããå®éã«åé²ãããšã¯æããªãïŒãããç§ããããŸã§ãããé¿ããçç±ã§ããïŒããèãããã解決çã«ã€ããŠãã£ãŒãããã¯ãæäŸãããŠããã ããŸãã ãã®åé¡ã«æºãã£ãŠãã人ã ã¯ãReactã®äœ¿çšçµéšãéããŠæèµ·ãããåé¡ã«å¯ŸåŠããããã®æ¹åã®ã¢ã€ãã¢ãšæœåšçãªAPIã®å€æŽã暡玢ããŠããŸãïŒäžèšã§æŠèª¬ããããã«ïŒã
ã³ãã¥ããã£ãAPIãåé²ãããããã«ã€ãããŒã·ã§ã³ãè¡ãããããã³ã¢ã«ããŒã«ããã¯ããããçŸåšã®APIããã®ãŸãŸå®ç§ã§ãããããããªããšããã®ã¯æ£ãããããããŸããããããã¯å€æŽãã©ã®ããã«èŠããããæ€èšãã絶奜ã®æ©äŒã ãšæããŸãReactããŒã ã
ãããããããªãããã®ãŸãŸè°è«ãããŠããçç±ã¯ãç§ãã¡ãã©ã€ãã©ãªã®ãŠãŒã¶ãŒã§ãããçŸåšã®APIãšããã«è¡ããã決å®ã«ã€ããŠã®ç解ãæµ ãããã§ãã ãããããèªåãšåãããã«çµéšãšç¥èãæã£ãŠããä»ã®ReactããŒã ã®ã¡ã³ããŒãåŒã蟌ãã§ãç§ãã¡ãå¥ã®èŠç¹ãåŸããã©ããã確èªããåªãã解決çãèãåºããããããæé«ã§ãããšããã³ã³ã»ã³ãµã¹ãåŸãããšãã§ããŸããïŒ
@ kmalakoff ãReactããšã³ãžã³ãš4ã€ã®è»èŒªã§ãããšæ³åããŠãã ããã ä»ãããªããã©ããã«è¡ããããšæããã³ã«ãããªãã¯è»ã®æ®ããäœããŸãããããŠããã¯çµå±è¿·æã«ãªãå§ããŸãã ããã§ãªããã°ãããªãã¯äœã¬ãã«ã®ãšã³ãžã³ã®è©³çŽ°ãèŠããŠããå¿
èŠããããšäžå¹³ãèšããæã§å茪ãåãã®ã¯æ£ããæ¹æ³ãæããŸããã
ç§ããå§ãããã®ã¯ãå®å
šãªè»äž¡ïŒæ¬æ Œçãªãã¬ãŒã ã¯ãŒã¯ïŒãå
¥æããããå¿
èŠãªã³ã³ããŒãã³ããé·æã«ããã£ãŠåå©çšã§ããããã«æ§ç¯ããããšã§ãã
ãã®ã¹ã¬ããã§ç§ãèŠãŠããã®ã¯ããšã³ãžã³ã«æ²¹å§ã·ã¹ãã ãšå®€å
ç¯ããªãããšã蚎ãããšã³ãžã³ãŠãŒã¶ãŒã§ãã ç§ãæããŠããã®ã¯ããããã®æ©èœãããããå±ããŠããªãå Žæã«è¿œå ãããšãå®å
šã«ããããã«ãªããšããããšã§ãã
Reactã¯ãã¬ãŒã ã¯ãŒã¯ã§ã¯ãããŸãããããã¯ã匷åãªã³ã³ããŒãã³ãã·ã¹ãã ãå
¬éããdiffãå©çšããã¬ã³ããªã³ã°ãšã³ãžã³ã§ãã äœã¬ãã«ã§ãããã«ãªAPIãåããŠããŸããããã®äžã«æåéãäœã§ãæ§ç¯ã§ããã»ã©åŒ·åã§ãã
äœããæ確ã«ããå¿
èŠããããšæãããå Žåã¯ãé æ
®ãªãã¡ãŒã«ã§ç§ã«é£çµ¡ããŠãã ããããã®ã¹ã¬ããããã¥ãŒããªã¢ã«ã«ããããããŸããã
@ me-andreç§ãã¡ã¯ããªãã®ç«å Žãšããªãã®è°è«ã®ç·ãä»ããç解ããŠãããšä¿¡ããŠããŸãã ããããšãããããŸããïŒ APIããã§ã«ååã«åªããŠããããšã¯æ£ãããããããŸããããæ¹åã§ããå¯èœæ§ããããŸãã
誰ããAPIãå€æŽããããšã䞻匵ã§ããŸããïŒ äŸãã°ã ããŸããŸãªãªãã·ã§ã³ã®æ¯èŒåæãæäŸããŸãïŒcomponentDidReceivePropsã®è¿œå ãšAPIã®ããŒãž/ç°¡çŽ åãšå€æŽãªãïŒ
ReactããŒã ã¯ãã®åé¡ãç£èŠããŠããã瀟å
ã§è©±ãåã£ãŠããŸãã ååãšããŠãç§ã¯åžžã«APIã®è¡šé¢ç©ãæé€ããããšã«åŸåããŠããã®ã§ã@ me-andreã®è°è«ã«åŸåããŠããŸãã ããããç§ãã¡ã®ããŒã ã¯æã
ææ
ã蟌ããŠcomponentDidReceiveProps
ããããã·ã³ã°ã©ã€ããµã€ã¯ã«ã¡ãœããããšåŒãã§ããããããè¿œå ããå¯èœæ§ã«ã€ããŠçå£ãªè°è«ããããŸãã éèŠãªããšã¯ãæªãæ
£è¡ã觊åªããããšãªãããã¹ããã©ã¯ãã£ã¹ãå¯èœã«ããããšã§ãã
ç§ãã¡ïŒãŸãã¯å°ãªããšãç§ïŒã«ãšã£ãŠæã圹ç«ã€ã®ã¯ããªã人ã
ããã®ã©ã€ããµã€ã¯ã«æ¹åŒãæãã§ããã®ãããã£ãããšç解ããããšã§ãã ä»ã®ã©ã€ããµã€ã¯ã«æ¹æ³ã§ã¯ååã«ã«ããŒãããŠããªããã®ã©ã€ããµã€ã¯ã«ã§äœãããããšããŠããŸããïŒ https://github.com/facebook/react/issues/3279#issuecomment -163875454ã§ææ¡ãããŠããããã«ãã¬ã³ããªã³ã°å
ã§componentDidReceiveProps
ãªãUserActions.load(id);
ãå®è¡ãããã®ã¯ãªãã§ããïŒç§ã¯èããããšãã§ããŸãïŒçç±ããããŸãããç§ã¯ããªãã®çç±ãäœã§ãããèå³ããããŸãïŒïŒ å°éå
·ã«åºã¥ããŠããŒã¿ããŒããéå§ãã以å€ã®ãŠãŒã¹ã±ãŒã¹ã¯ãããŸããïŒ
@jimfb componentDidReceiveProps
ã¯ãŸãã«ç§ãå¿
èŠãšããŠãããã®ã§ãããä»ã®æ¹æ³ã¯äžé©åã§ãããšç§ã¯ä¿¡ããŠããŸãããç§ã¯ééã£ãŠããå¯èœæ§ããããŸãã ç§ã®ãŠãŒã¹ã±ãŒã¹ãåãã§èª¬æããŸãã
react-router
ã«æ¬¡ã®ãããªã«ãŒãããããŸãã
<Route path="/profile/:username" component={ProfilePage} />
ãããã¡ã€ã«ã®ããŒã¿ãå€éšãœãŒã¹ãããã§ããããå¿
èŠããããŸãããããé©åã«è¡ãã«ã¯ã componentDidMount
ã¡ãœããã§HTTPãªã¯ãšã¹ããè¡ãå¿
èŠããããŸãã
æ®å¿µãªããããããããã¡ã€ã«ããå¥ã®ãããã¡ã€ã«ã«ç§»åãããšããReact Routerã¯ã³ã³ã¹ãã©ã¯ã¿ãŒã¡ãœãããŸãã¯componentDidMount
ã¡ãœãããå床åŒã³åºããŸããïŒãã¡ããããã¯ãã°ã§ããå¯èœæ§ããããŸãããä»ã®ãšããããã§ã¯ãªããšä»®å®ããŸãïŒ ã
çè«äžã®componentDidReceiveProps
ã䜿çšããŠãããä¿®æ£ããããšãèããŸããã æ®å¿µãªãããããã¯ãŸã ååšããŠãããã componentWillReceiveProps
ã¯ç§ã®ããŒãºã«å¿ããããŸããã
ããã«é¢ãããã€ã³ã¿ã¯å€§æè¿ã§ãã
ç§ã®åã¯ã componentDidReceiveProps
ããŸãã«ç§ãå¿
èŠãšããŠãããã®ã ãšããããšã§ãã
@ shea256 componentWillReceiveProps
ãããŒãºã«åããªãçç±ã詳ãã説æããŠããã ããŸããïŒ
@ shea256ãŸããã³ã³ããŒãã³ããHTTPãªã¯ãšã¹ããè¡ãå¿ èŠãããã®ã¯ãªãã§ããïŒ ãã®httpãªã¯ãšã¹ãã«ã¯äœãå«ãŸããŠããŸããïŒ ããŒã¿ã®å ŽåãããŒã¿ã³ãŒã«ããã¯ãæ»ã£ããšãã«ã³ã³ããŒãã³ããéåæã«æŽæ°ããªãã®ã¯ãªãã§ããïŒ
@jimfbç§ã«ãšã£ãŠäžè¬çãªã±ãŒã¹ã¯ãå°éå ·ã®å€æŽã«å¿ããŠéåæã§äœããããŒãããå¿ èŠãããå Žåã§ããããã«ã¯ãããŒããè¡ãããŠããããšã瀺ãç¶æ ãèšå®ããŠãããããŒã¿ãããŒãããããšãã«ãã®ç¶æ ãèšå®ããããšãå«ãŸããŸãã
æ°ããå°éå
·ã®åãä»ããšåãåãã®äž¡æ¹ã§ããã®åãèªã¿èŸŒã¿ãµã€ã¯ã«ãããªã¬ãŒãããã¯ããªã®ã§ã componentDidMount
ãšcomponentWillReceiveProps
ãæŽæ°é¢æ°ãåŒã³åºãå Žæã§ãã render
ã¯ããããæ°ããå°éå
·ã§ãããã©ããã«é¢ããæ
å ±ããããŸããããšã«ãããã¬ã³ããªã³ã°ããã®setStateã¯ããŒããŒã§ãã
ã ãããç§ã¯ããŒããè¡ã1ã€ã®é¢æ°ãæã£ãŠããŸãã ããããç§ã¯ã«æž¡ãå¿
èŠãprops
ãã©ã¡ãŒã¿ãšããŠãæ
éã«äœ¿çšããªãããthis.props
ã®ããã«å€ããªã£ãŠããcomponentWillReceiveProps
ã ããã¯å¿
ç¶çã«ãã°ãåŒãèµ·ããããšã«ãªããŸããæž¡ãããå°éå
·ã䜿çšããããšãå¿ããªãã§ãã ãããããããªããšãå€æŽãå°çãããšãã«åŸ®åŠãª1ã€ã®èåŸã«ãããšã©ãŒãçºçããŸãã ãŸããå°éå
·ãæž¡ãå¿
èŠããããããé¢é£ãããã¹ãŠã®ã¡ãœããã®çœ²åã¯ããè€éã«ãªããŸãã
ã¯ããçŸåšã®APIã§å®è¡ã§ããŸãã ããããããã¯ãReactãäžè¬çã«åé¿ããã®ã«éåžžã«åªããŠãããã®ã§ãããããäžåšçšã§ãšã©ãŒãçºçããããã³ãŒããåŒãèµ·ãããŸãã
@jimfb routeParam
æ°ãããŠãŒã¶ãŒåãååŸããå¿
èŠããããŸããã componentWillReceiveProps
ã§ã¯ãŸã ååŸããŠããŸããã
å€éšãœãŒã¹ãããããã¡ã€ã«ããŒã¿ãããŒãããããã«HTTPãªã¯ãšã¹ããè¡ãå¿ èŠããããŸãïŒããŒã¿ã¯ããŒã«ã«ã«ä¿åãããŸããïŒã
ãããŠãrenderã¡ãœããã§ã³ã³ããŒãã³ããæŽæ°ã§ããŸãããå°ãæ±ããŠããããã«æããŸãã
constructor(props) {
super(props)
this.state = {
id: this.props.routeParams.id,
profile: {}
}
}
componentDidMount() {
this.getProfile(this.state.id)
}
render() {
if (this.props.routeParams.id !== this.state.id) {
this.getProfile(this.props.routeParams.id)
}
return (
<div>
<div className="name">
{this.state.profile.name}
</div>
</div>
)
}
@grassickã¯æžããïŒ
ç§ã®äžè¬çãªã±ãŒã¹ã¯ãå°éå ·ã®å€æŽã«å¿ããŠéåæã§äœããããŒãããå¿ èŠãããå Žåã§ããããã«ã¯ãããŒããè¡ãããŠããããšã瀺ãç¶æ ãèšå®ããŠãããããŒã¿ãããŒãããããšãã«ãã®ç¶æ ãèšå®ããããšãå«ãŸããŸãã
ã¯ããããã¯ãŸãã«ç§ã®ãŠãŒã¹ã±ãŒã¹ã§ãã
æ°ããå°éå ·ã®åãä»ããšåãåãã®äž¡æ¹ã§ããã®åãèªã¿èŸŒã¿ãµã€ã¯ã«ãããªã¬ãŒãããã¯ããªã®ã§ãcomponentDidMountãšcomponentWillReceivePropsãæŽæ°é¢æ°ãåŒã³åºãå Žæã§ãã
ããèšãããŸãã
@ shea256代ããã«componentWillReceiveProps
ã䜿çšããŠãããè¡ãããšã¯ã§ããŸãããïŒ
constructor(props) {
super(props)
this.state = {
id: this.props.routeParams.id,
profile: {}
}
}
componentDidMount() {
this.getProfile(this.state.id)
}
componentWillReceiveProps(nextProps) {
let { id } = nextProps.params
if(id !== this.state.id) {
this.getProfile(id, (profile) => {
this.setState({ id: id, profile: profile })
})
}
}
render() {
return (
<div>
<div className="name">
{this.state.profile.name}
</div>
</div>
)
}
@grassickã¯æžããïŒ
ç§ã®äžè¬çãªã±ãŒã¹ã¯ãå°éå ·ã®å€æŽã«å¿ããŠéåæã§äœããããŒãããå¿ èŠãããå Žåã§ããããã«ã¯ãããŒããè¡ãããŠããããšã瀺ãç¶æ ãèšå®ããŠãããããŒã¿ãããŒãããããšãã«ãã®ç¶æ ãèšå®ããããšãå«ãŸããŸãã
@grassickã¯æžããïŒ
ã¬ã³ããŒã«ã¯ããããæ°ããå°éå ·ã§ãããã©ããã«é¢ããæ å ±ããããŸããããšã«ãããã¬ã³ããŒããã®setStateã¯ããŒããŒã§ãã
ããã§åŸãåãã ãã§ãïŒ componentDidUpdate
ãïŒåŸç¶ã®ã¬ã³ããªã³ã°ã«å ããŠïŒæåã®ã¬ã³ããªã³ã°ã§åŒã³åºãããå Žåãããã¯ããªãã®ãŠãŒã¹ã±ãŒã¹ã解決ããŸããïŒ å°éå
·ãå€æŽããããã©ããã確èªãããã¹ãŠã®ããŒã¿ãcomponentDidUpdate
ã«ããŒãã§ããŸããïŒ ãŸããã¬ã³ããªã³ã°ã§ã¯ã this.state.profileName != this.props.profileName
å ŽåãããŒã¿ãããŒãããŠããããšãããããŸãã ãã®ä»£æ¿æ¡ã¯ããªãã®ãŠãŒã¹ã±ãŒã¹ã«ååã§ããããïŒ
å°éå ·ã«åºã¥ããŠããŒã¿ãããŒãããã³ã³ããŒãã³ããå«ãŸãªãã人ã ãæã£ãŠãããŠãŒã¹ã±ãŒã¹ã¯ãããŸããïŒ
@calmdev hmãç§ã¯ããªããæ£ãããšä¿¡ããŠããŸãã ãã£ãŠã¿ãŸãã
@jimfbãããããŸãããã componentDidUpdate
ã䜿ã£ãŠã¿ããšãããããŸããããªããšæããŸããã ããäžåºŠèŠãŠã¿ãŸãããã
ãããŠãç§ã¯å®å
šã«this.state.profileName != this.props.profileName
ãã§ãã¯ã§ããããã«æããŸããããããããã¯ã®ããã§ãããïŒ ãã®æç¹ã§ã componentWillReceiveProps(nextProps)
ãæ©èœããããã«ãªã£ãå Žåã¯ãããããå§ãããŸãã ããŠãç§ãæ©ãŸããŠããã®ã¯ã componentDidMount
ãšã®å¯Ÿç§°æ§ã®æ¬ åŠã§ãã componentDidMount
代ããã«componentWillMount
ã䜿çšã§ããŸããïŒ
ã©ã€ããµã€ã¯ã«å šäœããã£ãšãããã«ãªããããªæ°ãããŸãã
@ shea256 ã質åããããŸã... Reactã®README
ãèªãã ããšããããŸããïŒ
ç§ã¯ãããèšãã®ã¯æ°ãé²ãŸãªãããããã§ãªããã°ãããªããæ
£ããŠããªãããŒã«ã®æ°æ©èœãèŠæ±ããã¹ãã§ã¯ãªããããããªãã ç§ã«ãšã£ãŠããããèãããŸã...ã°ãããŠããŸãã
ã componentDidMount
代ããã«componentWillMount
ã䜿çšã§ããŸããïŒã
ããªãã¯ãããã¯READMEã«èšèŒãããŠããã ãšããŠã®ã§ãããããšã¯ã§ããŸããããŒcomponentWillMount
ãããªãã®ã³ã³ããŒãã³ããDOMã«ååŸããåã«åŒã³åºãããcomponentDidMount
ãã®åŸ- ã ãŸããããªãã¯ééããªãããã¡ãœãããå¥ã®ã¡ãœããã«çœ®ãæããããšãã§ããŸãããããŠããã¯ããªãã®ã³ãŒããå£ãã§ãããã ããã«2ã€ã®æ¹æ³ãããçç±ã¯ãçŸåŠã§ã¯ãããŸããïŒã察称æ§ããèªãã§ãã ããïŒã ããã¯ãã¬ã³ããªã³ã°ããåã«æºåãè¡ãããã®ã¡ãœãããšãæåã®ã¬ã³ããªã³ã°åŸã®æåã®DOMã¯ãšãª/æäœã®ããã®ã¡ãœãããå¿
èŠã«ãªãå Žåãããããã§ãã ããããããã§ãå¹³åçãªReactã³ã³ããŒãã³ãã«ãšã£ãŠã¯ãšããŸããã¯ã§ãã éåžžãDOMã«æåã§ã¢ã¯ã»ã¹ããå¿
èŠã¯ãããŸããã
ããããŠãthis.state.profileNameïŒ= this.props.profileNameãå®å
šã«ãã§ãã¯ã§ããããã«æããŸããããããããã¯ã®ããã§ãããïŒã
ã¯ããããªãã®ã¢ãããŒãå
šäœã¯ããã¯ã§ãã ãããŠã componentDidReceiveProps
ãprops
ãå€æŽãããããšãä¿èšŒãããšèª°ãèšã£ãã®ã§ããïŒ shouldComponentUpdate
ãå®çŸ©ããªãéãããããè¡ãããšã¯ã§ããŸããã
ãããReactã®ä»çµã¿ã§ãã
@ me-andreé£ã³èŸŒãã§ãããŠããããšããã§ãããªãã¯ç§ã®å¥œã¿ã«ã¯å°ãç ãæŸãŸãããããŠããŸãã ãŸããããªããç§ã®è³ªåãç解ãããšã¯æããªãã ç§ã¯componentWillMount
ãšcomponentDidMount
ãäœãããã®ãããç¥ã£ãŠããŸãã @jimfbã®å¿çãåŸ
ã¡ãŸãã
@ shea256 ã
ããŸããããªããç§ã®è³ªåãç解ãããšã¯æããªããã
ç§ãããªãã®è³ªåã«çãããšããç§ããã€ã³ããéãããšãããææããŠããã ããŸãããïŒ
ãŸããããªããäœãæ±ããŠããã®ããæ確ã«ããŠããã ããŸãããã
ãŸããç§ãã¡ã¯æ§æ Œã奜ã¿ã«ã€ããŠè©±ãåãããã«ããã«ããããã§ã¯ãããŸããã ããã¯å人çãªè©±ã§ã¯ãªããæè¡ãµããŒãã§ããããŸããã ããã¯ãç¥èã®ããé åãæ¡å
ããããšãæåŸ
ã§ããã¹ã¿ãã¯äº€æWebãµã€ãã§ãããããŸããã
ç§ã¯å°å
ã®äº€æµäŒãåœéäŒè°ã§Reactã«ã€ããŠïŒãããŠããã ãã§ãªãïŒé »ç¹ã«è©±ããŸãããé©åãªææãšå Žæã§ç¥èãå
±æããããšã«éåžžã«ãªãŒãã³ã§ãã ããªãã¯ãã€ã§ãé»åã¡ãŒã«ãŸãã¯ã¹ã«ã€ããä»ããŠçŽæ¥ç§ã«é£çµ¡ããããšãã§ããŸãã
ãããã¡ã€ã«ããŒã¿ã®èªã¿èŸŒã¿ã«é¢ããåé¡ã«ã€ããŠã ããªãã¯ãæ©èœæåã®ãã¬ãŒã ã¯ãŒã¯ã«å€å
žçãªåœä»€åã¢ãããŒããé©çšãããšããåé¡ã解決ããããšããŠããŸãã Reactã®ãã¥ãŒã¯ãå°éå
·ãç¶æ
ãç°å¢ã®é¢æ°ã§ãã function(state, props) { return // whatever you've computed from it }
ïŒããããçŸå®ã®äžçã§ã¯ç©äºã¯å°ãè€éã«ãªããŸã-ããã§ãªããã°ãReactã¯ãŸã£ããååšããŸããïŒã 0.14
ã«ã¯çŽç²é¢æ°åã³ã³ããŒãã³ãããããŸãããã»ãšãã©ã®ã³ã³ããŒãã³ãã§ã¯ããã®ãšã³ããªé¢æ°ã¯render()
ã§ãã
ããã¯ã render()
ããæžãå§ããå°éå
·ãåžžã«ææ°ã§ããã props
ãå€æŽããããã©ãããäœåãã©ãã§å€æŽãããããæ°ã«ããªãããšãæå³ããŸãã ã±ãŒã¹ã¯æ¬¡ã®æ¹æ³ã§å®è£
ã§ããŸãã
// profile-view.js
var React = require('react');
module.exports = React.createClass({
contextTypes: {
app: React.PropTypes.object.isRequired
// another option is var app = require('app')
// or even var profiles = require('stores/profiles')
},
componentWillMount() {
var {app} = this.context; // another option is to require('app')
app.profiles.addListener('change', this.onStoreChange);
},
componentWillUnmount() {
var {app} = this.context; // another option is to require('app')
app.profiles.removeChangeListener('change', this.onStoreChange);
},
onStoreChange() {
this.forceUpdate();
},
render() {
var {app} = this.context;
var profile = app.profiles.read(this.props.routeParams.id);
if (profile) { // profile's been loaded
return <div>{profile.name}</div>;
} else { // not yet
return <div>Loading...</div>;
}
}
});
// profiles-store.js
// app.profiles = new Profiles() on app initialization
var EventEmitter = require('events');
var {inherits} = require('util');
module.exports = Profiles;
function Profiles() {
this.profiles = {};
}
inherits(Profiles, EventEmitter);
Profiles.prototype.read = function(id) {
var profile = this.profiles[id];
if (!profile) {
$.get(`profiles/${id}`).then(profile => {
this.profiles[id] = profile;
this.emit('change');
});
}
return profile;
};
ãã®ãããåçŽã
ãããŠãããªãã¯componentDidReceiveProps
å¿
èŠãšããŸããã componentWillReceiveProps
ãåæ§ã®ããã¯ãå¿
èŠãããŸããã äºçŽ°ãªã±ãŒã¹ã§ããããå¿
èŠã ãšæããå Žåã¯ãReactã§ç©äºãè¡ãæ¹æ³ã«ã€ããŠã®ç解ãäžè¶³ããŠããŸãã ãããååŸããã«ã¯ããªããžããªã®åé¡ã»ã¯ã·ã§ã³ããŽãç®±ã«æšãŠãã ãã§ãªããé©åãªãªãœãŒã¹ã䜿çšããŠ
@ me-andreããªããå©ããããšããŠããã ããªã®ã«ãå°ã察ç«ããããã«åºãããå¯èœæ§ãããã®ã§ãããããããªãã®èšèªãå°ãããŒã³ããŠã³ãã䟡å€ããããŸãã ç§ãã¡ã¯ã誰ãã楜ãããã³ãã¥ããã£ãäœããããšæã£ãŠããŸãã ç§ãã¡ã¯çãããæç¹ã§åå¿è ã§ããã API /ãã¶ã€ã³ã«é¢ããããã€ãã®ãã€ã³ãã«ã€ããŠã¯æ£ããã§ãããéåžžã«å€ãã®äººãåé¡ã+1ããŠãããšããäºå®ã¯ãäœããééã£ãŠããããšã瀺ããŠããã®ã§ã人ã ããããæãã§ããçç±/çç±ãç解ããããã«åªããå¿ èŠããããŸãã©ã€ããµã€ã¯ã«ã ããããåé¡ã¯ãã³ã³ããŒãã³ãïŒããã¥ã¡ã³ãïŒãé©åã«äœæããæ¹æ³ãååã«äŒããŠããªãããšããŸãã¯Reactã®APIãå€æŽããå¿ èŠãããããšã§ã-ãããã«ããŠããããã§èŠæ /質å/ã³ã¡ã³ããç解ãã䟡å€ããããŸãã
@ shea256 this.state.profileName != this.props.profileName
ã¯ãå
éšç¶æ
ïŒã³ã³ããŒãã³ããã¬ã³ããªã³ã°ããŠãããã®ïŒãã芪ãã³ã³ããŒãã³ãã«ã¬ã³ããªã³ã°ãèŠæ±ããŠãããã®ãšäžèŽãããã©ããã確èªããŠããŸãã ããã¯ã»ãšãã©ãã³ã³ããŒãã³ããæŽæ°ãããŠããããŸãã¯ãã³ã³ããŒãã³ããææ°ã§ãããã®å®çŸ©ã§ãããããããããŒãšã¯èŠãªãããŸããã å°ãªããšãããå°éå
·ãå€æŽããããšãã«ããŒã¿æŽæ°ãªã¯ãšã¹ããèµ·åããã³ãŒã«ããã¯ã§setstateãå®è¡ããããšããèãã»ã©ãããããŒãªãã®ã¯ãããŸããã
@ shea256æ確ã«ããããã«ããã®ææ¡ãããã©ã€ããµã€ã¯ã«ã§ã¯ãçŸåšã®ã©ã€ããµã€ã¯ã«ã§ã¯ä»æ¥ãã§ã«å®è¡ã§ããªãã£ãããšãå®è¡ã§ããŸããã ããã¯åã«ãããæœåšçã«ãã䟿å©ã«ããã ãã§ãã ä»ã®äººãè¿°ã¹ãŠããããã«ãããªããããããšããŠããããšã¯çŸåšã®ã©ã€ããµã€ã¯ã«ã§å¯èœã§ãïŒããªããããªãã®ç®æšãéæããããšãå¯èœã«ããã©ã€ããµã€ã¯ã«ã®è€æ°ã®çµã¿åããããããŸãïŒã ããªããããããæ©èœããããããšãè©Šã¿ãŠãããªããStackOverflowã¯è°è«ããã®ã«è¯ãå Žæã§ãããã ãã®githubã®åé¡ã¯ãéçºè
ã®äººéå·¥åŠã«é¢é£ããcomponentDidReceiveProps
ã®å¿
èŠæ§ãç解ããããšããŠããŸãã
ãããŠãcomponentDidReceivePropsãå°éå ·ãå€æŽãããããšãä¿èšŒãããšèª°ãããªãã«èšããŸãããïŒ
@ me-andreã¯ããã§æ£ããã§ãã ã»ãšãã©ã®ã©ã€ããµã€ã¯ã«ã¡ãœããã¯ãå®éã«äœããå€æŽãããããšãä¿èšŒãããã®ã§ã¯ãããŸããã ãããã¯ãäœããå€æŽãããå¯èœæ§ãããããšã瀺ãã ãã§ãã ãã®ãããhttpãªã¯ãšã¹ããè¡ããªã©ã®æäœãè¡ãå Žåã¯ãåžžã«previous === next
ãã©ããã確èªããå¿
èŠããããŸãã ãã®ã¹ã¬ããã®å€ãã®äººã
ã¯ãã©ã€ããµã€ã¯ã«ã¡ãœãããå®è¡ããããšããçç±ã ãã§åœŒãã®äŸ¡å€ãå€ãã£ããšä»®å®ããŠããããã§ãã
@ me-andreã¯æžããïŒ
ããªãã¯ãæ©èœæåã®ãã¬ãŒã ã¯ãŒã¯ã«å€å žçãªåœä»€åã¢ãããŒããé©çšãããšããåé¡ã解決ããããšããŠããŸãã
ããããã®æ°ããã©ã€ããµã€ã¯ã«æ¹æ³ãæãã§ãã人ã ã®æ ¹æ¬çãªåå ãããããªããšæããŸãããç§ã¯ãŸã 人ã ããã®æ¹æ³ã䜿çšãããçç±/æ¹æ³ãç解ããããšããŠããŸãã çŸåšã®ã©ã€ããµã€ã¯ã«ã®ã»ãã³ãã£ã¯ã¹ãã人ã ãäžè¬çã«ããããããšãšãããã«äžèŽããŠããªãå¯èœæ§ã¯ååã«ãããŸãã
ãã¹ãŠïŒãå°éå
·ã®å€æŽã«å¿ããŠããŒã¿ãéåæã«ããŒãããã以å€ã«ã componentDidReceiveProps
ã®ãŠãŒã¹ã±ãŒã¹ã¯ãããŸããïŒ
cc @grassick @iammerrick
@jimfbã³ãŒããæ€çŽ¢ãã componentWillReceiveProps
ã䜿çšããŠãã¬ã³ããªã³ã°ã«å¿
èŠãªäœæã³ã¹ãã®é«ããªããžã§ã¯ããäœæããŸããã ãã®å Žåã¯ãå°éå
·ãæž¡ããªããã°ãªããªãã®ãšåãåé¡ããããã³ãŒãã§this.props
ã䜿çšããªãããã«æ³šæããŠãã ããã
@jimfbã¯æžããïŒ
@ me-andreããªããå©ããããšããŠããã ããªã®ã«ãå°ã察ç«ããããã«åºãããå¯èœæ§ãããã®ã§ãããããããªãã®èšèªãå°ãããŒã³ããŠã³ãã䟡å€ããããŸãã ç§ãã¡ã¯ã誰ãã楜ãããã³ãã¥ããã£ãäœããããšæã£ãŠããŸãã ç§ãã¡ã¯çãããæç¹ã§åå¿è ã§ããã API /ãã¶ã€ã³ã«é¢ããããã€ãã®ãã€ã³ãã«ã€ããŠã¯æ£ããã§ãããéåžžã«å€ãã®äººãåé¡ã+1ããŠãããšããäºå®ã¯ãäœããééã£ãŠããããšã瀺ããŠããã®ã§ã人ã ããããæãã§ããçç±/çç±ãç解ããããã«åªããå¿ èŠããããŸãã©ã€ããµã€ã¯ã«ã ããããåé¡ã¯ãã³ã³ããŒãã³ãïŒããã¥ã¡ã³ãïŒãé©åã«äœæããæ¹æ³ãååã«äŒããŠããªãããšããŸãã¯Reactã®APIãå€æŽããå¿ èŠãããããšã§ã-ãããã«ããŠããããã§èŠæ /質å/ã³ã¡ã³ããç解ãã䟡å€ããããŸãã
ããã«èšåããŠããã ãããããšãããããŸãã ããªããæè¿ã®ã³ãã¥ããã£ãæã£ãŠããããšã確èªããããšã¯éåžžã«éèŠã§ãããããŠããªããšã®ç§ã®ã³ãã¥ãã±ãŒã·ã§ã³ã¯ãã 楜ãããã®ã§ããã
@jimfbã¯æžããïŒ
@ shea256 this.state.profileNameïŒ= this.props.profileNameã¯ãå éšç¶æ ïŒã³ã³ããŒãã³ããã¬ã³ããªã³ã°ããŠãããã®ïŒãã芪ãã³ã³ããŒãã³ãã«ã¬ã³ããªã³ã°ãèŠæ±ããŠãããã®ãšäžèŽãããã©ããã確èªããŠããŸãã ããã¯ã»ãšãã©ãã³ã³ããŒãã³ããæŽæ°ãããŠããããŸãã¯ãã³ã³ããŒãã³ããææ°ã§ãããã®å®çŸ©ã§ãããããããããŒãšã¯èŠãªãããŸããã å°ãªããšãããå°éå ·ãå€æŽããããšãã«ããŒã¿æŽæ°ãªã¯ãšã¹ããèµ·åããã³ãŒã«ããã¯ã§setstateãå®è¡ããããšããèãã»ã©ãããããŒãªãã®ã¯ãããŸããã
ã¯ããããã¯åççãªããã§ãã
@jimfbã¯æžããïŒ
@ shea256æ確ã«ããããã«ããã®ææ¡ãããã©ã€ããµã€ã¯ã«ã§ã¯ãçŸåšã®ã©ã€ããµã€ã¯ã«ã§ã¯ä»æ¥ãã§ã«å®è¡ã§ããªãã£ãããšãå®è¡ã§ããŸããã ããã¯åã«ãããæœåšçã«ãã䟿å©ã«ããã ãã§ãã ä»ã®äººãè¿°ã¹ãŠããããã«ãããªããããããšããŠããããšã¯çŸåšã®ã©ã€ããµã€ã¯ã«ã§å¯èœã§ãïŒããªããããªãã®ç®æšãéæããããšãå¯èœã«ããã©ã€ããµã€ã¯ã«ã®è€æ°ã®çµã¿åããããããŸãïŒã ããªããããããæ©èœããããããšãè©Šã¿ãŠãããªããStackOverflowã¯è°è«ããã®ã«è¯ãå Žæã§ãããã ãã®githubã®åé¡ã¯ãéçºè ã®äººéå·¥åŠã«é¢é£ããcomponentDidReceivePropsã®å¿ èŠæ§ãç解ããããšããŠããŸãã
ç§ã¯ããã«éåžžã«åæããŸãã ç¹å®ã®ãŠãŒã¹ã±ãŒã¹ãæçš¿ããŠããã«ããåãåãããšã¯ããŸããã§ããã componentDidReceiveProps
ã圹ç«ã€ãšæã£ãçç±ã«ã€ããŠã®æŽå¯ãæäŸããããã«æçš¿ããŸããã
ç§ãšæçš¿ããä»ã®12人以äžã®äººã ã¯ãæããã«ãã®ãããªãã®ã䜿çšããæ¬èœãæã£ãŠããŸããïŒã€ãŸããæ°çŸãŸãã¯æ°å以äžããå¯èœæ§ããããŸãïŒãããã¯ãAPIãããã»ã©çŽæçã§ã¯ãªãããšã瀺ããŠããŸãã
@jimfbã¯æžããïŒ
@ me-andreã¯ããã§æ£ããã§ãã ã»ãšãã©ã®ã©ã€ããµã€ã¯ã«ã¡ãœããã¯ãå®éã«äœããå€æŽãããããšãä¿èšŒãããã®ã§ã¯ãããŸããã ãããã¯ãäœããå€æŽãããå¯èœæ§ãããããšã瀺ãã ãã§ãã ãã®ãããhttpãªã¯ãšã¹ããè¡ããªã©ã®æäœãè¡ãå Žåã¯ãåã®===次ã®å Žåãåžžã«ç¢ºèªããå¿ èŠããããŸãã ãã®ã¹ã¬ããã®å€ãã®äººã ã¯ãã©ã€ããµã€ã¯ã«ã¡ãœãããå®è¡ããããšããçç±ã ãã§åœŒãã®äŸ¡å€ãå€ãã£ããšä»®å®ããŠããããã§ãã
ç§ã¯ãã®ä»®å®ãããŠããŸããã å°åæãçç¥ããŸããããçŸåšäœ¿çšããŠããŸãã ãã ããææªã®å Žåãè¿œå ã®èŠæ±ãããªã¬ãŒãããŸãã
@jimfbã¯æžããïŒ
ããããã®æ°ããã©ã€ããµã€ã¯ã«æ¹æ³ãæãã§ãã人ã ã®æ ¹æ¬çãªåå ãããããªããšæããŸãããç§ã¯ãŸã 人ã ããã®æ¹æ³ã䜿çšãããçç±/æ¹æ³ãç解ããããšããŠããŸãã çŸåšã®ã©ã€ããµã€ã¯ã«ã®ã»ãã³ãã£ã¯ã¹ãã人ã ãäžè¬çã«ããããããšãšãããã«äžèŽããŠããªãå¯èœæ§ã¯ååã«ãããŸãã
å€åã ããã«ã€ããŠãã£ãšèããŸãã
componentDidReceiveProps
ã¯ãç§ãæã£ãŠããç¹å®ã®ãŠãŒã¹ã±ãŒã¹ã«åœ¹ç«ã¡ãŸãã
ReactRouterãšFluxã¢ãŒããã¯ãã£ã䜿çšããŠããŸãã ã³ã³ããŒãã³ããã€ã³ã¹ã¿ã³ã¹åããããšãç¶æ ãã¹ãã¢ã®ã¢ã€ãã ã«èšå®ããŸãã ãã®ã¹ãã¢ãå€æŽã€ãã³ããçºè¡ãããšãåãååŸã¯ãšãªã䜿çšããŠç¶æ ãæŽæ°ããŸãã
åãã«ãŒãã§å¥ã®ã¢ã€ãã IDã«ç§»åããããã«å°éå ·ãå€æŽãããå Žåãã¹ãã¢ã«å床ã¯ãšãªãå®è¡ããå¿ èŠããããŸããããããªããšãã³ã³ããŒãã³ããã¹ãã¢å ã®åã®ã¢ã€ãã ã®ç¶æ ã§ã¹ã¿ãã¯ããŸãã
çŸåšã componentWillReceiveProps
ãåŒã³åºããããšãã«ãŒããã©ã¡ãŒã¿ã®ãããããå€æŽããããã©ããã確èªããå€æŽãããå Žåã¯updateItemStateãåŒã³åºããŸãã ããããå°éå
·ã¯å®éã«ã¯ãŸã å€æŽãããŠããªããããä»åºŠã¯å°éå
·ãã¡ãœããã«æž¡ãå¿
èŠããããŸãã
this.updateItemState( nextProps );
updateItemState( props ) {
props = props || this.props;
this.setState( {
item: this.getItemState( props )
} );
}
getItemState( props ) {
props = props || this.props;
return this.ItemStore.get( props.params[ this.paramName ] );
}
åã«ãªããŸã
this.updateItemState();
updateItemState() {
this.setState( {
item: this.getItemState()
} );
}
getItemState() {
return this.ItemStore.get( this.props.params[ this.paramName ] );
}
ããã¯åŠ¥åœãªãŠãŒã¹ã±ãŒã¹ã ãšæããŸãã
@ akinnee-gl et alïŒæŽæ°ã«å ããŠæåã®ããŠã³ãåŸã«componentDidUpdateãèµ·åãããå Žåãããã¯ããªãã®ãŠãŒã¹ã±ãŒã¹ã解決ããŸããïŒ
@ akinnee-glãFluxã䜿çšããŠããå Žåã¯ãã¹ãã¢ããç¶æ
ãèšå®ããå¿
èŠã¯ãããŸããã ããã絶察ã«äžå¯èœã§ãªãéããããªãã¯äžç®æã§ç¶æ
ãç¶æããã¹ãã§ãã ãã©ãã¯ã¹ã«é¢ããŠèšãã°ããã®å Žæã¯åºãã®ãã®ã§ãã ã¹ãã¢ãå€æŽãçºè¡ãããšãã¯ã forceUpdate()
ã ãã§ã render()
ã§read()
ãŸãã
ãåãã«ãŒãã§å¥ã®ã¢ã€ãã IDã«ç§»åããããã«å°éå ·ãå€æŽãããå Žåãã¹ãã¢ã«å床ã¯ãšãªãå®è¡ããå¿ èŠããããŸããããããªããšãã³ã³ããŒãã³ããã¹ãã¢å ã®åã®ã¢ã€ãã ã®ç¶æ ã§ã¹ã¿ãã¯ããŸããã
äžåºŠããªãã
èŠãŠã¿ãŸãããïŒã¹ãã¢ããç¹å®ã®ã¢ã€ãã ãã¬ã³ããªã³ã°ããå¿
èŠããããã¬ã³ããªã³ã°ããã¢ã€ãã ãprops
ãã決å®ããŸãã ãããèŠä»¶ã§ããå Žåã¯ãåèªãšåãæ¹æ³ã§ã³ãŒãã§è¡šçŸããå¿
èŠããããŸãã
var item = this.props.store.read(this.props.id);
return <div>{item.name}</div>;
ããã¯ããªãã®ã³ã³ããŒãã³ãã§ããããã以äžã®ãã®ã§ã¯ãããŸããã
Fluxã§ãããåçããããã«ãã¹ãã¢ã®ãã€ã³ã/ãã€ã³ã解é€çšã®åå©çšå¯èœãªã³ã³ããŒãã³ããäœæã§ããŸãã
<FluxWrapper store={store} component={Component} id={this.props.routeParams.id} />
var FluxWrapper = React.createClass({
componentWillMount() {
this.props.store.addListener('change', this.onStoreChange);
},
componentWillUnmount() {
this.props.store.removeListener('change', this.onStoreChange);
},
onStoreChange() {
this.forceUpdate();
},
render() {
var Component = this.props.component;
return <Component {...this.props} />;
}
});
var Component = React.createClass({
render() {
var item = this.props.store.read(this.props.id);
return <div>{item.name}</div>;
}
});
Reactãé©åã«äœ¿çšãããšãã³ã³ããŒãã³ããã©ãã»ã©å°ãããªããã確èªããŠãã ããã
ãã ããã¹ãã¢ãéãã render()
ããšã«read()
ã ãã§ã¯ã§ããªãå Žåã¯ããã£ãã·ã¥ããã«ãŠã§ã¢ãå¿
èŠã§ãã ããã¯ãåå©çšå¯èœãªã³ã³ããŒãã³ãïŒ FluxWrapper
ãšåæ§ïŒããŸãã¯å
ã®read()
ã¡ãœãããã·ã£ããŠã¢ãŠãããäžéãããã·ã¹ãã¢ã®ããããã§ãã ãããã·ã¹ãã¢ã¯ç°¡åã§ãã£ãããã§ãã芪ã¹ãã¢ã®å€æŽãéèŠã§ãªãå ŽåãéèŠã§ãªãå Žåã¯ãèªã¿åãããã£ãã·ã¥ããã ãã§ãªããå€æŽãæå¶ããããšãã§ããŸãã
ãããäœæ²ãšãããŸãã ã³ã³ããžã·ã§ã³ã¯ã¹ã±ãŒãªã³ã°ãããããç¶æ¿ãæ¡åŒµæ©èœãªã©ãããã³ã³ããžã·ã§ã³ãåªå
ããå¿
èŠããããŸãã
1ã€ã®ã³ã³ããŒãã³ãã䜿çšããŠã解決ãé£ããåé¡ãçºçããããæ¢åã®ã³ã³ããŒãã³ããè€éã«ããã®ã§ã¯ãªãã2ã€ä»¥äžã®ã³ã³ããŒãã³ãã䜿çšããããšãæ€èšããŠãã ããã
@jimfb ãç§ã®å£èª¿ã«é¢ããŠïŒç§ã¯è±èªãæ¯åœèªãšããªãããå®æçã«è©±ãç·Žç¿ãããŠããªãã®ã§ãééã£ãåèªãéžã¶ããšããããŸã-ææ çã«èãããã®ãæããããªãã ãã§ãã
èå³æ·±ãã¢ãããŒãã ç§ã¯ãããå¿ã«çããŠãããŸãã Reactã®å ¬åŒããã¥ã¡ã³ãã¯ãã¹ãŠãã¬ã³ããªã³ã°é¢æ°ãçŽç²ã«ä¿ã€ããã«èšã£ãŠããŸãïŒã€ãŸããã¬ã³ããªã³ã°ã¡ãœããã®å°éå ·ãšç¶æ ã«ã®ã¿ã¢ã¯ã»ã¹ããå¿ èŠããããŸãïŒã ãã¹ãŠã®Fluxã®äŸã¯ãã¹ãã¢ããã®èšå®ç¶æ ã瀺ããŠããŸãã
@jimfb componentDidUpdateã®åé¡ã¯ãå°éå ·ã®å€æŽä»¥å€ã®çç±ã§åŒã³åºãããããšã§ãã ãŸããã³ã³ããŒãã³ãããã§ã«æŽæ°ããããŸã§åŸ ã£ãŠãããsetStateãåŒã³åºããŠå床æŽæ°ããå¿ èŠããããŸãã ããªãéå¹ççãªããã§ãã
@ akinnee-gl componentWillReceiveProps
ã¯ãå°éå
·ã®å€æŽä»¥å€ã®çç±ã§åŒã³åºãããããšãããããïŒhttps://github.com/facebook/react/issues/3279#issuecomment-164713518ãåç
§ïŒã確èªããå¿
èŠããããŸãããšã«ããå°éå
·ãå®éã«å€æŽãããå ŽåïŒéžæããã©ã€ããµã€ã¯ã«ã«é¢ä¿ãªãïŒã ãŸããå®éã«éåæããŒã¿ãå®è¡ããŠããå Žåã¯ãã³ãŒã«ããã¯ãçºçããåã«æ¬¡ã®ã€ãã³ãã«ãŒããåŸ
æ©ããããšã«ãªããŸãããããã£ãŠãé¢æ°ãã®çŽå/çŽåŸã«åŒã³åºãããŠãåé¡ãªããšæããŸããã¬ã³ããªã³ã°æ©èœã§ããã
@jimfbå®éãå°éå ·ãåç §ããŠããã¢ã€ãã ããã§ã«ã¹ãã¢ã«ããå Žåã¯ãå床ã¬ã³ããªã³ã°ããå¿ èŠã¯ãããŸããã ãŸã ã¹ãã¢ã«ãªãå Žåã¯ãããŒãç»é¢ã衚瀺ããããšããå§ãããŸãã ãããã£ãŠã2åã¬ã³ããªã³ã°ããŠãæå³ããããŸããã ã§ãããªãã®èšã£ãŠããããšãããããŸãã
@ me-andreã¬ã³ããªã³ã°äžã«ã¹ãã¢ããèªã¿åãã ãã®ã¢ãããŒããæ¬åœã«å¥œãã§ãã ããã¯ã³ãŒããåçŽåããããã§ãã ããããããããããšã§å¹çããããã倱ãããã®ã§ã¯ãªãããšå¿é ããŠããŸãã shouldComponentUpdateãä»ããŠæŽæ°ãå¶åŸ¡ããæ©èœã倱ãããåè¿°ã®FluxWrapperã³ã³ããŒãã³ããè¿œå ããå¿ èŠããããŸãã ããã«ã€ããŠäœãèãã¯ãããŸããïŒ
ç§ã¯è°è«ãç£èŠããŠããŸãããã3çªç®ã®ãªãã·ã§ã³ãåæ€èšããããšæããŸãïŒïŒ1ïŒAPIã¯ãã®ãŸãŸã§çŽ æŽããããïŒ2ïŒcomponentDidReceivePropsãå¿ èŠãïŒ3ïŒãã£ãšåçŽãªAPIããããããããŸããã
ç§ã¯ãã®åé¡ããè°è«ãïŒ1ïŒãšïŒ2ïŒã®ãœãªã¥ãŒã·ã§ã³ç©ºéã«éå®ããã®ã§ã¯ãªããAPIã®ããæ·±ãå€æŽããã¬ã€ã³ã¹ããŒãã³ã°ããããšã«ãã£ãŠããã®åé¡ã«ãã£ãŠæèµ·ãããæ ¹æ¬çãªããŒãºã解決ã§ãããã©ããã確èªããæ©äŒãšèŠãªããŠããŸãã
ç°¡ç¥åãããAPIã¯ã次ã®ååã«åºã¥ãããšãã§ããŸãã
ïŒAïŒã³ãŒãæ§é ãç°¡çŽ å/å®åæãæžãã
ïŒBïŒå°éå
·ïŒå
¥åïŒãç¶æ
ïŒå
éšïŒããåé¢ããŠãã
ïŒAïŒã®äž»ãªçç±ã¯ãç§ãä»å 䟡å€ã®ãªãå®åæãæžããŠããããšã«æ°ä»ããããã§ãã äŸïŒ
componentWillMount() { this.actuallyCheckThePropsAndMaybeDoSomething(); }
componentWillReceiveProps(nextProps) { this.actuallyCheckThePropsAndMaybeDoSomething(nextProps); }
actuallyCheckThePropsAndMaybeDoSomething(props) {
props = props || this.props;
let relatedProps1 = _.pick(props, KEYS1);
if (!shallowEqual(this.relatedProps1, relatedProps1) { // changed
this.relatedProps1 = relatedProps1;
// do something
}
let relatedProps2 = _.pick(props, KEYS2);
if (!shallowEqual(this.relatedProps1, relatedProps2) { // changed
this.relatedProps2 = relatedProps2;
// do something else
}
}
ç§ã¯å®éã«ã¯ããã次ã®ããšãè¡ããåããŠå¯Ÿå€æŽãããå¥åã®ã³ãŒããã¹ãæããªãããšãæã¿ãŸãïŒ
propsUpdated(prevProps) {
if (!shallowEqual(_.pick(prevProps || {}, KEYS1), _.pick(this.props, KEYS1)) { // changed
// do something
}
if (!shallowEqual(_.pick(prevProps || {}, KEYS2), _.pick(this.props, KEYS2)) { // changed
// do something
}
}
ïŒBïŒã«é¢ããŠã¯ãcomponentDidUpdateã®äž»ãªåé¡ã¯ãåè¿°ã®ããã«ãããããã£ã®å€æŽã«ããç¶æ
ãèšå®ãããšãpropsïŒå
¥åïŒãšïŒå
éšïŒç¶æ
ã®äž¡æ¹ã§åŒã³åºããããããã¡ãœããåŒã³åºããç¹°ãè¿ãããšãã§ããããšã§ãã ãããã®ã³ãŒããã¹ã¯ãå°éå
·ãå€éšããäŸçµŠãããç¶æ
ãå
éšã§èšå®ããããããåé¢ãããŠããæ¹ãè¯ãããã§ãã componentDidUpdateã䜿çšããŠå®åæãæžããupdated(prevProps, prevState)
ïŒã©ã€ããµã€ã¯ã«ã¡ãœãããå°ãªããšåœåãçãã§ãããããcomponentDidUpdateã®ç°¡ç¥åãããååïŒã®4çªç®ã®å¯èœæ§ãè©ŠããŸããããåé·ãª2çªç®ã®å¯èœæ§ã«å°ãäžæºããããŸããæŽæ°åŒã³åºããšãããžãã¯ã¯å®éã«ã¯å®å
šã«ç¬ç«ããŠããããã§ãã
èšèšååããå§ããããšã«åºã¥ããŠïŒãã£ãšãããšç¢ºä¿¡ããŠããŸãïŒïŒã propsUpdated
ãšstateUpdated
沿ã£ãäœããããã®è°è«ã®æœåšçãª3çªç®ã®ãªãã·ã§ã³ã«ãªãã®ã§ã¯ãªãããšæããŸãã ïŒ
@kmalakoffå°éå ·ãå€æŽããããã©ãããåžžã«ç¢ºèªããå¿ èŠããããŸããããã¯ãå°éå ·ãå€æŽããã/å€æŽãããªãã£ãããšãæ確ã«äŒããããšãã§ããªãããã§ãïŒJavascriptã«ã¯å€åããªããå¯å€æ§ãããããïŒã
ãã®ç¹ã§ããããããshouldComponentUpdateãåŒã³åºããŠãpropsDidChangeãªã©ãåŒã³åºãå¿ èŠããããã©ãããå€æã§ããŸãã ãã ããå¥ã®åé¡ã
@jimfbã¯ãåç §ããŠããèšèªã®å¶éãšããããäžè¬çãªAPIã®ç°¡çŽ åã«ã©ã®ããã«é¢é£ããŠããããæ£ç¢ºã«
圌ã¯ã this.props === nextProps
ã2ã€ã®å¥åã®ãªããžã§ã¯ãã§ããå Žåãšããã§ãªãå Žåãããããã
{ a: 1 } === { a: 1 }
ã¯ã2ã€ã®å¥åã®ãªããžã§ã¯ãã§ãããããfalseã«ãªããŸããã
var a = { a: 1 };
var b = a;
a === b
ãããã¯å®éã«ã¯äž¡æ¹ãšãåããªããžã§ã¯ããžã®åç §ã§ãããããtrueãçæãããŸãã
åããããã£ãçãããã©ãããååž°çã«ãã§ãã¯ããããšã¯ã§ããŸãããããã¯ããªãé
ããªãå¯èœæ§ããããŸãã ãã®ããã shouldComponentUpdate
ãå®è£
ããã®ã¯ç§ãã¡æ¬¡ç¬¬ã§ãã
@kmalakoffãã®ã¹ã¬ãããhttps ïŒ //gist.github.com/jimfb/9ef9b46741efbb949744
TLDRïŒ@ akinnee-glã¯åœŒã®èª¬æã§æ£ç¢ºã«æ£ããã§ãïŒããããšãïŒïŒã å°éå ·ãšããŠæž¡ãããã³ãŒã«ããã¯é¢æ°ãååž°çã«ãã§ãã¯ããæ¹æ³ããªãããããšã«ããååž°çãã§ãã¯ãåžžã«å®è¡ã§ãããšã¯éããªããšãããã€ããŒãªä¿®æ£ããããŸãïŒå¿ èŠãªå Žåã§ããããã©ãŒãã³ã¹ã¯åé¡ã§ã¯ãããŸããã§ããïŒã
ïŒPã§ããããã®ã¹ã¬ããããããã¯ã«çããŠãããŸãããã
ããªãããäž¡æ¹ã«æè¬ããŸãïŒ ããŒããAPIãåçŽåããããšããã®åé¡ã解決ããããã®ãªãã·ã§ã³ã§ã¯ãªãçç±ã«ã€ããŠã¯ãŸã å®å šã«ã¯æ確ã§ã¯ãããŸããã èŠæšã«ã³ã¡ã³ããè¿œå ããŸã...
ããå¹ åºããœãªã¥ãŒã·ã§ã³ã«åå ãããæ¹ã¯ããã²ãåå ãã ããã
@jimfb @calmdevç§ã¯ããªãã®ææ¡ãè©ŠããŸãããã componentDidReceiveProps
ãå®éã«ã¯äœãæ°ãããã®ãè¿œå ãããè¿œå é¢æ°ãšããŠè¿œå ãã¹ãã§ã¯ãªãçç±ãå®å
šã«ç解ããŸããã ç§ã¯ä»¥åã«ããªãã®èšèãä¿¡é ŒããŠããŸããããä»ã§ã¯ãªããããªãã®ããçŽæçã«ç解ã§ããŸãã
ç§ããã®ããšã«æ°ä»ããçµç·¯ã説æããããã«ãææ°ã®ã³ãŒããå ±æããããšæããŸãã ããããããã¯ä»ã®äººã«ã圹ç«ã€ã§ãããã
ç§ã®ãããã£ãŒã«ããŒãžã³ã³ããŒãã³ããèŠãŠãã ããïŒ
class ProfilePage extends Component {
static propTypes = {
fetchCurrentProfile: PropTypes.func.isRequired,
currentProfile: PropTypes.object.isRequired
}
constructor(props) {
super(props)
this.state = { currentProfile: {} }
}
componentHasNewRouteParams(routeParams) {
this.props.fetchCurrentProfile(routeParams.id)
}
componentWillMount() {
this.componentHasNewRouteParams(this.props.routeParams)
}
componentWillReceiveProps(nextProps) {
if (nextProps.routeParams.id !== this.props.routeParams.id) {
this.componentHasNewRouteParams(nextProps.routeParams)
}
this.setState({
currentProfile: nextProps.currentProfile
})
}
render() {
var profile = this.state.currentProfile
return (
<div>
<h1>{ profile.name ? profile.name : null }</h1>
</div>
)
}
}
ã³ã³ããŒãã³ããããŠã³ãããããšããããã¡ã€ã«ããŒã¿ããªããããå€éšãœãŒã¹ãããããã¡ã€ã«ãããŒãããå¿ èŠããããŸãã
ã€ãŸã...å€éšãœãŒã¹ããããŒã¿ããã§ããããfetchCurrentProfile
é¢æ°ïŒ componentHasNewIdProp
ã©ãããããŠããïŒãåŒã³åºããŠãããæŽæ°ã¢ã¯ã·ã§ã³ãReduxã«ãã£ã¹ãããããŸãã ã¬ãã¥ãŒãµãŒã¯ãã®ã¢ã¯ã·ã§ã³ãåãåããã¢ããªã±ãŒã·ã§ã³ã®ç¶æ
ãæŽæ°ããŸãã次ã«ãã¢ããªã±ãŒã·ã§ã³ã®ç¶æ
ãProfilePage
ã³ã³ããŒãã³ãã®å°éå
·ãæŽæ°ããŸãã
ããã§ãå°éå
·ãæŽæ°ãããããã componentWillReceiveProps
é¢æ°ãåŒã³åºãããŸãã ãã ããå°éå
·å€æŽã€ãã³ãã®ã³ã³ããã¹ããããããªããããã©ã®å°éå
·ïŒããå ŽåïŒãå€æŽãããããææ¡ããå¿
èŠããããŸãã IDãåãã§ããããšããããã®ã§ã fetchCurrentProfile
å床åŒã³åºãå¿
èŠã¯ãããŸããã ãã®åŸãæã
ã¯æŽæ°state.currentProfile
ã³ã³ããŒãã³ããæ°ãããããã¡ã€ã«ããŒã¿ãåæç»ããããã«ç¥ã£ãŠããïŒã¯ããç§ã¯å°éå
·ã§ãããè¡ãããšãã§ããŸãããç§ã¯ããã«è¡ããããªãã®ã¯ãã®ããã®å¥ã®çç±ããããŸãïŒã ããã çŸæç¹ã§ã¯ãç¶æ
ãæŽæ°ããåã«props.currentProfile
ãå€æŽãããŠãããã©ããã確èªã§ããŸãããããã¯ã³ã¹ãã®ãããæäœã§ã¯ãªãããã確èªããŠãããŸããŸããã
次ã«...ãããããã¡ã€ã«ããå¥ã®ãããã¡ã€ã«ã«ç§»åãããšããŸãã ãªã³ã¯ãã¯ãªãã¯ãããšãã«ãŒã¿ãŒãã«ãŒãå€æŽãããªã¬ãŒããŸãã ããã§æ°ããã«ãŒããã©ã¡ãŒã¿ãã§ãã componentWillReceiveProps
é¢æ°ãããªã¬ãŒãããŸãã id
ãå€æŽãããããšãããã£ãã®ã§ãããäžåºŠfetchCurrentProfile
ãåŒã³åºããŸãïŒ componentHasNewIdProp
çµç±ïŒã
æ°ãããã§ãããæ»ã£ãŠreduxã¢ã¯ã·ã§ã³ããã£ã¹ããããããšã currentProfile
ãããããå床æŽæ°ãããç¶æ
ãæŽæ°ãããã³ã³ããŒãã³ããæ°ãããã¥ãŒã§åã¬ã³ããªã³ã°ãããŸãã
ãã®äŸã¯ãã³ã³ããŒãã³ããããŠã³ãããããšããšãã³ã³ããŒãã³ããæ°ããå°éå ·ãåãåããšãã«ãã©ã®ããã«ç°ãªãåäœãå¿ èŠãã瀺ããŠããŸãã ãŸããåŸè ã®å Žåã«å°éå ·ã®å€æŽããã§ãã¯ããæ¹æ³ãšãç¹å®ã®å°éå ·ã®å€æŽæã«ã®ã¿ç¹å®ã®é¢æ°ãåŒã³åºãæ¹æ³ã«ã€ããŠã説æããŸãã
æ¯ãè¿ã£ãŠã¿ããšãæ¬è³ªçã«ç§ã欲ããã£ãã®ã¯ã routeParams
å€æŽããããšãã«ã®ã¿æŽæ°ãããé¢æ°
ãã ããããã§åœ¹ç«ã€å¯èœæ§ãããã®ã¯ãã©ã€ããµã€ã¯ã«ãå®éã®äŸãªã©ã«é¢ããããã¥ã¡ã³ãã§ãã
å©ããŠãããŠããããšãã ããã§äœãåé¡ããã£ãå Žåã¯ãç¥ãããã ããã ãããå°æ¥ãã®ã¹ã¬ããã«åºãããã人ã«åœ¹ç«ã€ããšãé¡ã£ãŠããŸãã
@ shea256ããªãã®äŸã¯ãæ°ããAPIã®èŠ³ç¹ãªãã«å¿ èŠãªããšãéæã§ãããšããç¹ã§ãæ°ããAPIãå¿ èŠãšããªãåççãªã±ãŒã¹ã®ããã§ãã
https://gist.github.com/jimfb/9ef9b46741efbb949744ã§ããå€ãã®èããæŠèª¬ããŸããããããã§ãAPIãåçåããŠã³ãŒãã®èšè¿°ãæžããããšãã§ããã¯ãã ãšæããŠããŸã...
APIã䜿çšããŠåãæ©èœãèšè¿°ã§ããããå®åæãå°ãªããšæ³åããŠã¿ãŠãã ããã
class ProfilePage extends Component {
static propTypes = {
fetchCurrentProfile: PropTypes.func.isRequired,
currentProfile: PropTypes.object.isRequired
}
state = {currentProfile: {}}; // not material to example (babel-stage-1)
// called both on init and update
willReceiveProps(nextProps) {
if (!this.props || (this.props.routeParams.id !== nextProps.routeParams.id)
nextProps.fetchCurrentProfile(nextProps.routeParams.id)
}
render() {
var profile = this.props.currentProfile;
return (
<div>
<h1>{ profile.name ? profile.name : null }</h1>
</div>
)
}
}
ç§ãæ€èšããããšæã£ãŠããã®ã¯ãAPIã®è¡šé¢ç©ãæžãããŠãã³ãŒããã¹ãšãã€ã©ãŒãã¬ãŒãã®æ°ãæžããããšã§ãã å¥ã®èŠç¹ããèŠããšæ°ããéãéããããããããªãã®ã«ãäœããè¿œå ãããšããæåã®èŠæ±ã«è°è«ãåºå®ãããŠããã®ã§ã¯ãªãããšæããŸãã
ããã¯1ã€ã®ãªãã·ã§ã³ã«ãããŸããïŒçæ³çã«ã¯ãthis.propsã䜿çšã§ããpropé¢é£ã®ã¡ãœããã¯1ã€ãããªããããç§ã®å¥œã¿ã¯receivedPropsïŒprevPropsïŒã§ãïŒããéèŠãªéšåã¯ãåæåã®ããã®ã³ãŒããã¹ã1ã€ãããªãããšã§ããããŸããŸãªAPIã·ã°ããã£ã䜿çšããŠçŸåšäœ¿çšããŠããããŸããŸãªã³ãŒããã¹ã§ã¯ãªããã³ã³ããŒãã³ããšå°éå ·ã®å€æŽã 人ã ãããè¯ãããšã«åæãã解決çã¯äœã§ãã
ãã€ã©ãŒãã¬ãŒããæžããããšã¯ããã®åé¡ãéæã§ããããšãæãã§ããŸãïŒç§ã®ããŒãº/åé¡ãæ確ã«ããããã«ïŒïŒãããŠããã®ãœãªã¥ãŒã·ã§ã³ãã©ã®ããã«èŠãããã«ã€ããŠããå°ãåºããã¬ã€ã³ã¹ããŒãã³ã°ããããšæããŸãïŒAPIãåé€ãã ES6ãåºãå©çšå¯èœã«ãªããã³ã³ããŒãã³ããåé²ããŠããããã«èŠããããã«ãªã£ããããã©ã€ããµã€ã¯ã«ã¡ãœãããå€§å¹ ã«ççž®ãããã¡ãœããåãççž®ãããŸããã
@ akinnee-glãããã€ãã®çç±ãããã¢ããªã±ãŒã·ã§ã³ãå€ãã®å°ããªã³ã³ããŒãã³ãã§æ§æããæ¹ããããã€ãã®éãã³ã³ããŒãã³ããããã¯ããã«åªããŠããŸãã
åã¬ã³ããªã³ã°ã§ã¹ãã¢ããã®èªã¿åããéå¹ççã§ããå¯èœæ§ããããšããéç¥ã«é¢ããŠããã£ãã·ã¥çšã®ããã«ãŠã§ã¢ã³ã³ããŒãã³ããå®è£ ããæ¹æ³ã®åºæ¬çãªã¢ã€ãã¢ã瀺ãèŠç¹ãäœæããŸããïŒ https ïŒ
ç§ã¯ãAPIã®æ¹åã«ã€ãªããå¯èœæ§ã®ããåå/ç®æšã«ã€ããŠå¥ã®ãã¹ãåããŸããïŒããŸãããã°ããã®åé¡ã§ææ¡ãããŠããããã«ãåãåã£ãå°éå ·ã¡ãœããã«åºã¥ããŠããŸãïŒïŒ
ïŒAïŒã³ãŒãæ§é ãç°¡çŽ å/å®åæãæžãã
ïŒBïŒå°éå
·ïŒå
¥åïŒãç¶æ
ïŒå
éšïŒããåé¢ããŠãã
ïŒCïŒã³ã³ããŒãã³ãã®ã¬ã³ããªã³ã°ãå¶åŸ¡ããã¡ãœãããèš±å¯ãã
ïŒDïŒã³ã³ããŒãã³ãã®ãµãã¯ã©ã¹åã®ä»®å®ã«åºã¥ããŠã¡ãœããã®åœåãç°¡çŽ åãã
ïŒEïŒåæåãšå€æŽã®äž¡æ¹ã§propsã¡ãœããã®æ°ã1ã€ã«æžãããŸã
ïŒFïŒpropsã¡ãœããã«ã¯ãææ°ã®å€ãæã€this.propsãå¿
èŠã§ãã
èŠæšã§ã¯ããããã®ããã€ãã«ã€ããŠèª¬æããããŸãã
@kmalakoffèŠç¹ã«åŸã£ãŠããããã®åé¡ã®ç¯å²ãæ¡å€§ããªãã§ãã ããã ãã®åé¡ã¯ãã§ã«ååã«è€éã§ãããäŒè©±ãå®å šãªAPIã«åå²ãã-åèšèšã¯æ±ãã«ãããã®ã«ãªãã§ãããã ãããã®åé¡ã«ã€ããŠåŒãç¶ãæ€èšããããšãæè¿ããŸããããã®ã¹ã¬ããããããã¯ã«çããŠãããŠãã ããã
@kmalakoffããªããèšåããŠãããã€ã³ãã®å€ãã¯ãä»ã®åé¡ã®ãããã¯ã§ãã ããšãã°ãïŒDïŒã¯https://github.com/reactjs/react-future/issues/40#issuecomment-142442124ããã³https://github.com/reactjs/react-future/issues/40#issuecomment-ã«ãã£ãŠåçãããŸãã 153440651ã ãããã¯ãã®è°è«ãããã®ã«é©åãªã¹ã¬ããã§ãã ããäžè¬ç/å šäœçãªèšèš/ APIã®è°è«ãæ¢ããŠããå Žåãæ£ããåªäœã¯ããããhttps://discuss.reactjs.org/ã§ãã
@jimfbãããèŠç¹ã«ç§»ãããã«ææ¡ããåŸãç§ã¯ããã«ã€ããŠããã€ãèããŸããããå®éã«ã¯ãã®åæã©ã€ã³ããããã¯ããå€ããŠãããšã¯æããªã...åãåã£ãå°éå ·ã«é¢ãããã®åé¡ã«èå³ãããçç±ã¯ãåãåã£ãå°éå ·ã®ã©ã€ããµã€ã¯ã«æ¹æ³ã«ããããã€ã©ãŒãã¬ãŒããæžããããšãã§ããŸãã
ç§ã®èšãããšãèããŠãã ãã...ãã€ã©ãŒãã¬ãŒããæžããããšã¯ããã®åé¡ã®ã©ã€ããµã€ã¯ã«æ¹æ³ãç§ã®ããã«è§£æ±ºã§ããåé¡ã§ãã
çŸåšã®APIã¯ãã€ã©ãŒãã¬ãŒããç§ãã¡ãæã以äžã«å¥šå±ããŠããããã人ã ããã®ã©ã€ããµã€ã¯ã«ã¡ãœããã«èå³ãæã£ãŠããçç±ã®éèŠãªéšåã§ããããšæããŸãã
ããã¯èšã£ãŠããAPIã®æ¹åãåãé¢ããŠãããšãã°ããã®åé¡ã®å°éå ·ã«é¢é£ããAPIã®æ¹åã«é¢ãããœãªã¥ãŒã·ã§ã³ã¹ããŒã¹ã®èª¿æ»ã«ã®ã¿çŠç¹ãåœãŠãããšãã§ããã°å¹žãã§ãã
@kmalakoffã¹ã¬ããã®ãããã¯ã¯ãã¿ã€ãã«ãšæåã®æçš¿ã«ãã£ãŠå®çŸ©ãããŸãã ã¿ã€ãã«ã¯componentDidReceiveProps Please
ã§ã¯ãªãlots of general ways to reduce boilerplate
ã§ãã ãã®ã¹ã¬ããã¯ãç¹ã«éåžžã«å
·äœçãªã©ã€ããµã€ã¯ã«æ¹æ³ã®å°å
¥ãéããŠãã€ã©ãŒãã¬ãŒããåæžããããšã«ã€ããŠã§ãã ä»ã®åé¡ã§ãã§ã«è°è«ãããŠããè¿œå ã®ãããã¯ïŒãã¹ãŠã®æ©èœã®ååå€æŽãªã©ïŒãå°å
¥ããããšãªãããã®è°è«ã ãã§ããã§ã«ååã«åŸ®åŠãªéãããããŸãã
ããªãã®ãã€ã³ãã¯è²Žéã§ããè°è«ãããããšããå§ãããŸããgithubã¹ã¬ãããç®åã®ãããã¯ã«éäžããããã®ã§ãå¥ã®ã¹ã¬ããã«ç§»åããŠãã ããã ããã§ãªããã°ãè°è«ã¯è¿œè·¡/管çããã®ãé£ããããŸãã ããªããæèµ·ããã»ãšãã©ã®ãããã¯ã«ã¯ã¹ã¬ãããååšããŸãã
@jimfbãªã人ã
ã¯componentDidReceiveProps
æ±ããŠããã®ã§ããïŒ ç§ãããã«èå³ãæã£ãŠããçç±ã¯ãå°éå
·ã«é¢é£ããå®åæã
ããªãã¯åé¡ãšãŠãŒã¹ã±ãŒã¹ãæ±ããŠããŸããããããŠç§ã¯ãããç§ã«ãšã£ãŠã®åé¡ãšããŠè¿°ã¹ãäžèšã®ãŠãŒã¹ã±ãŒã¹ïŒ@ shea256ã«å¿çïŒã瀺ããŸããããã®åé¡ã
ç§ã¯ãäžè¬çãªAPIã®åé¡/æ¹åãšæå¿ã«ç¯å²ãæ¡å€§ããããšã延æããããšã«åæããŸããã çŽæããŸãïŒ ïŒãŠã£ã³ã¯ïŒ
åèïŒåã«è¿°ã¹ãããã«ããã®åé¡ã«é¢ããæèå®éšãéå§ããçç±ã¯ãè°è«ã®çŠç¹ãå°ãçãããããã«èŠããããïŒããšãã°ãçŸåšã®APIã§å¿ èŠãªãã¹ãŠããã§ã«å®è¡ã§ããïŒãèåŸã«ããæ ¹æ¬çãªåæ©ãç¹å®ããããã§ããåé¡ã ãåç¥ã®ããã«ãåé¡ã®æåã®è§£æ±ºçã«åããŠç¹°ãè¿ãããã«ãäžæ©äžãã£ãŠããçŠç¹ãåãããå¥ã®è§åºŠããèŠãŠãä»®å®ãåæ€èšããèŠæ±ã®èåŸã«ããæ ¹æ¬çãªçç±ã調æ»ããå¿ èŠãããå ŽåããããŸãã ããŸãããã°ãç§ã¯ããã«æ³šæãåŒãã®ãå©ããŸããããããŠç§ã®åå ã¯ãã®åé¡ãç§ãã¡ã®æºè¶³ã«è§£æ±ºããã®ãå©ããã§ãããïŒ ïŒãã¡ãããReact APIãé²åããŠãã䜿ãããããªããä»ã®å Žæã§ããã®è°è«ãç¶ãããšãé¡ã£ãŠããŸã...ãªã³ã¯ãããããšãïŒ
@kmalakoff ã
@ me-andreã¯ããã®åé¡ãAPIã®æ¹åã«ã€ãªãããªãå Žåã絶察ã«ãªãã·ã§ã³ã§ãã
ãã®åé¡ã¯ãAPIãæ¹åããããã«APIã«å€æŽãå ããããšããé¡æã«é¢ããè°è«ãä¿é²ããããã«æèµ·ãããŸããã ã¯ã©ã€ã¢ã³ãã³ãŒãã®ä»£æ¿æ¡ãæ確ã«æ€èšããå¿ èŠããããŸãããAPIãå€æŽããå¿ èŠããããšãã匷ã䞻匵ããªãããå Žåããã®çš®ã®åé¿çã¯äžèŠã§ãã åè«ããããã«ã¯ãæ¹åãããAPIãã©ãããã¹ããã«ã€ããŠãã±ãŒã¹ãäœæããçŸåšã®APIã«å¯ŸããŠè©äŸ¡ããŠããããè©äŸ¡ããå¿ èŠããããŸãã
ããšãã°ãã«ã¹ã¿ã ã¹ãŒããŒã¯ã©ã¹ãå®çŸ©ããã«çŸåšã®APIã䜿çšããŠãå®åæãæžããããšãã§ããããšãå®èšŒããå ŽåïŒããšãã°ãAPIã誀ã£ãŠäœ¿çšããŠããããŸãã¯çŸåšã®APIã«äœ¿çšã§ããæ©èœãããå ŽåïŒãã€ã©ãŒãã¬ãŒãã®åæ§ã®ã¬ãã«ã®åæžãªã©ïŒããŸãã¯æ¹åãäžå¯èœãªçç±ã蚌æããïŒããšãã°ãAPIæ¹åãªãã·ã§ã³ã§ãµããŒãã§ããªãã£ãäž»èŠãªãŠãŒã¹ã±ãŒã¹ããããããäžè¬çãªè§£æ±ºçãååšããªãïŒãªã©ã APIããã®ãŸãŸã§ååãªå Žåã
APIã§ãåºæ¬çããã³äžè¬çãªå¶åŸ¡ãããŒãã¿ãŒã³ã®ã«ã¹ã¿ã ã¹ãŒããŒã¯ã©ã¹ãäœæããå¿ èŠãããå ŽåãAPIãæ¹åããå¿ èŠããããšããè°è«ã匷ãŸããŸãã
奜å¥å¿ã匷ã-ããŠã³ãããåã«componentWillReceiveProps
ãããªã¬ãŒãããªãçç±ã¯äœã§ããïŒ ããªããããã«ã€ããŠèãããªãã°ããããåæåããããšããã³ã³ããŒãã³ãã¯å®éã«å°éå
·ãåãåã£ãŠããŸãã æ°ããå°éå
·ãåãåã£ãŠããªãã ãã§ãã
æ°ããå°éå ·ãåãåã£ããšãã ãïŒæåã®å°éå ·ãåãåã£ããšãã§ã¯ãªãïŒäœããããªã¬ãŒããããŠãŒã¹ã±ãŒã¹ã¯äœã§ããïŒ
ç§ã¯ããã§æçœãªäœããèŠéããŠããå¯èœæ§ããããŸãããããŸããŸãªé¢ä¿è ã®èŠç¹ã調æŽããããšããŠããã ãã§ãã
ãããã«ãããå Žåã«ãã£ãŠã¯componentWillReceiveNewProps
ãéèŠã§ããå Žåã§ããå
¥ã£ãŠããå°éå
·ã®ãã§ãã¯ãå®è¡ããããšã§ãå€æŽãããcomponentWillReceiveProps
ãããã·ãã¥ã¬ãŒãã§ããŸãã
@kmalakoff componentWillReceiveProps
ãæåã«ããªã¬ãŒãããå Žåãããã¯APIç°¡çŽ åã®åºæºãæºãããŸããïŒ
componentWillReceiveProps
ãããŠã³ãæã«ããªã¬ãŒãããªãã®ã¯ã人ã
ãcomponentDidReceiveProps
èŠæ±ããŠããçç±ã§ã¯ãããŸããã this.props
ã«ã¢ã¯ã»ã¹ããããã®ãã¹ãŠã®ã¡ãœãããäœæããããã人ã
ã¯componentDidReceiveProps
ãæ±ããŠããŸãã componentWillReceiveProps
ãåŒã³åºããããšãnextPropsãæž¡ãããŸããã this.props
ã¯ãŸã å€æŽãããŠããŸãããã€ãŸãã componentWillReceiveProps
ã«å¿çããŠåŒã³åºããããã¹ãŠã®ã¡ãœããã«nextProps
ãæž¡ãå¿
èŠããããŸãããã®ãŸãŸã«ããã®ã§ã¯ãªãã componentWillReceiveProps
ã æçµçã«ã¯ã倧éã®props = props || this.props
ãšãåŒã³åºããã¹ãŠã®é¢æ°ã«å€§éã®props
ãæž¡ãããšã«ãªããŸãã
@ shea256è¯ãç¹ã åæåãšå€æŽã®ã³ãŒããã¹ãç°ãªãããšã¯ãå°éå ·ãã€ã©ãŒãã¬ãŒãã®æ ¹æ¬çãªåå ã®1ã€ã§ãã ãã1ã€ã®æ ¹æ¬çãªåå ã¯ã@ akinnee-glãææãããããªå°éå ·ãåŠçããããã®ããŸããŸãªçœ²åãããããšã§ãã
ãããããããã©ãã€ã©ãŒãã¬ãŒããããã«æžããããã®ããã«åªãããœãªã¥ãŒã·ã§ã³ãå®éã«ååšããå¯èœæ§ããããããæ€èšäžã®ãœãªã¥ãŒã·ã§ã³ã¹ããŒã¹ãæ¡åŒµããããšããŠããçç±ã§ãïŒããšãã°ãinitãåŒã³åºãïŒã
ç§ãã¡ã¯ããã«é²ãããšãã§ããããšãé¡ã£ãŠããŸãïŒ
componentWillMount() {
this.setup(this.props.id);
}
componentWillReceiveProps(next) {
this.setup(next.id);
}
setup(id) {
UserActions.load(id);
}
componentDidReceiveProps(prevProps) {
UserActions.load(this.props.id);
}
ãŸãã¯ãUserActions.loadãçŸåšããŒããããŠããIDã確èªã§ããªãå ŽåïŒ
componentDidReceiveProps(prevProps) {
if (!prevProps || (prevProps.id !== this.props.id))
UserActions.load(this.props.id);
}
@kmalakoff ãç§ã話ããŠããã®ã¯ãAPIã®æ¹åãä»ããã«çµ¶å¯Ÿã«å©çšã§ãããšããããšã§ããã³ã³ããŒãã³ãã®ç¬èªã®ãã¡ã¯ããªãäœæããŠãïŒãŠãŒã¹ã±ãŒã¹ãµã³ãã«ãšãšãã«ïŒç§ãã¡ãšå ±æããããšãã§ããŸãã ããã«ãããææ¡ãšçè«çæ ¹æ ã100åæ確ã«ãªããŸãã ãã¹ãŠã®ã©ã€ããµã€ã¯ã«ãã€ã³ãã«ã¯ãã§ã«é©åãªã³ãŒã«ããã¯ããããããä»»æã®ã©ã€ããµã€ã¯ã«ãã€ã³ã/ã³ã³ããŒãã³ãã®ç¶æ ã§æ°ããã¡ãœãããå°å ¥ã§ããŸãã ã€ãã³ããšããã¿ãŒãã³ã³ããŒãã³ãã«ããã¯ã¹ã€ã³ããŠãç¶æ å€æŽã®ããã«è€æ°ã®ãã³ãã©ãŒãã¢ã¿ããã§ããããã«ããããšãã§ããŸãã
@ shea256 ãæåã®ã¬ã³ããªã³ã°ã®åã«componentWillReceiveProps
ãããªã¬ãŒãããªãçç±ã®ã²ãšã€ã¯ããã®æç¹ã§this.props
ã®ãããªãã®ããªãããšã§ãã componentWillReceiveProps
äžè¬çã«è¡ãããšã¯ã this.props[propName]
ãšnewProps[propName]
æ¯èŒããããšã§ãã æåã®ã¬ã³ããªã³ã°ã®åã«ã¡ãœãããããªã¬ãŒãããšã this.props
ååšã確èªããå¿
èŠããããŸãã ããã«ãã³ã³ããŒãã³ãå
šäœã¯ãæåã®ã¬ã³ããªã³ã°ã®åã«props
ãåãåã£ãæç¹ã§ã¯å®å
šã«åæåãããŠãããã state
ãããããŸããã
@kmalakoff ã setup
ãåæ§ã®ããã¯ãå¿
èŠãšããªãæ¹æ³ã§Reactã³ã³ããŒãã³ããæŽçããæ¹æ³ã瀺ãã³ãŒããµã³ãã«ã2åæçš¿ããŸããã ã³ãŒãã調æŽããŠReactãšçµ±åããã®ã§ã¯ãªããReactã³ã³ããŒãã³ãã®åäœãå€æŽããããšåªåããŠããçç±ãæããŠãã ããã ç§ã®ãµã³ãã«ãããªãã®ãŠãŒã¹ã±ãŒã¹ã«äžé©åãªå Žæãææããã ãã§ããã®ã§ããã
@ akinnee-glãæŽæ°æã«this.props
ã«ã¢ã¯ã»ã¹ããããã®æ°ããã¡ãœãããå°å
¥ããªãçç±ã¯ããã®ãããªã¡ãœãããããããã§ã-ããã¯render()
ãšåŒã°ããŸãã shouldComponentUpdate()
ãã§ãã¯åŸã«åŒã³åºãããããšããããŸããããã¯éåžžã this.props !== newProps
ã_.isEqual(this.props, newProps)
ãªã©ãå®è¡ããå Žæã§ãã
äžéšã®ã»ããã¢ããã«å¥ã®ã¡ãœãããå¿
èŠã ãšæãããå Žåã¯ãReactã³ã³ããŒãã³ãããµãã¯ã©ã¹åããŠã次ã®render()
ã¡ãœãããå®çŸ©ããªãã§ãã ããã
this.setup(this.props);
return this._render();
ãããReactãšã³ã·ã¹ãã ã§ç©äºãã©ã®ããã«åçŽåãããã¯ããããŸããããããã¯ããªããèŠæ±ãç¶ãããã®ã§ãã
@ me-andreãã®åé¡ã®åæã¯ãçŸåšã®APIã§ç®çãéæã§ããªãããšã§ããã¯ã©ã€ã¢ã³ãã³ãŒãã§çŸåšã®APIãåé¿ã§ããªãããšã§ããããŸããã ãã®åé¡ã®åæã¯ãçŸåšã®React APIãæé©ã§ã¯ãªããæ¹åããå¿ èŠããããšããããšã§ãã ããšãã°ãæé©ãªAPIãã©ã®ããã«èŠãããïŒäžèšã§è©Šããããã«ïŒã®ååãèãåºããå ŽåãçŸåšã®React APIã¯ãå€ãã®é åã§æé©ã§ã¯ãªã/äžååã§ãããããäžã¬ãã«ã®ç¯å²ã§ã¹ã³ã¢ãªã³ã°ãããŸãã
æ®å¿µãªãããã¯ã©ã€ã¢ã³ãã³ãŒãã§React APIãåé¿ããæ¹æ³ãæäŸããŠããåé¡ã®æ ¹æ¬åå ã«å¯ŸåŠã§ãããæ ¹æ¬çãªåé¡ã«å¯ŸåŠããããšããè°è«ãã·ããããReactAPIãæ¹åããããã®æœåšçãªè§£æ±ºçã«é¢ããè°è«ã«ã€ãªããããšã¯ãããŸããã
èŠããã«ãç§ã¯ãã§ã«ããããã®Reactã¢ããªãæ¬çªç°å¢ã«çœ®ããŠããã®ã§ãç§ã®ããã«åããŠããåé¿çãæã£ãŠããã®ã§ããã¹ããã©ã¯ãã£ã¹ã¯ããã°æçš¿ã«æé©ãããããŸãããããã®åé¡ã®è°è«ã®ã©ã€ã³ãšããŠãããã䜿çšãããšããã®åé¡ã®çã®ç®çã«é¢ããçã®è°è«ïŒReact APIãæ¹åããæ¹æ³ïŒãã®åé¡ã§ã¯ãå°éå ·ã®ãŠãŒã¹ã±ãŒã¹ãšå®åæã«éå®ãããŸãïŒã
React 1.0ã¯ãçãäžã§ã¯ãªããäžãç®æãå¿ èŠããããŸãã ã¡ãžã£ãŒããŒãžã§ã³ã®å¢å ã¯äžäœäºææ§ãæãªãå¯èœæ§ãããããã0.xããŒãžã§ã³ã䜿çšããŠããããããã¹ãŠã®å¹ŽããåŠãã ããšã«åºã¥ããŠå¯èœãªéãæé«ã®APIãæ¢ããŸãããã
ïŒåèïŒäººã ã¯çŸåšã®APIã«ã€ããŠæããããããã«ããã«æ¥ãŠããªãã®ã§ãããªããæãã§ããã»ã©ããªãã®äŸã«é¢äžããŠããªããããããŸãããã圌ãã¯APIã®æ¹åãæ¢ããŠãã/æãã§ããããã§ããåæã§ãããšèªèãããå¯èœæ§ããããŸããããããã«ãããŠããŸãïŒ
人ã ã¯çŸåšã®APIã«ã€ããŠæããããããã«ããã«æ¥ãŠããªãã®ã§ãããªããæãã§ããã»ã©ããªãã®äŸã«é¢äžããŠããªããããããªããšæããŸããã圌ãã¯APIã®æ¹åãæ¢ããŠãã/æãã§ããããã§ã
ããŠãããªãã¯APIæ¹åææ¡ãæã£ãŠããŸãããããããããªãã¯ãReactã®ãã¹ããã©ã¯ãã£ã¹ãããããé¢ããã³ãŒãã瀺ããŠããŸãã ããã€ãã®ããšã¯ææªã®æ
£è¡ã«éåžžã«ãã䌌ãŠããããã§ãã 次ã«ãããããå€æŽã®çç±ã§ãããšèšããŸãã ã¯ãããããå€æŽã®çç±ã§ãããReactã³ãŒãããŒã¹ã«ã¯ãããŸããã
ã³ãŒããåç·šæããŠReactã§ããŸãæ©èœããããã«ããæ¹æ³ã瀺ããŸãããé©åãªäœ¿çšæ³ã®ã·ã§ãŒã±ãŒã¹ãç¡èŠããŠã䞻匵ãç¶ããŸãã ããã¯å»ºèšçãªè°è«ã§ã¯ãªãããã§ãã
æ®å¿µãªãããã¯ã©ã€ã¢ã³ãã³ãŒãã§React APIãåé¿ããæ¹æ³ãæäŸããŠããåé¡ã®æ ¹æ¬çãªåå ã«å¯ŸåŠã§ããŸããã
äœã¬ãã«ã®APIãé«ã¬ãã«ã®APIã§ã©ããããå Žåãããã¯åé¿çã§ã¯ãããŸããããäžè¬çãªæ¹æ³ã§ãã å€ãã®åªãããã¬ãŒã ã¯ãŒã¯ããã®èãã«åŸããŸãã
ç§ãèšãç¶ããŠããã®ã¯ãæ¢åã®éãAPIãã䜿çšããŠå
±æããããã®ã§ã©ããããããšã§ãã 䜿çšäŸãšèª¬æãšãšãã«ããªããããè¯ããªã£ãã®ãã¯ä¿¡ããããªãã§ãããã
ç¹°ãè¿ããŸãããç§ã¯ããªãããããããªãçç±ãããããŸããã ããªãã話ããŠããããšãäžè¬çãªåé¡ã§ããå Žåãããã¯å€ãã®äººã
ã«ãšã£ãŠå€§ããªå©ãã«ãªãã§ãããã
ç§ã¯æ¬çªç°å¢ã«ããããã®Reactã¢ããªãæã£ãŠããã®ã§ããã¹ããã©ã¯ãã£ã¹ã¯ããã°æçš¿ã«æé©ãããããŸãããããã®å·ã®è°è«ã®ã©ã€ã³ãšããŠãããã䜿çšãããšãå®éã®è°è«ããç§ãã¡ãé ãããããšã«ãªããŸã
APIãèšèš/èšèšãããšãã«ããè¡ãããšã¯ãåé¡ã®äºæž¬ããŠãŒã¹ã±ãŒã¹ã«ã€ããŠã®ä»®èª¬ãªã©ã§ãã人ã ã仮説ãç«ãŠãçç±ã¯ãçæ³ãæ±ããŠçŸå®ã®äžçããèªåèªèº«ãæœè±¡åããããšããããã§ã¯ãããŸããã çµéšäžè¶³ã§ãããäºåã«ãçµéšãç©ãããšã¯ã§ããŸããã
ããªãã¯ãã®çµéšããããå®éã®åé¡ãèŠãŠããŸããããããŠããªããå ±æã§ããããã€ãã®åé¿çããããšèšããŸãã ãããããããã®è°è«ããçŸå®çããã€ãå¹æçãã«å€ããããšãã§ãããã®ã§ãã Reactèªäœã¯ãå®éã®åé¡ãšèª²é¡ã«åºã¥ããŠæ§ç¯ãããŠããŸãããã®ããããHello Worldã3è¡ã§èšè¿°ããæ¹æ³ãã ãã§ãªããå®éã®ã¢ãŒããã¯ãã£ã®åé¡ã解決ããŸãã
@ me-andreç§ã¯ããªãã®èšãããšãèããããªãã®è°è«ã®ç·ã¯æ確ã§ãã
ç§ã®è°è«ã®äžå¿ã¯ãçŸåšã®React APIã䜿çšããéåçãªçµéšã«åºã¥ããŠããè¯ãååã確ç«ããããã€ãã®åºæ¬çãªæ¹æ³ã§APIãå€æŽããå¯èœæ§ã®ããéç¬æçãªãœãªã¥ãŒã·ã§ã³ãå«ããããã«è°è«ãéãå Žåãç§ãã¡ã¯ã§ãããããã¹ãã§ãããšããããšã§ãã React APIãæ¹åããŠãçŸåšãããããã«åªãããã®ã«ããæ©äŒãã€ãã¿ãŸãã æ¹åã®äœå°ããããšãã¯ãç§ãã¡ã®æ å ã«çãããŠã¯ãããŸããïŒ
å°éå ·ã«é¢ããçŸåšã®ReactAPIãã©ã®ããã«è©äŸ¡ããŸããïŒ ïŒæåã®æ瞟ã䜿çšãããšããŸãããïŒFããA +ïŒããªãããããŠãããA +æªæºã®å Žåããããæ¹åããããã«äœãããŸããïŒ
@ me-andreã©ã³ãã³ã°ãšåæãæºåããæ©äŒããããŸãããïŒ çŸåšã®APIã®é·æãçæãæ©äŒã«ã€ããŠãããªããä¿¡ããŠããããšãèããããšæããŸãã
+1
+1ãé¡ãããŸã
åé¿çã¯ãããŸããïŒ ComponentDidReceivePropsãå¿ èŠã§ã
ç§ã¯1幎以äžåã«ãã®åé¡ãäœæãããã以æ¥æ¯æ¥Reactã䜿çšããŠããŸãã APIãå¢ããããšãæ£åœåããcomponentDidReceivePropsã®ãŠãŒã¹ã±ãŒã¹ã¯ãããªããšæããŸãã
@AlexCppnsäœãããããšããŠããã®ã§ããïŒ
@iammerrick ãå®éã«ã¯å€§äžå€«ã§ã
é¢é£ãããã£ã¹ã«ãã·ã§ã³ïŒ https ïŒ
ç§ã¯ããã«æ°åééããŸããããããŠç§ããã£ãããšã¯æ¬¡ã®ãšããã§ããïŒ
componentWillReceiveProps(nextProps) {
if (this.props.foo !== nextProps.foo) this.needsUpdate = true;
}
componentDidUpdate() {
if (this.needsUpdate) {
this.needsUpdate = false;
// update the dom
}
}
æªããªãã§ãã
@brigand ããã©ã°ã¯å¿
èŠãããŸãã- componentDidUpdate()
å
ã®å°éå
·ãæ¯èŒã§ããŸãïŒ
componentDidUpdate(prevProps) {
let needsUpdate = prevProps.foo !== this.props.foo;
// ...whatever
}
ããã«ããœãªã¥ãŒã·ã§ã³ã¯shouldComponentUpdate()
ã«ãã£ãŠç°¡åã«ç Žãããå¯èœæ§ããããåã¬ã³ããªã³ã°ã劚ããããå¯èœæ§ããããŸãã
ãã£ããããããããšãïŒ
@jimfb以äžã®åæãŠãŒã¹ã±ãŒã¹ããããšæããŸãã componetDidReceiveProps
ã¯ããã«ãŽã£ããã ã£ããšæããŸãã
componentDidMount() {
this._selectAll()
}
componentDidUpdate(prevProps) {
let shouldUpdateSelected = (prevProps.recordTypeFilter !== this.props.recordTypeFilter) ||
(prevProps.statusFilter !== this.props.statusFilter) ||
(prevProps.list !== this.props.list)
if (shouldUpdateSelected) { this._selectAll() }
}
_selectAll() {
this.setState({ selectedIds: this._getFilteredOrders().map((order) => ( order.id )) })
}
_getFilteredOrders() {
let filteredOrders = this.props.list
// recordTypeFilter
let recordTypeFilter = this.props.recordTypeFilter
filteredOrders = _.filter(filteredOrders, (order) => {
// somelogic
})
// statusFilter
let statusFilter = this.props.statusFilter
filteredOrders = _.filter(filteredOrders, (order) => {
// somelogic
})
return filteredOrders
}
@chanakasan ãããªãã®äŸã«ã¯render()
ã¡ãœããããã
次ã«ãã³ãŒãã¯ããã€ãã®ã«ã¹ã¿ã ããžãã¹ããžãã¯ã«æ¥ç¶ãããŠãããèªã¿ããããããŸããã ä»ã®äººã«ã³ããŒïŒããŒã¹ããæããã ãã§ãªãã説æããããšãèºèºããªãã§ãã ããã
ããããç§ã¯ããªãã®äŸãèªã¿ãŸããããããŠä»¥äžã®èããå
±æããããšæããŸãïŒ
componentDidUpdate
ã§ã¯ãªãã componentWillReceiveProps
ã®äœ¿çšäŸã§ãã componentWillReceiveProps
ã«åãæ¿ãããšãåãããžãã¯ãç¶æããªãããã³ã³ããŒãã³ãã®åã¬ã³ããªã³ã°ã2åå°ãªããªããŸãã ãã®ãã£ã¹ã«ãã·ã§ã³ãé¢ããŠãã1幎çµã£ãä»ã§ããDOMã®å€æŽã«å¯Ÿå¿ããããšãé€ããŠã componentDidUpdate
ãŠãŒã¹ã±ãŒã¹ã¯ãããŸãããthis.state.selectedIds
ã¯å®éã«ã¯ç¶æ
ã§ã¯ãªããããããã¯ããŸã£ããåé¿ãããã¹ãŠã®ããžãã¯ãrender()
ã¡ãœããã«ç§»åãã/ã¹ããŒãã¬ã¹ã³ã³ããŒãã³ãã«ç§»è¡ããæ¹ãã¯ããã«åªããŠããŸãã ããã¯çŽç²ã«å°éå
·ããèšç®ãããŸããããã«ã¡ã¯@ me-andreãè¿ä¿¡ã«æéãå²ããŠããã ãããããšãããããŸãã ãã®ããŒãžã®ãã£ã¹ã«ãã·ã§ã³ãèªã¿ãŸãããåå ããŠããã ãããããšãããããŸãã
ã¯ãã componentDidReceiveProps
ã¯å¿
èŠãããŸããããããããªããšç©äºã¯äžæè°ã«æããŸãã
componentWillReceiveProps
ã䜿çšãããšã your component would re-render twice as less
ãšèšãããŸããã ããã¯ãŸã ç§ã«ã¯è¬ã§ãã
ç§ã¯ããªãã以åã«ææ¡ãã2ã€ã®ããšãèããŠè©ŠããŸãããã倱æããŸããã
_selectAll()
ããåŒã³åºããã_getFilteredOrders()
é¢æ°ã«ã¯newPropsãå¿
èŠãªãããcomponentWillReceivePropsã¯æ©èœããŸãããselectedIds
ãç¶æ
ã«ä¿åããã«å°åºããæ¹æ³ã¯èããããŸããã§ããããŠãŒã¹ã±ãŒã¹ããå®å šãªäŸãäœæããŸããã ãªãã¹ãããããããããŸããã
ãããããã°ãã芧ã«ãªããæ£ããæ¹åã«åããŠãã ããã ãããæ£ããç解ã§ãããããã®äŸãããã°æçš¿ã§å ±æããŠãä»ã®äººã«ã圹ç«ãŠãŸãã
@chanakasan ããããããã¯æ¬çªã³ãŒãã®ããã«èŠããŸãã ç§ã¯ããããã¹ãŠèªãã§ãããªãã®ãããžã§ã¯ããç¡æã§æäŒãã€ããã¯ãããŸããã
ããããç§ã¯ããªãã«æ£ããæ¹åã瀺ãããšãã§ããŸãïŒ
componentWillReceiveProps()
ãšcomponentDidUpdate()
äž¡æ¹ããåã®å°éå
·ãšæ¬¡ã®å°éå
·ã«ã¢ã¯ã»ã¹ã§ããŸãã ããã¯å
¬åŒã®Reactããã¥ã¡ã³ãããã¯ã£ãããšããããŸããcomponentWillReceiveProps()
ã¯2åå°ãªãåã¬ã³ããªã³ã°ãããªã¬ãŒããŸãã ïŒãšã«ããcomponentWillReceiveProps()
åŸã«ã¬ã³ããªã³ã°ãè¡ãããããã setState()
ã¯æ¬¡ã®ã¬ã³ããªã³ã°ã®ç¶æ
ãæŽæ°ããã ãã§ãïŒã@ me-andreããã¥ã¡ã³ãã§ãã®è¡ã䜿çšããŠcomponentWillReceiveProps
ã«ã€ããŠã®ããªãã®ãã€ã³ããç解ããŠãããšæããŸãïŒ
this.setStateïŒïŒãåŒã³åºãã ãã§ã¯ãcomponentWillReceivePropsïŒïŒã¯åŒã³åºãããŸããã
ãã ãã componentWillReceiveProps
ã䜿çšããå Žåã®æ³šæç¹ã¯ãnextPropsãé¢æ°ã«æž¡ãå¿
èŠãããããšã§ãã
ç§ã¯ããªãã®ã¢ããã€ã¹ã«åŸãããšããŸãã ããããšãããããŸãã
ãšããã§ãç§ã®å¶äœãããžã§ã¯ããç¡æã§æäŒã£ãŠãããã®ã¯ç§ã®æå³ã§ã¯ãããŸããã§ãã:)ã ããã¯ãç§ã®ãŠãŒã¹ã±ãŒã¹ã«é¢ãã空çœãåããåã®çãäŸããã®ããå®å šãªäŸã§ãã
ãããshouldComponentUpdateãšçµã¿åãããŠäœ¿çšââãããšã©ããªããŸããïŒ
ã³ã³ããŒãã³ãã®ç¶æ
ãæŽæ°ããããåã¬ã³ããªã³ã°ãããããããªãå Žåã¯ã
ãã ããå°éå
·ãåãåã£ãåŸãthis.propsã䜿çšããŠãæåã®ã¹ã¯ãªããäœæ¥ãè¡ãå¿
èŠããããŸãã
ç§ã®åé¿çã¯ãç®çã®é¢æ°ãå®è¡ããåã«ãthis.propsãæ°ããpropsã«èšå®ããããšã§ãã
ComponentDidMountãŸãã¯ãã®ããã®ããã¯ããããšæ¬åœã«äŸ¿å©ã§ãã ã©ãããŠïŒ ãªããªããReactã®ã©ã€ããµã€ã¯ã«ã«äŸåããªãä»ã®èšç®ãè¡ãå¿ èŠãããå Žåãããããã§ãã
äŸïŒãµã€ãºå€æŽãããå¯èœæ§ã®ãã芪ã³ã³ããŒãã³ãããããŸãã åã³ã³ããŒãã³ãã¯ããããã®ãµã€ãºå€æŽãæ åœããé¢æ°ãæã€OpenLayerããããã¬ã³ããªã³ã°ãã責任ããããŸãã ãã ããåã芪ããå°éå ·ãååŸããReactã©ã€ããµã€ã¯ã«å ã§ä»ã®èšç®ãã³ãããããåŸã«çºçããå¿ èŠããããŸãã
æãåèã«ãªãã³ã¡ã³ã
@syranideåé¡ã¯ãã»ããã¢ãããå°éå ·ãå¿ èŠãšããã¡ãœãããåŒã³åºãå¿ èŠãããå Žåã§ããããã¯ãå°éå ·ãå¿ èŠãšããã¡ãœãããåŒã³åºãå¿ èŠããããŸã...æçµçã«ãã³ã³ããŒãã³ãå šäœãå°éå ·ã®åšãã«é 管ãããŸãã