this.context
ãæ£åŒã«ååšããªãããšã¯ç¥ã£ãŠããŸãããããªãã®æ°ã®ã©ã€ãã©ãªãããã«äŸåããŠãããïŒ2509ã§åœ¢ã«ãªãã€ã€ããããã§ãã
context
ã念é ã«çœ®ããŠshouldComponentUpdate
ãã©ã®ããã«å®è£
ãããã®ããæ£ç¢ºã«ç解ããããšããŠããŸãã 3çªç®ã®åŒæ°ïŒ nextContext
ïŒãåãå
¥ãã PureRenderMixin
ãæ¡åŒµããŠãã§ãã¯ããããšãã§ããŸãã
shouldComponentUpdate: function(nextProps, nextState, nextContext) {
return !shallowEqual(this.props, nextProps) ||
!shallowEqual(this.state, nextState) ||
!shallowEqual(this.context, nextContext); // this will throw without context, read on
}
contextTypes
ãçç¥ããã«this.context
ãªããã€ã³ããªãã³ã³ããŒãã³ãã¯ããã®3çªç®ã®åŒæ°ãååŸããŸãããããã¯ç解ã§ããŸãã
ãã ãã <Top />
ã³ã³ããã¹ãææè
ãš<Bottom />
ã³ã³ããã¹ãã³ã³ã·ã¥ãŒããŒã®éã«<Middle />
ã³ã³ããŒãã³ããããå Žåãããã¯åé¡ãåŒãèµ·ãããŸãã <Middle />
ãå¶éçãªshouldComponentUpdate
<Middle />
å®è£
ããŠããå Žåã <Bottom />
ã<Top />
ã®ã³ã³ããã¹ãæŽæ°ã«åå¿ããæ¹æ³ã¯ãŸã£ãããããŸããã
ïŒãã£ãã«ïŒ
var Bottom = React.createClass({
contextTypes: {
number: React.PropTypes.number.isRequired
},
render: function () {
return <h1>{this.context.number}</h1>
}
});
var Middle = React.createClass({
shouldComponentUpdate: function (nextProps, nextState, nextContext) {
return false;
},
render: function () {
return <Bottom />;
}
});
var Top = React.createClass({
childContextTypes: {
number: React.PropTypes.number.isRequired
},
getInitialState: function () {
return { number: 0 };
},
getChildContext: function () {
return { number: this.state.number };
},
componentDidMount: function () {
setInterval(function () {
this.setState({
number: this.state.number + 1
});
}.bind(this), 1000);
},
render: function() {
return <Middle />;
}
});
React.render(<Top />, document.body);
Middle
ã¯ãéžæããªãéãthis.context
ãªããããäžèšã®ããã«Middle
ã«äžè¬çãªã³ã³ããã¹ãèªèshouldComponentUpdate
ãäžããããšãããšãåãåé¡ãçºçããŸããã«ã
ããã¯ã contextTypes
ãMiddle
ã«è¿œå ããããšã§åé¿ã§ããŸãããé©åãªè§£æ±ºçãšã¯æããŸããã ã¹ããŒããªshouldComponentUpdate
䜿çšããŠããã¹ãŠã®ã¬ãã«ã«å¿
èŠãªcontextTypes
ãæ瀺çã«è¿œå ããå¿
èŠããããããç°¡åã«ã¹ãªããããŠããŸããŸãã
ããã¯ïŒ2112ã§è§£æ±ºãããŸããïŒ ãã®éã«å¥ã®è§£æ±ºçã¯ãããŸããïŒ æšå¥šãããæ¹æ³ã¯äœã§ããïŒ
ããã¯éåžžã«è¯ã質åã§ãã ãããäžããŠãããŠããããšãïŒ
ããã¯ãããªãŒã®åèšç®ãæåã§ãã«ãŒãã³ã°/æé©åããå Žåã§ãã èšç®ã«é¢é£ããã³ã³ããã¹ãå€æ°ãžã®ã¢ã¯ã»ã¹ãèŠæ±ããå¿ èŠãããããã«æãããŸãã å¿ èŠã«å¿ããŠãå®å šãªã³ã³ããã¹ãïŒãŸãã¯å®å šãªã³ã³ããã¹ãïŒã®ããã·ã¥ãæž¡ããªã©ãä»ã®åã£ãããšãè¡ãããšãæ€èšã§ããŸãã
@ sebmarkbage-èãïŒ
ãããåé¡ã¯ãäžéã®ã³ã³ããŒãã³ãããé ãã®åäŸãã©ã®ãããªã³ã³ããã¹ããå¿
èŠãšããããç¥ããªãããšã§ãã ã©ã®contextTypes
ã宣èšããŠã shouldComponentUpdate
ãæ£ããå®è£
ã§ããããç¥ãæ¹æ³ã¯ãããŸããã
éäžã§åœã®shouldComponentUpdate
ã«ãã£ãŠãããã¯ãããããšãªããã³ã³ããã¹ãã®äŒæãå¥ã®ããªãŒãã©ããŒãµã«ã§çºçããå¯èœæ§ãããã®ã§ããããã
åºæ¬çã«ã芪ã®ã³ã³ããã¹ããå€æŽããããšãã©ãã»ã©é¢ããŠããŠãããã®ã³ã³ããã¹ããåãåããã¹ãŠã®åå«ãããŒãã£ãšããŠããŒã¯ããå¿
èŠããããŸãã ç¥å
ã®ã³ã³ããã¹ãã®å€æŽã¯ããã®ã³ã³ããã¹ãããªããã€ã³ããåå«ã®ç¶æ
ã®å€æŽãšåãå¹æãæã€ã¯ãã§ãã芪ã®çºèšã«é¢ä¿ãªããæ°ããcontext
ãåãåãå¿
èŠããããŸãã
@gaearonãã®å Žåããã¹ãŠãåã¬ã³ããªã³ã°ããå¿
èŠããããšæããŸãããã®ããã shouldComponentUpdate
ã¯ãµãããªãŒãæåãããå¹æããããŸããã ããããªããšãã³ã³ããã¹ããèŠçŽ ããªãŒãšççŸããç¶æ
ã«ãªããŸãã
@andreypopp
äžéã³ã³ããŒãã³ãã®shouldComponentUpdate
ã¯ãæ°ããç¶æ
ãåãåããã©ããã«åœ±é¿ããªãã®ãšåãããã«ãåå«ãæ°ããã³ã³ããã¹ããåãåããã©ããã«åœ±é¿ããªãã¯ãã ãšæããŸãã
http://jsbin.com/geseduneso/2/edit?jsãoutput
ïŒãã®å Žåãäž¡æ¹ã®æ°å€ãå¢å ããŸãïŒ
ççŸã¯ã©ãã«ãããŸããïŒ
èšãæãããšãç§ã¯æããŸãcontext
ã³ã³ããã¹ãã®ææè
ã¯ããã®çµæãã®äžã«ãã¹ãã¢ãã®ãããªãã®ããã£ãå ŽåãšãŸã£ããåãåäœããã¯ãã§ãgetChildContext()
ã§æžã蟌ãŸããŸãcomponentWillUpdate
ããããŠã contextTypes
ã§ãã®ã³ã³ããã¹ãããããŒã宣èšãããã¹ãŠã®åå«ã³ã³ããã¹ãã³ã³ã·ã¥ãŒããŒã¯ããããããã®ãã¹ãã¢ãã«ãµãã¹ã¯ã©ã€ãããŠèªåã®ç¶æ
ãæŽæ°ãããã®ããã«ããã®ã³ã³ããã¹ããåãåãå¿
èŠããããŸãã
å®éã®å®è£
ãæå³ããããã§ã¯ãããŸãããããã®ã¢ãã«ããäžå€®ã«shouldComponentUpdate
ãããFluxã¢ããªãããäžè²«æ§ããªãããšã瀺ããããšæããŸãã ã³ã³ããã¹ãã¯ããµã€ããŠã§ã€ã¹ãã¬ãŒãžãã®ããã«æ©èœããå¿
èŠããããŸãããã¹ã³ãŒãã¯ãµãããªãŒã§ãã
ç·šéïŒèŠªãå€æŽãããå¯èœæ§ããããããããã¯æ©èœããŸãã
ç§ã¯IRCã§Glenjaminãšè©±ãããŸãããã圌ã¯ã³ã³ããã¹ããå€æŽããããšèªäœãæªãèããããããªããšç¢ºä¿¡ããŸããã ã«ãŒãã®æŽæ°ã«ãã£ãŠæé»çã«ç°ãªãåã®æŽæ°ãçºçããå ŽåãäœããæŽæ°ãããçç±ãæšè«ããããšãã§ããªããªããŸãã
ããããç§ãèŠãå¯äžã®åççãªè§£æ±ºçã¯ãã³ã³ããã¹ãã®å€æŽãå®å
šã«çŠæ¢ããããšã§ãã ã€ãŸãã getChildContext()
ãgetInitialState()
ãšåæ§ã«ããŸããããã¯ãã³ã³ããŒãã³ããããŠã³ããããåã«1åã ãåŒã³åºãããŸãã
ããã«ãããã³ã³ããã¹ãã«ã€ããŠèããã®ãéåžžã«ç°¡åã«ãªããŸãã ã³ã³ããã¹ããæŽæ°ãããªãããã shouldComponentUpdate
ãã3çªç®ã®ãã©ã¡ãŒã¿ãŒãåé€ã§ããŸãã
ã³ã³ããã¹ãææè
ããã®æŽæ°ã_å¿
èŠ_ãªå ŽåïŒããšãã°ãreact-routerãActiveState
mixin cc @mjacksonã§äœ¿çšããããã«activeRoutes
ããããããŠã³ã§æž¡ãããšãæãã§ããå ŽåïŒã { addChangeListener, removeChangeListener, getActiveRoutes }
ãæž¡ãããšã劚ãããã®ã¯äœããããŸããã context
ã åå«ã¯å€æŽããµãã¹ã¯ã©ã€ãããŠstate
å
¥ããããšãã§ããããã«ãªããŸããã
ããã¯åççãªè§£æ±ºçã§ããïŒ
çããã¹ãéèŠãªè³ªåã¯æ¬¡ã®ãšããã§ãã
ã©ã®ã·ããªãªã§ã
props
ãä»ããŠããŒã¿ãæž¡ãããã³ã³ããŒãã³ããç¬èªã®setState
åŒã³åºãããã«ã€ãã³ããããªã¬ãŒããããããcontext
ãä»ããŠ_data_ãæž¡ãæ¹ãæãŸããã§ãã
ç§ã¯ãªããžã§ã¯ãåç
§ãæž¡ãããã«ã³ã³ããã¹ãã䜿çšããŠããŸãããç§ã¯ãããã®ãªããžã§ã¯ãã«æžã蟌ãã ãã§ãèªã¿åãããšã¯ãªãããã§ãã äŸãã°ã this.context.triggerAction("something")
ã³ã³ããã¹ãã®ãŠãŒã¹ã±ãŒã¹ã¯ãæœåšçã«å€§ããªãµãããªãŒå šäœã«é©çšã§ããããããäžè¬çãªã³ã³ãããŒããŒããééãããããªããã©ã¡ãŒã¿ãŒã®å Žåã§ãã äŸãšããŠãã«ã©ãŒããŒãããããŸãããã®ããŒãã§ã¯ãå€æ°ã®ããŒãããèæ¯è²ãçœãé»ãã確èªããããã«ãªãã¹ã³ããå ŽåããããŸãã ãããããã©ã¡ãŒã¿ãšããŠã©ãã«ã§ãæž¡ããããªãã§ãããã
getChildContextïŒïŒãgetInitialStateïŒïŒã®ããã«åäœãããŠããå®éã«ã¯åé¡ã¯è§£æ±ºããŸãããããã¯ãç¹å®ã®ã³ã³ããã¹ãå€ãæäŸãã芪ããŒãããå¥ã®ã³ã³ããã¹ãå€ãæäŸããå¥ã®èŠªããŒãã«ãã€ã§ã眮ãæããããšãã§ããããã§ãã 圱é¿ãåãããµãããªãŒã®å Žåãããã¯ã³ã³ããã¹ãå€æ°ã®å€ãå€æŽããããšãšåºå¥ãã€ããŸããã
ãŠãŒã¶ãŒãå€æŽãªã¹ããŒãæ¥ç¶ããããšãåé¿ãã解決çãèŠã€ããããšãã§ãããšæããŸãã
@andreypoppã¯æ£ãããããããªããšæããŸãã ãŸãã¯ãå°ãªããšããshouldComponentUpdateãã³ã³ããã¹ãå ã®äœããå€æŽããããã©ãããç¥ãæ¹æ³ãæäŸããå¿ èŠããããŸããããã«ãããã³ã³ããã¹ãå€æ°ãå€æŽãããå Žåã«åžžã«trueãè¿ãããã«æ±ºå®ã§ããŸãã
ä»æ¥ã®åŸåã«@sebmarkbageãšãã£ããããŠã圌ã®èãã確èªããŸãã
getChildContextïŒïŒãgetInitialStateïŒïŒã®ããã«åäœãããŠããå®éã«ã¯åé¡ã¯è§£æ±ºããŸãããããã¯ãç¹å®ã®ã³ã³ããã¹ãå€ãæäŸãã芪ããŒãããå¥ã®ã³ã³ããã¹ãå€ãæäŸããå¥ã®èŠªããŒãã«ãã€ã§ã眮ãæããããšãã§ããããã§ãã 圱é¿ãåãããµãããªãŒã®å Žåãããã¯ã³ã³ããã¹ãå€æ°ã®å€ãå€æŽããããšãšåºå¥ãã€ããŸããã
çãã ããªãã¯å®å šã«æ£ããã§ããç§ã¯ãããèæ ®ããŠããŸããã
@jsfbèãçŽããŠã¿ããšãããªãã®ã³ã¡ã³ããããããããŸããã 芪ããŒãã眮ãæãããšããšã«ããåãµãããªãŒå šäœãåããŠã³ããããŸããã
çŸåšãã¯ããåããŠã³ããããŸãããããã¯éšåçã«å®è£ ã®è©³çŽ°ã§ãã ããŒãã®ç¶æ ã倱ãããšãªããµãããªãŒã®èŠªãå€æŽããããšãæ³åã§ããŸãïŒãããŠããã®å®è£ ãšåœ±é¿ã«ã€ããŠèª¬æããŠããŸããïŒã
@sebmarkbageãšç§ã¯ãã£ãããã次ã®çµè«ã«éããŸããã
@sebmarkbage ãäœãèŠéããããšãããã°æããŠãã ããïŒ
ã§ãè¯ãè°è«ã§ãïŒ ãã¹ãŠã®ãã£ãŒãããã¯ãããããšãïŒ
ããã«ã€ããŠè°è«ããããã«æéãå²ããŠããã ãããããšãããããŸãïŒ
ã©ã®ããããã£ã䜿çšãããŠããããããã³ããããã©ã®ããã«äœ¿çšãããŠãããããã§ã«ç¥ã£ãŠããå¿ èŠããããããã©ã®ã³ã³ããã¹ãå€æ°ã䜿çšãããŠããããç¥ã£ãŠãããšæ³å®ããã®ã¯äžåçã§ã¯ãããŸããã
ãããã¬ãã«ã®Feed
ã³ã³ããŒãã³ããPureRenderMixin
ã䜿çšããŠshouldComponentUpdate
å®è£
ããäœåãªæŽæ°ãåé¿ããå Žåã Feed
ããã®äžã®ã©ããã§ãããç¥ã£ãŠãããšããæå³ã§ã¯ãããŸãããã¯Cell
ã§ãããã«ãŒã¿ãŒã®ã³ã³ããã¹ãã«å¿ããŠLink
ãå«ãŸããŠããŸãã
ãã¬ãŒã ã¯ãŒã¯ïŒæã人æ°ã®ããReactã«ãŒãã£ã³ã°ãã¬ãŒã ã¯ãŒã¯ãªã©ïŒãã³ã³ããã¹ãã䜿çšããŠããå Žåãããã¯ããã«æªåããããªãã¯ããã«æ°ã¥ããªããããããŸããã ã©ããã§ã誰ãæé©åããããããã¬ãã«ã®ã³ã³ããŒãã³ãã®ã§ãã¢ã¯ãã£ããªã³ã¯ç¶æ
ãå€æŽããæåéãã圌ãã察å¿ãã宣èšããªããã°ãªããªãã£ã_no idea_æã£ãŠããããŸããã¢ããªã±ãŒã·ã§ã³ãããcontextTypes
_even get_ã¡ãœããã«nextContext
èªåã§shouldComponentUpdate
ã
ã³ã³ããŒãã³ãã_ãã¹ãŠã®å¯èœãªåå«_ãèªèããæ¹æ³ã¯ãããŸããã åºæ¬çã«ãã³ã³ããã¹ãäŸåã³ã³ããŒãã³ããPureRenderMixin
察å¿ã³ã³ããŒãã³ãå
ã®ã©ããã«ç§»åãããšãå£ããŸãããéåžžã«åŸ®åŠã§ãã ãããã£ãŠãã³ã³ããã¹ãã䜿çšããå Žåããã®ç¡é¢ä¿ãªã³ã³ããŒãã³ãã®åŸ®åŠãªç Žæãåé¿ããå¯äžã®æ¹æ³ã¯ã Reactãèšã£ãŠããããšã«åããå®è£
ããªãããšã§ãã
@swannodetteã®Omãªã©ãReactã®äžã«ããããã€ãã®ãã¬ãŒã ã¯ãŒã¯ã¯ã PureRenderMixin
-ish shouldComponentUpdate
_default_ãäœæããŸããããã®ããã«ããããåãåãã®ã¯å¥åŠã§ãã ã€ãŸãããã¹ãŠã®ã³ã³ããŒãã³ãã§ã³ã³ããã¹ããå£ãshouldComponentUpdate
ãæå³ããŸãã
ãããããªãã®ä»äºã劚ããŠããªãããšã«ã¯åæããŸãããæèã䜿çšããå ŽåãçŸåšã®ç¶æ³ãæºè¶³ã®ãããã®ã§ããããšã«åæããããšã¯ã§ããŸããã çŸåšãã³ã³ããã¹ãã䜿çšããŠshouldComponentUpdate
ãå®è£
ããã®ã¯_é£ãã_ã ãã§ã¯ãããŸãããåã³ã³ããŒãã³ãããã®children
ãäœã§ããããåžžã«èªèããŠãããšä»®å®ããªãéãããŸã£ããäžå¯èœã§ãã
人æ°ã®ããã©ã€ãã©ãªã¯ãã§ã«ã³ã³ããã¹ãã«å€§ããäŸåããŠããŸãã ãµããŒããããŠããæ©èœã§ã¯ãªãããšã¯ç解ããŠããŸãããç§ã®æèŠã§ã¯ã shouldComponentUpdate
ã§æ©èœãããã«ã¯ãå°ãªããšã_å¯èœ_ã§ããå¿
èŠããããŸãããŸãã¯ãç¡å¹ã«ããŠãã©ã€ãã©ãªã§äœ¿çšããªãããã«åŒ·å¶ããå¿
èŠããããŸãã埮åŠã«å£ããŠããŸãã
ããã¯ãå°å ¥ãããã³ã³ããã¹ãã§æåããç¥ãããŠããŸãã ç¹å¥ãªã±ãŒã¹ãèŠã€ããããã«ããããå埩ã§ããããã«ããããã«ãå®éšçãªæ©èœãšããŠææžåãããŠããªããµããŒããããŠããªãæ©èœãæã€ããšãã§ããå¿ èŠããããŸãã ããšãã°ãã³ã³ããã¹ãããªãã£ãå Žåãææè ããŒã¹ã§ã¯ãªãã³ã³ããããŒã¹ã«å€æŽããå¿ èŠãããããšã¯ããããŸããã§ããã 埮åŠãªç Žæã¯ãææžåãããŠããªãæ©èœã䜿çšããå¥çŽã®äžéšã§ãã
芪ããªãŒã®ã©ããã«æ°ããã³ã³ããã¹ããããå Žåã¯ã shouldComponentUpdate
ãã€ãã¹ããå¿
èŠããããšæããŸãã shouldUpdateChildContext
ãŸãã¯ããµãããªãŒå
šäœã調æŽããå¿
èŠããããã©ããã決å®ããäœãã䜿çšããå¯èœæ§ããããŸãã
@sebmarkbage
ã³ã³ããã¹ããé »ç¹ã«å€æŽãããããšã¯ã»ãšãã©ãªããããããã¯æ©èœãããšæããŸãã
ãã®å Žåã shouldComponentUpdate
ã¯3çªç®ã®ãã©ã¡ãŒã¿ãŒãå¿
èŠãšããŸãããã
æ£è§£ã§ããããã¯ãã€ãã¡ãã£ãšåœ¹ã«ç«ããªãã£ãã§ãã
芪ããªãŒã®ã©ããã«æ°ããã³ã³ããã¹ããããå Žåã¯ãshouldComponentUpdateããã€ãã¹ããå¿ èŠããããšæããŸãã
ããã¯éåžžã«çã«ããªã£ãŠããŸãã 芪ã®ã³ã³ããã¹ãå€æŽã¯ããµãããªãŒã®åœã®shouldComponentUpdate
ããªãŒããŒã©ã€ãããå¿
èŠããããŸãã
ããããããã¯çåãæããããŸãïŒã³ã³ããã¹ãããã€å€åããããã©ããã£ãŠç¥ãã®ã§ããïŒ å·ãšå°éå
·ã«ã¯ã setState
ãšrender
/ setProps
ãŸãã render
ãåŒã³åºããããã³ã«ãçŸåšã®ã³ã³ããã¹ãã®ã³ããŒãã©ããã«ä¿æãã getChildContext
ã®çµæãšæ¯èŒããå¿
èŠãããããã§ãã
ã¹ãã¢åç
§ã管çããæ¹æ³ãšããŠã³ã³ããã¹ãã䜿çšããŠããŸãã å¿
èŠãªã¹ãã¢ãæ瀺çã«å®çŸ©ã§ããã®ã§ãããã奜ãã§ãã
1ïŒã³ã³ããŒãã³ãããã¹ãããå¿
èŠãããã¹ãã¢ã ãã§ãµã³ãã«ããŒã¿ãã¢ãã¯ã¢ãŠãã§ãããã倧ããªãã¬ãŒã ã¯ãŒã¯ãã€ã³ã¹ã¿ã³ã¹åããå¿
èŠããªããªããŸãã
2ïŒãµãŒããŒåŽã¬ã³ããªã³ã°çšã®æ¢ç¥ã®ããŒã¿ãå«ãåçŽãªèªã¿åãå°çšã¹ãã¢ãæž¡ããŸããããã«ãããã¢ããªã±ãŒã·ã§ã³ã³ãŒãã®å€§éšåã䜿çšãããªãããããµãŒããŒåŽã®ã±ãŒã¹ãåçŽåãããŸãã
ã ãããäŸãèŠãŠã
ç§ã®å®è£ ã§ã¯ãã¹ãã¢ããŒã¿ã¯ã²ãã¿ãŒãä»ããŠã®ã¿ã¢ã¯ã»ã¹ãããŸãã ç§ã®èŠçŽ ã¯ã¹ãã¢ããŒã¿ããã£ãã·ã¥ããŸããã ç§ã¯çå®ã®åäžã®ããŒãžã§ã³ã欲ããã§ãã åçŽãªéåæã®äŸãšããŠãç§ã®renderïŒïŒã¯é垞次ã®ãããªãã®ã«ãªããŸã
var peopleStore = this.context.peopleStore;
var person = peopleStore.get(this.props.personId);
return <div>person.fullName</div>;
ã³ã³ããŒãã³ãã¯ãªã¹ããŒãã¹ãã¢ã«æ¥ç¶ããŸãã ç²åºŠã«ã€ããŠã¯ãŸã å®å
šã«ã¯æ±ºããŠããŸããã ãã¹ãŠã®ã¹ãã¢ã«onChangeã€ãã³ãããããŸãã ããããç§ã¯ä»ã«2ã€ã®ããšã決ããŠããŸããã
1ïŒåã
ã®ããããã£å€æŽã®ãªã¹ããŒ
2ïŒåºèã«åºèãå«ããå¿
èŠãããå Žå
ãã®äŸã§ã¯ããpeopleãããfb usersãã®å Žåãããã¯å€§èŠæš¡ã§è€éãªéåæã¹ãã¢ã§ãã PersonStoreã®ã¹ãã¢æ§é ãåå©çšããå¿ èŠããããŸããïŒ 1ã€ã¯äžè¬çãªã³ã¬ã¯ã·ã§ã³ïŒgetFriendsãgetPersonãªã©ïŒçšã§ãããåã ã®å人ã®Personã¹ãã¢ã¿ã€ãã®å€ãã®äžæã®ã€ã³ã¹ã¿ã³ã¹ã§ãã
ãããã£ãŠãç§ã®äŸã§ã¯ãã³ã³ããŒãã³ãã¯ã³ã³ããã¹ããã©ã¡ãŒã¿ãšããŠPeopleã¹ãã¢ãå¿ èŠãšããŸãã 次ã«ãpersonIdããããã£ã䜿çšããŠãç¹å®ã®Personã¹ãã¢ãèå¥ããŠãµãã¹ã¯ã©ã€ãããŸãã
ããã§ãããã€ãã®åçãªå€æŽã玹ä»ããŸãã çŸåšãã°ã€ã³ããŠãããŠãŒã¶ãŒããã°ã¢ãŠãããä»ã®èª°ãããã°ã€ã³ãããšããŸããå®éã®ã¢ããªã±ãŒã·ã§ã³ã§ããŒãžããªãã€ã¬ã¯ã/æŽæ°ããå¯èœæ§ããããšããäºå®ãç¡èŠãããšããã®èŠçŽ ã¯ã©ã®ããã«æŽæ°ãããŸããïŒ ãŸãããã®èŠçŽ ããŸã ããŒãžäžã«ãããç Žå£ãããã ãã§ã¯ãªããšä»®å®ããŸãããã
ã¢ããªã±ãŒã·ã§ã³ããžãã¯ãæåã«æ¢åã®Peopleã¹ãã¢ãåé€/ç Žæ£ããããšãæåŸ ããŸãã ãã®ããã«ãç§ã®ã³ã³ããŒãã³ãã¯æŽæ°ã®ãªãã¹ã³ãåæ¢ããå¿ èŠããããŸãã ãã®ããã«ãReactClassAPIããå§ãããŸãã äŸãã°ã
onContextChangeïŒprevãnewïŒ
次ã«ãèŠçŽ ã¯2ã€ã®peopleStoreã€ã³ã¹ã¿ã³ã¹ãæ¯èŒã§ããŸãã å ¬éããŒã¿ãç¡èŠããŠãæ°ããPeopleStoreãnullã§ãããšä»®å®ããŸãããã èŠçŽ ã¯åã®ã¹ãã¢ãããµãã¹ã¯ã©ã€ãã解é€ããrenderïŒïŒãããªã¬ãŒããŸãã ã¬ã³ããªã³ã°ã§ã¯ãããŠãŒã¶ãŒäžæãã¿ã€ãã®ã¡ãã»ãŒãžã衚瀺ãããŸãã
ãŠãŒã¶ãŒãå¥ã®ãŠãŒã¶ãŒãšããŠãã°ã€ã³ãããšãæ°ããã¹ãã¢ãäœæãããèŠçŽ ãåæ¥ç¶ãããrenderïŒïŒãæ°ããããŒã¿ãåŠçããŸãã
èå°è£ã§ã¯ããthis.renderïŒïŒããåæã§ããŸããã§ããã ç§ã®ãã¶ã€ã³/äŸã®ããããããŸã£ããæå³ããªããªãããã«ããã«ã¯ãrenderïŒïŒåŒã³åºãããã¬ãŒã ã¯ãŒã¯ã«ãã£ãŠåéããäžç·ã«ãããåŠçããå¿ èŠããããŸãã
å°éå ·ãšã¯ç°ãªããã¹ãã¢ãèãããšã¯ãã¬ã³ããªã³ã°ã管çãããšããReactã®äžæ žçãªåœ¹å²ã®ç¯å²å€ã§ãã ãã®ãããshouldComponentUpdateïŒïŒã«ã³ã³ããã¹ãã®å€æŽãå«ããã¹ãã§ã¯ãªããšæããŸãã ãããŠãã³ã³ããã¹ãå€ïŒæ°ããã¹ãã¢ãªããžã§ã¯ãïŒã®å€æŽãå«ãç§ã®äŸã«ãããããããã¹ãã¢ã¯é«ã¬ãã«ã®æ§è³ªã§äžå€ã«ãªããšã¯æããŸããã å žåçãªãã©ãã¯ã¹ã¢ããªã±ãŒã·ã§ã³ã®èšèšã¯ããµãã¹ã¯ã©ã€ããŒã¢ãã«ãéåæã®ã³ãŒã«ããã¯ãªã©ã§åäœãããšæããŸããããŒã¹ã¹ãã¢ãªããžã§ã¯ãã¯éåžžãã¢ããªã±ãŒã·ã§ã³ã®åç¶æéäžåç¶ããŸãã
ããã«ã¯ããªãã®é¢å¿ããããŸãã ïŒäžèšã®åç §ãåç §ããŠãã ãããïŒ
ã¯ã@gaearon ã
ããŒã«ãªãŒãŒã·ã§ã³ããŒã¿ãã³ã³ããã¹ãã§æž¡ãããŠãŒã¶ãŒãå®è¡æã«èšèªãå€æŽã§ããããã«ãããã¹ãŠã®ã³ã³ããŒãã³ããæŽæ°ããã翻蚳ãé貚ãæ¥ä»åœ¢åŒã§åã¬ã³ããªã³ã°ã§ããããã«ããã...ç§ãç解ããŠããéããããã¯ä»ã®ãšããé£ããã
ãåç
§ããŠãã ãã
https://github.com/yahoo/react-intl/issues/58
https://github.com/facebook/react/issues/3038
@slorberã«ã¹ã¿ã PureRenderMixin
ãæ¡çšããŸãããã @ gaearonãèšãããã«ïŒãŸãã¯3çªç®ã®ãã©ã¡ãŒã¿ãŒãæ¶ããå ŽåïŒãäžå€®ã§ããå³å¯ãªshouldComponentUpdate
ãããšæããã«å£ããããšããããŸãã ãã ãããã€ã§ãå°éå
·ã«é Œãããšãã§ããŸãã ãã®åé¡ãã©ã®ããã«é²åãããèŠãŠã¿ãŸããã:)
@gpblã¯ããããã§ãã¯ããŸãïŒ
https://github.com/facebook/react/issues/3038#issuecomment -76449195
ã³ã³ããã¹ããå€æŽãããå Žåã«ã¢ããªå šäœãäžããåã¬ã³ããªã³ã°ãããå Žåã¯ãåãã€ãã³ãã«ãŒããã£ãã¯ã§ããŒããã¢ã³ããŠã³ãããã³åããŠã³ãã§ããã¡ãã€ãå¹æã¯çºçããªãããã§ãïŒåžžã«ïŒã ããã¯ããŠãŒã¶ãŒã®èšèªã®å€æŽã«å¯ŸåŠããããã®å®ç§ãªåé¿çã§ãã
@slorber unmountComponentAtNode
ãåŒã³åºããšããã¹ãŠã®ããŒã«ã«ç¶æ
ã倱ãããããããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãäœäžããŸãã
ã³ã³ããã¹ããå ¬åŒã®æ©èœãšããŠå®£èšããæãæ¥ããšæããŸãã ã«ãŒã¿ãŒãšReactIntlââãã³ã³ããã¹ãã䜿çšãããããã³ã³ããã¹ãã䜿çšããªãããšã¯ã»ãšãã©ã®äººã«ãšã£ãŠãªãã·ã§ã³ã§ã¯ãããŸããã
@cody et alãæ確ã«ããããã«ïŒã³ã³ããã¹ãã¯ãŸã å€æŽãããå¯èœæ§ããããŸãã ãŸã å®éšäžã§ãããæçµçãªAPIã決å®ãããŸã§ã¯é¿ããããšããå§ãããŸãã 䜿çšã¯ãèªèº«ã®è²¬ä»»ã§è¡ã£ãŠãã ããã ããã¯åœ¹ã«ç«ã¡ãŸããïŒããããã æºåã¯ã§ããŠããŸããïŒãããã
@codyããã¯ãããŒã«ã«ç¶æ ãhttpsïŒ/ /github.com/stample/atom-react
芪ããªãŒã®ã©ããã«æ°ããã³ã³ããã¹ããããå Žåã¯ãshouldComponentUpdateããã€ãã¹ããå¿ èŠããããšæããŸãã æœåšçã«ãshouldUpdateChildContextãŸãã¯ãµãããªãŒå šäœã調æŽããå¿ èŠããããã©ããã決å®ããäœãã䜿çšããŸãã
ã¯ãã shouldUpdateChildContext
ã¯ãããçŽ æŽããã察称çã«ããŸãã
ããã0.14ã«ãªãå¯èœæ§ã¯ãããŸããïŒ
åªããAPIãèšèšããŠå®è£ ããå Žåã :)
å®éã«å€æŽãããã³ã³ããã¹ãããŒããªãã¹ã³ããŠããåã ããå®éã«æŽæ°ãããŠããããšã確èªããæ¹æ³ãå«ããå¿ èŠããããŸãã ãã¹ãŠã®ä»£ããã«ã
ç§ãã¡ã®ãã«ã¿ã€ã ã®ã³ã¢ããŒã ã ãããããè¡ãæéããããšã¯èããããŸããã :(
2015幎4æ9æ¥ã«ã¯ã13:32ã§ããã³ã»ã¢ãã©ã¢ãç£ç£ã®[email protected]ã¯æžããŸããïŒ
ããã0.14ã«ãªãå¯èœæ§ã¯ãããŸããïŒ
â
ãã®ã¡ãŒã«ã«çŽæ¥è¿ä¿¡ããããGitHubã§è¡šç€ºããŠãã ããã
確ãã«ãèŠãŠã¿ãŸãïŒ
ç³ãèš³ãããŸããããç§ã¯ãŸã ããã«åãçµã¿å§ããæéãèŠã€ãããŸããã ä¿çäžã®ReactDnD 1.0ãªãªãŒã¹ã®åŸãç§ã¯confã®æºåã§å¿ããã®ã§ãããã«ããã«åãçµãããšãã§ããå¯èœæ§ã¯ã»ãšãã©ãããŸããã :-(
@gaearonãããããã«èŠãäºå®ã¯ãããŸããïŒ ããã¯ã³ã³ããã¹ããå®å šã«äœ¿çšå¯èœã«ããæåŸã®ããŒã¹ã®1ã€ã§ããããã«æãããã®ã§ãç§ã¯ããã«é£ã³èŸŒãããšã«èå³ããããŸãã ïŒç§ãèŠéããŠããäœãä»ã®ãã®ãããããŸãããïŒïŒ
ç§ãçåã«æã£ãŠããã®ã¯ã次ã®èšè¿°ãæ£ãããã©ããã§ãã
ã³ã³ããŒãã³ãã®åã³ã³ããã¹ãã¯ã_åžžã«_ãã®ç¶æ ã®å°éå ·ãšã³ã³ããã¹ãã®çž®å°ã§ããå¿ èŠããããŸã
ããã«ãããæ¢ç¥ã®ã©ã€ããµã€ã¯ã«å ã§ããŒã¿ã確å®ã«æµãããšãã§ããŸãã ããã¯ããã³ã³ããŒãã³ãã®ã¬ã³ããªã³ã°ã¯åžžã«ç¶æ ãšå°éå ·ã®çž®å°ã§ããããšããã¹ããŒãã¡ã³ãã«äŒŒãŠããŸãã
ããã¯ç§ãçŸåšãããæ³åããŠããæ¹æ³ã§ã-ç§ãå®å šã«ã³ãŒã¹ããå€ããŠãããã©ããã確èªããã®ã¯è¯ãããšã§ãïŒïŒ
shouldUpdateChildContext
ã¯ããµãããªãŒãæ°ããã³ã³ããã¹ãã§æŽæ°ããå¿
èŠããããã©ããã決å®ããŸãã ã©ã€ããµã€ã¯ã«ã®ãã®éšåã¯ãã³ã³ããŒãã³ãã®ç¶æ
ã®å°éå
·ãŸãã¯ã³ã³ããã¹ãã®å€æŽã«ãã£ãŠããªã¬ãŒãããŸãã
shouldComponentUpdate
ã¯3ã€ã®ãã©ã¡ãŒã¿ãŒãæ®ã£ãŠãããããäžèšã®ãµãããªãŒã®ã³ã³ããŒãã³ãã¯ãå®éã«äœããæŽæ°ããå¿
èŠããããã©ãããå€æã§ããŸãïŒæ³šïŒããã§falseãè¿ãããšã¯ããµãããªãŒãããã«æµããã³ã³ããã¹ãã«ã¯åœ±é¿ããŸããïŒ
ããã§ç§ãçåã«æã£ãŠãããã1ã€ã®ããšã¯ãå¥ã®æ°ããã©ã€ããµã€ã¯ã«ã¡ãœããcomponentWillReceiveContext
ãããã¹ããã©ããã§ãã - componentWillReceiveProps
ãšåãæéã«åŒã³åºãããŸãããã³ã³ããã¹ãããŒã¿ãããŒå
ã§ãã ããã§ã¯ããããã®äž¡æ¹ã®ã¡ãœããããåæã«ãåŒã³åºãããšãã§ããŸãã
@Chrisui
ãžã£ã³ãããŠãã ããïŒ ç§ã¯ä»ãä»ã®ãã®ã§å¿ããããŸãã
ããã«ãããæ¢ç¥ã®ã©ã€ããµã€ã¯ã«å ã§ããŒã¿ã確å®ã«æµãããšãã§ããŸãã
ãŸãã0.14ã§å®è£
ãããå Žåãšãããªãå Žåãããobserve
ããã¯ãããããšã«ã泚æããŠãã ããã ã€ãŸãã data
/ observed
/ãšåŒã°ãããã®ãäœã§ãã掟çããå Žåãšããªãå ŽåããããŸãã ããããããã¯ããããä»ã®ãšããããªãã®ä»äºãšã¯ç¡é¢ä¿ã§ãã
ç§ã®ãã©ãŒã¯ã§ããã®éåžžã«æåã®ãã©ãããæã«å
¥ããŸããããããŠããªãã¯ãããexamples/context/index.html
ã§èµ°ã£ãŠããã®ãèŠãããšãã§ããŸã
åçŽãªãã³ã³ããã¹ãã®èŠªã/ãã³ã³ããã¹ãã®åãã®é¢ä¿ãèšå®ããŸããã ãã³ã³ããã¹ãã®èŠªãã¯ãåã³ã³ããã¹ããå€æŽããå¯èœæ§ã®ããïŒã€ãŸãã childContextTypes
å®è£
ããïŒã³ã³ããŒãã³ãã§ããããã³ã³ããã¹ãã®åãã¯ãã³ã³ããã¹ãã«äŸåããããŸãã¯åã³ã³ããã¹ããå€æŽããå¯èœæ§ã®ããïŒã€ãŸãã contextTypes
å®è£
ããïŒã³ã³ããŒãã³ãã§ãã childContextTypes
ïŒã ãã®é¢ä¿ã¯ãã³ã³ããŒãã³ããçŸåšããŠã³ããããŠãããšãã«èšå®ãããŸãã
ã³ã³ããŒãã³ãã®æŽæ°ã©ã€ããµã€ã¯ã«ãæ©èœããããã«ãªããšã次ã®2ã€ã®ã±ãŒã¹ãçºçããŸãã
shouldComponentUpdate() === false
ïŒãåã³ã³ããã¹ããshouldUpdateChildContext
æŽæ°ããå¿
èŠããããã©ããã確èªããŸãã ãããtrue
ïŒããã©ã«ãïŒã®å Žåããã®ã³ã³ããŒãã³ãã«çŽæ¥ã®ãã³ã³ããã¹ãã®åããããå Žåãåã³ã³ããŒãã³ããæŽæ°ã©ã€ããµã€ã¯ã«ã«ç§»è¡ããŸãã ããã¯ãã³ã³ããã¹ãããªãŒã®æåŸã«å°éãããã shouldUpdateChildContext() === false
ééãããŸã§ç¶ããŸããééããªãç§ã¯ããã€ãã®éèŠãªãã®ãèŠéããŠããã®ã§ã誰ããç°¡åã«èŠãŠããããªãããã¯çŽ æŽãããããšã§ãã ã³ã³ããã¹ãã®ã¢ãŒããã¯ãã£ã«é¢ããã³ã¡ã³ããšãReactã³ãŒãããŒã¹ã«é©åããã³ãŒãã®å®éã®èšè¿°ãæè¿ããŸãã :)
ç°¡åãªç䌌äŸãšããŠã次ã®ããšãèæ ®ããŠãã ããã
<Root num={1}> // Gives context {num: this.props.num}
<Mid> // Ignores any context and shouldComponentUpdate() === false
<Child> // Requires context {num: propTypes.number}
æåã®ã¬ã³ããªã³ã°ïŒããŠã³ãïŒã§ã¯ããã¹ãŠãæåŸ
ã©ããã§ãã ïŒå®è£
ã®è©³çŽ°ïŒèŠªåé¢ä¿ã¯Root
ãšChild
éã«äœæãããŸãïŒ
Root
ãæŽæ°ããŠã num
å°éå
·ã®å€ã2
<Root num={2} />
Mid
ã¯shouldComponentUpdate()
ã¡ãœãããå®è£
ããŸããããã¯render()
ã¡ãœãããcontext.num
ãæ°ã«ãããä»ã«äœãå€æŽãããŠããªãããã false
ãè¿ããŸã-ã§ã¯ããªãæŽæ°ããå¿
èŠãããã®ã§ããããã
ããã¯ãå€ãå ŽåãããªãŒã®äžã®æŽæ°ããæãåºããããã Child
ã³ã³ããŒãã³ããæ°ããã³ã³ããã¹ããèªèããªãå Žæã§ãã
ãããã®å€æŽã«ããã Mid
ã§shouldUpdateChildContext()
ã¡ãœããããã§ãã¯ããŸããããã«ãããïŒäŸã§ã¯ããã©ã«ãã®ã¢ã¯ã·ã§ã³ãå®è¡ãããããã«ïŒåçŽãªç䟡æ§ãã§ãã¯ãå®è¡ããŠãã³ã³ããã¹ãå€ã«ããã£ãã æ³šïŒ shouldUpdateChildContext()
ã®çœ²åã¯ãçŸåšshouldComponentUpdate()
ãšåãã§ãã
shouldUpdateChildContext()
ãtrue
ïŒããã©ã«ãïŒã®å Žåãé¢ä¿ã以åã«èšå®ãããŠããã°ãæãè¿ããã³ã³ããã¹ãã®åãïŒãã®äŸã§ã¯Child
ã®ã¿ïŒãæŽæ°ããŸãã ã ããã«ããããã®ã³ã³ããŒãã³ããæŽæ°ã©ã€ããµã€ã¯ã«ã«çµã¿èŸŒãŸããŸãïŒä»¥åã«èŠã説æãšã¯ç°ãªããããã¯3çªç®ã®ãã©ã¡ãŒã¿ãŒãšããŠ_new_ã³ã³ããã¹ãã䜿çšããŠéåžžã©ããshouldComponentUpdate()
ãåŒã³åºããŸããããã«ãããã³ã³ããŒãã³ãã¯å¿
èŠãªãšãã«ãã现ããå¶åŸ¡ã§ããŸããæŽæ°ïŒã
ããŸãããã°ãããã¯ããã»ã¹ãååã«èª¬æããŠããŸãïŒ
@Chrisuiãã£ããããããã§ããã€ãã®é²æ©ãèŠãã®ã¯çŽ æŽãããïŒ ãŸãããµããã£ãã§ãã¯ã®åºæ¬æ©èœã«å€æ°ã®åäœãã¹ããè¿œå ããå¿ èŠããããŸãã æäœã§ãïŒ
shouldComponentUpdate()
ãfalseãè¿ããå Žåã§ããåã®æŽæ°ã確èªããŸããshouldUpdateChildContext()
ãfalseãè¿ããå Žåã§ããåã®æŽæ°ã確èªããŸããshouldUpdateChildContext()
ãfalseãè¿ããå ŽåãåãæŽæ°ãããªãããšã確èªããŸããããã«ããããããµããŒããããŠããæ©èœã§ããå Žåã¯ã次ã®ããšã確èªããå¿ èŠããããŸãã
shouldUpdateChildContext()
ãåŒã³åºãããªãããšã確èªããŸãããçŽæ¥ã®èŠªã¯ãã®ã³ã³ããã¹ãããªãŒããŒã©ã€ãããå€æŽããŸãããshouldUpdateChildContext()
ãåŒã³åºãããªãããšã確èªããŸããccïŒAPIã®èšèš/ã¢ã€ãã¢ã«é¢ãããã£ãŒãããã¯ã«ã€ããŠã¯@sebmarkbage ã
@ChrisuiãããŸã§ã®ãšããçŽ æŽãããã§ããããã®äœæ¥ãããŠããã ãããããšãããããŸãã
@jimfbã¯ééããªãããã€ãã®ãŠããããã¹ããéå§ããŸã-äœãéãã§ããã®åã«ãããã©ã®ããã«æ©èœãããã確èªãããã£ãã ãã§ãïŒ
2çªç®ã®ã±ãŒã¹ã«é¢ããŠã¯ããããã¯ç§ãé¿ããé åã§ãããããåçŽãªèšèšãæ¯æããŠããŸãã ããšãã°ãã©ã®ç¹å®ã®ã³ã³ããã¹ãããŒãå€æŽãããŠãããã確èªãããããã®ã¿ãæŽæ°ããããšããå§ãããŸãã ããã«ãããçŸåšã芪åé¢ä¿ãè€éã«ãªããããŠãä»ã®ããŒã¿ãReactãã©ã®ããã«æµããããšã®å¯Ÿç§°æ§ãäœããªãå¯èœæ§ããããšæããŸãã ããšãã°ïŒç§ã¯éåžžã«çŽ æŽã§ãããèŠèœãšããŠãããããããŸããïŒãå€æŽããå°éå ·ãå éšã§æ¯èŒããã2ã€ã®å¥ã ã®ããŒã¿ãœãŒã¹ïŒã€ãŸããçŸåšã®å°éå ·ãšæ¬¡ã®å°éå ·ïŒãæŽæ°ãåŒãèµ·ããããåã«æŽæ°ãããããŠãŒã¶ãŒãæ瀺çã«å®çŸ©ããããšãä»»ããŸãç¡èŠãããŸãã
人ã ããããå®è¡ãããã¹ãã§ãããšåŒ·ãæããŠãããªãã°ããã®ç¹å®ã®è©³çŽ°ã«ã€ããŠããå°ãè°è«ãèŠãã®ã¯è¯ãããšã§ãã
ããã®ç°¡åãªå®è£
ã«ã€ããŠã¯ããããé²ãããå Žåã¯ãããªãŒãæŽæ°ããŠcontextTypes
ãšæ¯èŒããæå¹ãªãã®ãèŠã€ãããšãã«ãã³ã³ããŒãã³ãã®childContextTypes
ãããŒãžãç¶ãããšæããŸããã¿ãŒã²ãããæŽæ°ããŸãã ãããã¯ãããŠã³ãæã«å°ãéæ³ããããŠãã³ã³ããã¹ãã®åããŒãäžèŽããåãšæãè¿ã芪ã®éã«ã®ã¿èŠªåé¢ä¿ãäœæã§ãããããããŸããã åŸè
ã®å Žåãäžå¯èœã§ã¯ãªãã«ããŠããåŸã§æŽæ°é åºã管çããã®ãé£ãããªããšæããŸãã
ç°¡åã«ããã¯ããŠããããã¢ãã¯ã¢ãŠãããŠã¿ãŸãïŒ
å®éãæ©èœã®ç¹å®ã®ã³ã³ããã¹ãããŒæ¯èŒéšåã«é¢ããç§ã®åŸè ã®ææ¡ã«é¢ããŠã¯ããã§ã«äœ¿çšãããŠããããŠã³ãé åºãããããžãã¯ã§ãœãŒãããããã®ãšåããã®ã«åŸãã ãã§ã¯ãæŽæ°é åºãç¶æããã®ã¯ããã»ã©é£ããããšã§ã¯ãªããããããŸããïŒ
@Chrisui @sebmarkbageãããã£ãŠãç§ã®æžå¿µã¯ïŒæãããªããšãå¿ãããèŠéãããããªãéãïŒãã³ã³ããã¹ããããã€ããŒãåã¬ã³ããªã³ã°ãããã³ã«ãæäŸãããã³ã³ããã¹ãå€æ°ã«äŸåãããã¹ãŠã®ïŒå Žåã«ãã£ãŠã¯æ°çŸã®ïŒåã³ã³ããŒãã³ããçºçããããšã§ããã³ã³ããã¹ãå€æ°ãå€æŽãããŠããªãå Žåã§ããåã¬ã³ããªã³ã°ããŸãã ç§ã®çŽæã§ã¯ãæ°ããå€ãå©çšå¯èœã§ãããšããäœããã®å åããã£ãå Žåã«ã®ã¿ãã³ã³ããã¹ãã®åäŒæãããªã¬ãŒããå¿ èŠããããŸãïŒæ°ããå€ãå€ãå€ãš3åã«ãªããªãããŸãã¯ãã©ã°/éç¥ãªã©ïŒã
å®éããã®å®è£
ã¯ãµãã¹ã¯ãªãã·ã§ã³ã·ã¹ãã ã®ããã«èŠãå§ããŠããŸãã context
ã¯äºå®äžã¹ã³ãŒãã°ããŒãã«ã§ãããããããããæ£ãã解決çã¯ãã³ã³ããŒãã³ãã«ã³ã³ããã¹ãå€æ°ã暪æ¹åã«ãµãã¹ã¯ã©ã€ãããããšãèŠæ±ããããšã§ããããã«ãããã°ããŒãã«ãžã®ä»ã®ãã¹ãŠã®ãµãã¹ã¯ãªãã·ã§ã³ã«äœ¿çšããã®ãšåãã¡ã«ããºã ãã³ã³ããã¹ãã«å©çšã§ããŸããããŒã¿ã https://github.com/facebook/react/issues/3398ãhttpsïŒ//github.com/facebook/react/issues/3858 ãããã³https://github.com/facebook/react/pull/3920ãåç
§ããŠãã ãããé¢é£æ
å ±ã
@sebmarkbageãçªãã ç§ã®æè¿ã®èãã¯ãAPIã®è¡šé¢ç©ãåé¿ããããã«ããã®åé¡ã解決ããããã«æšªåãã®ããŒã¿èªã¿èŸŒã¿ãœãªã¥ãŒã·ã§ã³ã䜿çšããããšã«è³æã ãšæããŸãã ããªãã®èããèããŠã¿ããã§ãã
@jimfbäœçŸãã®ã³ã³ããŒãã³ããåã¬ã³ããªã³ã°ããããšã«ã€ããŠã¯æ£ããã§ãããç¶æ ã®å€æŽãããªã¬ãŒããäžæ¬æŽæ°ãçºçããªãããã«shouldComponentUpdateãå®è£ ããå¿ èŠãããå Žåãä»ãšäœãéããã¯ããããŸããã
ãã®ã³ã³ããã¹ãã¯ãµã€ãããŒã¿ã®ç¹å®ã®ã¹ããªãŒã ã®ããã«èŠããã ãã§ãããç§ã¯åæããŸãã ãããã®ææ¡ãæèã®ã«ã¹ã±ãŒãå¹æãããããããšãã§ãããªãã°ãç§ã¯ä»ã®ããã«æèã§å®éã«çºå±ããçç±ããªããšæããŸãã ä»ã®äººã®èããèŠãŠã¿ãŸãããïŒ
èå³æ·±ãããšã«ããã©ããã«æ©èœãè¿œå ããŠãã³ã³ããŒãã³ãéã«äžèŽããã³ã³ããã¹ã/åã³ã³ããã¹ãããŒãããå Žåã«ã®ã¿èŠªåé¢ä¿ãäœæãïŒåé·ãªããªãŒãã©ããŒãµã«ãé²æ¢ïŒãã³ã³ããã¹ããå®éã«å€æŽãããŠããªãå Žåã«æŽæ°ãé²æ¢ããã ãã§ããã€ãã®ããã«PureRenderMixinã
@Chrisuiéãã¯ãåã³ã³ããŒãã³ãå ã®åäžã®shouldComponentUpdateãããªãŒã®å·šå€§ãªæãåãåãããšãã§ããã®ã«å¯Ÿããã³ã³ããã¹ãã§ã¯ãåã¬ã³ããªã³ã°ããããã¹ãŠã®å ŽæãèŠã€ããŠä¿®æ£ããã®ãã¯ããã«é£ããããšã ãšæããŸãã ãã€ã«ã¢ãŠãããŠããã³ã³ããã¹ãå€æ°ã«äŸåããåã¯åã¬ã³ããªã³ã°ãããŸãã
ãããç§ã¯ä»ã®äººã暪åãã®ããŒã¿èªã¿èŸŒã¿ãœãªã¥ãŒã·ã§ã³ã䜿çšããããšã«ã€ããŠã©ãæããç¥ãããã§ãã
ã³ã³ããã¹ãã¯ã暪æ¹åã®ããŒã¿èªã¿èŸŒã¿ãšã»ãŒçŽäº€ããŠãããšæããŸã
çæ³çã«ã¯ã暪åãã®ããŒã¿ã¹ãã¢ã®ãã³ãã«ãã°ããŒãã«ã§ã¯ãªãã³ã³ããŒãã³ãã«æž¡ãæ¹æ³ãå¿ èŠã§ãããããäž»ã«ã³ã³ããã¹ãã®äœ¿çšæ¹æ³ã§ãã
ãã ãããã®ããã«DIã®ã³ã³ããã¹ãã䜿çšãããšãã¢ããªã±ãŒã·ã§ã³ã®éçšã§ã³ã³ããã¹ããå€æŽãããå¯èœæ§ãäœããªããŸãã
2015幎5æ26æ¥ã«ã¯ãååŸ09æ10åã§ããžã ã®[email protected]ã¯æžããŸããïŒ
@Chrisuiéãã¯ãåã³ã³ããŒãã³ãå ã®åäžã®shouldComponentUpdateãããªãŒã®å·šå€§ãªæãåãåãããšãã§ããã®ã«å¯Ÿããã³ã³ããã¹ãã§ã¯ãåã¬ã³ããªã³ã°ããããã¹ãŠã®å ŽæãèŠã€ããŠä¿®æ£ããã®ãã¯ããã«é£ããããšã ãšæããŸãã ãã€ã«ã¢ãŠãããŠããã³ã³ããã¹ãå€æ°ã«äŸåããåã¯åã¬ã³ããªã³ã°ãããŸãã
ãããç§ã¯ä»ã®äººã暪åãã®ããŒã¿èªã¿èŸŒã¿ãœãªã¥ãŒã·ã§ã³ã䜿çšããããšã«ã€ããŠã©ãæããç¥ãããã§ãã
â
ãã®ã¡ãŒã«ã«çŽæ¥è¿ä¿¡ããããGitHubã§è¡šç€ºããŠãã ããã
ã³ã³ããã¹ãã®äœ¿çšã«é¢ããçŸåšã®ã¢ããã€ã¹ïŒãããªãããè¶ ããŠïŒã¯ãã¹ãŠé©çšãããããã§ããé »ç¹ã«å€æŽããããã®ã¯ãããªãé«ãåã¬ã³ããªã³ã°ã³ã¹ããçºçããŸãã ææ¡ãããéåžžã«çãçµã£ãæ¹æ³ã§ãã®ã³ã¹ããå¢ãããŠããå¿ ããã人ã ãããã䜿çšããããšã«ã€ããŠèããæ¹æ³ãå€ããããã§ã¯ãããŸããã ããã«ãæšã®æãåãèœãšãããå Žåã§ããããªãç°¡åã§ãã
class Mid extends Component {
shouldComponentUpdate() { return false; }
shouldUpdateChildContext() { return false; }
...
}
çŸç¶ã®ã³ã³ããã¹ããæ¯èŒçåçŽã§ããããšã«æºè¶³ããŠããŸã+ shouldUpdateChildContextã åºç€ãšãªãã¡ã«ããºã ãä»ã®ã°ããŒãã«ãµãã¹ã¯ãªãã·ã§ã³ãšäžèŽããããã«å€æŽããŠãã䜿ãããããå€§å¹ ã«äœäžããããšã¯ãªãã§ãããã
@jimfb
@eplawlessãææããŠããããã«ãshouldUpdateChildContextã䜿çšããŠãæŽæ°ãããããªãŒã®å·šå€§ãªãã©ã³ãããããã¯ã§ããŸãã
ã³ã³ããã¹ãAPIïŒææ¡ãããå€æŽãå«ãïŒã¯ãä»ããå®è£ ããåŸã§ãµããŒããããå¯èœæ§ã®ãããµã€ãããŒã¿ããŒãåå¿ã䜿çšããããã«å éšãå€æŽã§ããã»ã©åçŽã ãšæããŸãã
å¥ã®ææ¡ïŒshouldUpdateChildContextïŒïŒãããã©ã«ãã§falseã«èšå®ããŠããã®æ°ããåäœãããã©ã«ãã§é²æ¢ãããªããã€ã³ã«ããããšãã§ããŸãã
å埩ãšãã¹ãã®ããã«äœããå ¬éããããã«ïŒåãæ¹æ³ã§ãã³ã³ããã¹ãæ©èœã¯åžžã«-ãããã£ãŠææžåãããŠããŸããïŒã0.14ã®ãã®APIææ¡ãè¿œæ±ããå¿ èŠããããŸããïŒ ïŒã²ãŒãããŒããŒãã話ãèãã®ã¯è¯ãããšã§ãïŒïŒ
ç§ã¯ããªãã®ããã«PRãéããŸããïŒ https ïŒ
PRã¯ãã¹ã¿ãŒã«æ¯ã¹ãŠç°¡åã«ç¢ºèªã§ããåé¡ãããåªå ããããããPRã«é¢ãããã£ãŒãããã¯ããã°ããåãåãå¯èœæ§ãé«ããªããŸãã
ç§ã¯ããšããšshouldUpdateChildContext
ã«ã€ããŠééã£ãŠãããšæããŸãã æ¬åœã«å¿
èŠã§ããïŒ ã¹ã©ãã·ã¥ã«ã€ããŠç³ãèš³ãããŸããã
shouldComponentUpdate
ã¯ãäœããå€ãã£ããã©ãããå€æããã®ã¯åäŸã®è²¬ä»»ãšãªãæŠç¥ã®ããã§ãã ããšãã°ãåºåã決å®ããããã«æäŸãããã¹ãŠã®ããŒã¿ã䜿çšãããšã¯éããŸããã 芪ãšããŠãããªãã¯ãããç¥ããŸããã ããããããã§ååã§ãã
ãŸãã芪åæ¥ç¶ãå°éå ·ãªã©ã®åºå®ãããããããã£ã®ã»ããã«å¶éãããå ŽåããããšæããŸãã ã€ãŸããç¹å®ã®åãã³ã³ããã¹ãã®äžéšã®ã¿ã䜿çšããå Žåã1ã€ã®ãœãŒã¹ããè€æ°ã®ç°ãªãã³ã³ããã¹ããæäŸããããšã¯ã§ããŸããã 1ïŒ1ã®ãããã³ã°ãååšããå¯èœæ§ããããŸãã ããã«ãç§ã¯åžžã«ã³ã³ããã¹ãããã«ãæ¶è²»ããåäŸã«çŽæ¥äŒããããšãèºèºããŠããŸããããæ£åœãªãŠãŒã¹ã±ãŒã¹ã¯äžè¬ã«ããã¹ãŠã®äººã«ãããŒããã£ã¹ãããã ãã§ãªãã2ã€ã®ã³ã³ããŒãã³ãéã®ãã¯ãŒã ããŒã«ãã§ãïŒããã¯ã¢ã³ããã¿ãŒã³ã§ãïŒã
ããå°ãèããŠãPRã«ã€ããŠè©³ããã³ã¡ã³ãããŸã...
@sebmarkbage shouldUpdateChildContext
ã©ã¡ãã®æ¹åã«ãè¡ãããšãã§ããŸãã ç§ã®å¥œã¿ã¯åžžã«APIã®è¡šé¢ãæå°åããããšã§ãã ãã€ã§ãæåã®APIããé€å€ããããšãã§ããŸãïŒã³ã³ããã¹ãã¯ãžã£ã³ãããŠãã³ã³ããã¹ãå€æ°ãèªã¿åãã³ã³ããŒãã³ãã§åã¬ã³ããªã³ã°ãéå§ããã ãã§ãïŒã è¿œå ã®ãšã¹ã±ãŒãããããå¿
èŠãªå Žåã¯ãåŸã§è¿œå ããŸãã
@mjacksonãææããããã«ããã倧ããªåé¡ã¯ãã³ã³ããã¹ãå€æ°ããã€å€æŽãããããããããªãããšã ãšæããŸãã i18n ContextProviderãåã¬ã³ããªã³ã°ããããã³ã«ããã¹ãŠã®fbt / i18nããã¹ãããŒããæ¬åœã«åã¬ã³ããªã³ã°ãããã§ããïŒ ãå¿é ããªãã§ãã ãããäœãå€ãã£ãŠããŸãããããŒãžäžã®ãã¹ãŠã®ããã¹ãèŠçŽ ãããããåã¬ã³ããªã³ã°ããªãã§ãã ããããšããèšãæ¹ã¯ãŸã æäŸããŠããŸããã
ç§ã¯ããªãã®æåŸã®æ®µèœã«ã€ããŠå°ãæ··ä¹±ããŠããŸãã 詳现ãæããŠããã ããŸããïŒ ä»¥äžãã³ã³ããã¹ãã®ã¢ã³ããã¿ãŒã³ã§ããããšã瀺åããŠããªããšæããŸããi18nã³ã³ããŒãã³ãã¯ããŠãŒã¶ãŒã®åªå èšèª/ã¿ã€ã ãŸãŒã³/ãã©ãŒããããªã©ããã¹ãŠã®i18n察å¿ã®åã³ã³ããŒãã³ãã«ããããŒããã£ã¹ããããŸãã
PRã«ã€ããŠã³ã¡ã³ãããŸããããããã§åçŸããå¿ èŠããããŸãã
@sebmarkbage @Chrisui @jimfb
ReïŒ shouldUpdateChildContext
ãããã¯äŸ¿å©ãªè¿œå ã ãšæããŸãã ããã©ã«ãã§ã¯ã shouldComponentUpdate
ã¯trueãè¿ããŸããããã«ãããäœããå€æŽããããã©ãããå€æããã®ã¯åã®è²¬ä»»ã«ãªããŸãã shouldComponentUpdate
å®è£
ãããšããããšã¯ã芪ãããç¥ã£ãŠããå Žåã«ãã®è²¬ä»»ãåãé€ãããšãæå³ããŸãã åãããšãshouldUpdateChildContext
ã«ãåœãŠã¯ãŸããæé©åãšããŠåãã責任ãåãé€ãããã ãã«ååšããŸãã
ReïŒãµãããªãŒå šäœã«ãããŒããã£ã¹ãããã®ã§ã¯ãªãã2ã€ã®æå¹ãªãã¿ãŒã³ããããšæããŸãã ïŒ2517ã§ææ¡ããããã«ãã¯ãŒã ããŒã«ã¯å®å šã«çã«ããªã£ãŠããŸãã ãã®ãã¿ãŒã³ã䜿çšããŠãããŸããŸãªãµãã·ã¹ãã ïŒãã©ãŒã«ã¹ãé³å£°ãªã©ïŒå ã®ã¢ã€ãã ãã°ã«ãŒãåããŸãã ããã«ãã³ã³ããã¹ãã䜿çšããŠi18næ å ±ãã¢ããªã±ãŒã·ã§ã³ã®ã»ã¯ã·ã§ã³å šäœïŒããããå šäœïŒã«æž¡ããããã䜿çšãããã®ãã¹ãŠã匷å¶çã«åã¬ã³ââããªã³ã°ããããšæããŸãã ãã®çš®ã®ãããŒããã£ã¹ããã¿ãŒã³ã¯ãã¯ãŒã ããŒã«ãã¿ãŒã³ãšæ¯èŒããŠããããæ¯èŒçãŸãã§ãããããã§ãæå¹ã§ãããšæããŸãã
çŸåšãåããœãŒã¹ã®ãã©ãŒã«ã¹ã°ã«ãŒããšãã€ã¹ã°ã«ãŒãã«ããã¯ã¹ã€ã³ã䜿çšããŠããããšããããŸãã å¶éã®å¿ èŠæ§ã¯ç解ããŠããŸããã1ïŒ1ãããã³ã°ã匷å¶ããªãããã®æå¹ãªãŠãŒã¹ã±ãŒã¹ããããšæããŸãã
å®éããã¯ãŒã ããŒã«ããã¿ãŒã³ã¯ã¢ã³ããã¿ãŒã³ã ãšæã£ãŠããŸããããæŸéã¯äºæ³éãã®ãã¿ãŒã³ã§ããã ã³ã³ããã¹ãã¯ãå€æ°ã®ã³ã³ã·ã¥ãŒããŒãå€æ°ããå Žåã«ã®ã¿èå³æ·±ããã®ã§ãïŒã€ãŸããpropãæ瀺çã«æž¡ããšãå®è³ªçã«ãã¹ãŠã®ã³ã³ããŒãã³ãã«è¿œå ããããããå®åæãå€ããªããŸãïŒããã以å€ã®å Žåã¯ãæ瀺çã«æž¡ãæ¹ãããã§ããããå°éå ·ã ãããã @ sebmarkbageã¯å察ã®ããšãèšã£ãŠããããã§ãïŒãããŠåœŒã¯éåžžãã®ããšã«ã€ããŠæ£ããã§ãïŒã®ã§ãä»ç§ã¯æ··ä¹±ããŠããŠã圌ãã説æãåŸãããšæããŸãã
@sebmarkbage @eplawlessæå¹ã ãšæãã¯ãŒã ããŒã«ãã¿ãŒã³ã®äŸã¯äœã§ããïŒ èŠªã¯äœãæäŸããŠããã®ããããã¯åäŸã«ãã£ãŠã©ã®ããã«äœ¿çšãããŠããã®ãããªãããã¯åäŸã®å°éå ·ã«ãªããªãã®ããªã©ã
<Table>
<Cell />
<Cell />
<FancyCell />
</Table>
class FancyCell {
render() {
return <SomeWhatFancyCell>Some content</SomeWhatFancyCell>;
}
}
class SomeWhatFancyCell {
render() {
return <Cell>{this.props.children}</Cell>;
}
}
borderWidth
ãååŸãã borderLeft/Top/Right/Bottom
圢åŒã§ããŒãã«ã®ãã¹ãŠã®ã»ã«ã«æž¡ããŸãã
1ã€ã®å·§åŠãªæ¹æ³ã¯ã borderWidth
ã<Table />
ã«æž¡ãããããåå²ããŠã³ã³ããã¹ããééãããããšã§ãã
ããã¯ãã»ã«ã«ã¬ã³ããªã³ã°ãããå¯èœæ§ã®ãããã®ããé ããã£ãã«ãä»ããŠããŒãã«ãªã©ã®æŠå¿µçãªèŠªãšéä¿¡ããæ¹æ³ãæäŸããŸãã ããã¯ãã§ã«DOMèŠçŽ ãçžäºã«è¡ãããšã§ãããReactã§ã¬ã€ã¢ãŠããè¡ãããã«å¿ èŠã«ãªãå¯èœæ§ããããŸãã
ãã³ã³ããã¹ããã®æŠå¿µã«çŠç¹ãåãããããªãã§ãã ããã çŸåšã®æŠå¿µã¯çæ³çã§ã¯ãããŸããã ãã¶ãçæ³ã¯ã2ã€ã®ç°ãªãæŠå¿µãä»ã®ãã£ãã«ã®ãããªãã®ã§ããïŒ
ãã£ãšãããã代æ¿APIïŒ
class Table {
render() {
var w = this.props.borderWidth;
var borderStyle = { left: w, right: w, top: w, bottom: w };
return <context key={someSymbol} value={borderStyle}>{this.props.children}</context>
}
}
class Cell {
static contextKey = someSymbol;
render() {
var borderStyle = this.context;
...
}
}
ããã§åŸãåãã ãã§ãã
åŸãåãç¶ãã...
å¥ã®æ§æã䜿çšã§ããŸã...
<Table borderStyleChannelKey="myKey">
<Cell borderStyle={myKey} />
<Cell borderStyle={myKey} />
<FancyCell borderStyle={myKey} />
</Table>
ããã§ãéä¿¡ãã£ãã«ãæ瀺çã«ããååã®ç«¶åãªã©ã®å¯èœæ§ããã¹ãŠåé¿ããŸãããïŒhttps://github.com/reactjs/react-future/pull/28ïŒ
ã·ã³ãã«ã«ãååã®ç«¶åã¯ãããŸããããã³ã¹ãããããŠéä¿¡ãã£ãã«ãäœæããŸããã è€æ°ã®ã¬ãã«ã®éæ¥åãééããŸããã èæ¯è²ãªã©ãå¥ã®ãã£ãã«ãå€æŽãŸãã¯è¿œå ããå¿ èŠãããå Žåã¯ãææžåãããå¥çŽïŒããŒãã«å ã®ã»ã«ïŒãåãã§ãã£ãŠãããã¹ãŠãæŽæ°ããå¿ èŠããããŸãã
ãšããã§ãReactã®æ¬è³ªã¯ãã§ã«é ãããã³ãã¥ãã±ãŒã·ã§ã³ãã£ãã«ã§ãïŒç¶æ ã ååãæ瀺çã«ééããããã§ã¯ãããŸããã
'borderStyle'ã§ã¯ãªã 'styleinfo'ãŸã㯠'celldata'ãšåŒã³ããªããžã§ã¯ãã«ããŸãã 次ã«ããã£ãŒã«ã/æ
å ±ãè¿œå ããããã«ãAPIã³ã³ãã©ã¯ããTable
ãšCell
éã§å€æŽããå¿
èŠã¯ãããŸããã
ç§ã®ããªã¢ã³ããšããªãã®ããªã¢ã³ãã®å¯äžã®éãã¯ãïŒç§ã®ããªã¢ã³ãã§ã¯ïŒåãå®éã«å€ããèªã¿åããå¯äžã®æ¹æ³ã¯ã芪ããå°éå ·ãšããŠæ瀺çã«æž¡ãããããšã§ãã æ©èœçã«ã¯ãææ°ã®ææ¡ã¯https://github.com/reactjs/react-future/pull/28ããã®ç§ã®ææ¡ãšæåéãåãã§ã
æ確ã«ããããã«ãç§ã¯ããªãã®ææ°ã®ææ¡ãæ¬åœã«å¥œãã§ã...ã ããç§ã¯æå¥ãèšãã€ããã¯ãããŸãã...ãããããã¯åŸ®åŠã«ç°ãªãåé¡ã解決ããŸãã ããã¯ããªãã3æã«ç§ã«èšã£ãããšã§ãããããŠç§ã¯æçµçã«ããªããæ£ãããšããçµè«ã«éããŸããïŒäŸãã°ãæŸéã®åé¡ïŒã ãããŒããã£ã¹ãã®åé¡ã解決ããªããŠãåé¡ããªãå ŽåïŒã³ã³ããã¹ããäœããã®äŸ¡å€ãæäŸãããšç¢ºä¿¡ããæ¹æ³ã§ãïŒããã²ããã®ãããªããšãããŸãããïŒ
ããŒåãåžžã«ææè ã«ãã£ãŠæ±ºå®ãããªãéããä»»æã®ã·ã³ãã«ã«ã¯ååã®ç«¶åããããŸãããã®å Žåãææè ã¯ãšã«ããããŒåãåã«äŒããå¿ èŠããããããææè ã«è¡šç€ºããããšãã§ããŸãïŒããã§ãªãå Žåã¯ã©ãããã°ããã§ããïŒåäŸã¯ã©ããèŠãã°ããã®ãç¥ã£ãŠããŸããïŒïŒ ææè ã匷å¶çã«é¢äžãããããšã«ãããããŒãã³ãŒããããããŒã®ä»£ããã«ã·ã³ãã«ã䜿çšããããã«ã³ã³ããŒãã³ãã«èªç¶ã«å¥šå±ããŸãã
å ±éã¢ãžã¥ãŒã«ãªã©ã®ãã£ãã«ãä»ããŠèª¿æŽããå¿ èŠãããã°ããŒãã«ã·ã³ãã«ïŒå€§æåã®SïŒãæå³ããŸãã https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol
ç§ãæ°ããææ¡ããAPIã®è¯ããšããã¯ãããŒãå¶åŸ¡ãããŒãããã°ã©ã åæãšæ··åãããããªããžã§ã¯ãããããã£ãããŒã§ã¯ãªãããšã§ãã ç§ã®ææ¡ã§ã¯ãç¶æ ã匷åããããŒãšåãããã«ããã¡ãŒã¹ãã¯ã©ã¹ã®åçãªå€ããããŸãã
ãããicã @ sebmarkbageã¯åã³æŽŸæãªæ°ããjavascriptãåŒãåºããŠããŸã:)ã ç§ã¯ç¥ã£ãŠããã¹ãã ã£ãã 圌ã¯ä»æ¥TC39äŒè°ã«åºåžããŠããŸãã
ã¯ãããã®éãã§ãã ããã¯ãååã®ç«¶åãåé¿ããã®ã«éåžžã«å¹æçã§ããããããŒããã£ã¹ãã®åé¡ã解決ããŸãã ããªãã¯ç§ã売ããŸããã ç§ã¯ããã奜ãã§ãïŒ
ä»æ¥ã¯ãªãã£ã¹ã«ãããããã®ã«ïŒ çŽæ¥äŒãã®ã¯ãšãŠãé åçãªäŒè©±ã ã£ããšæããŸãïŒ
å人çã«ã¯ã圌ãããªãã£ãããšãå¬ããæããŸããããã«ãããç§ãã¡å šå¡ãã«ãŒãã«é¥ããŸã;-)ã
ç§ã¯Symbolã®ãã®ãæ¬åœã«å¥œãã§ãã æœåšçã«ãšã€ãªã¢ã³ã®ããªãŒå šäœã§ã®æååããŒãžã®ã³ã³ããã¹ãã®é床ã®äŸåã¯ãåžžã«ããã€ãã®æªãé°å²æ°ãæã£ãŠããŸããã
ããšãã°ã2ã€ã®ã©ã€ãã©ãªã3çªç®ã®ã©ã€ãã©ãªã®èŠªåã¯ãŒã ããŒã«ã«äŸåããŠããŠãããŸããŸãã®ç¬ç«ããã³ããŒã䜿çšããŠããå Žåããããã®ã³ããŒãè¡çªããããçžäºã«è¡šç€ºããããããããšã¯ãããŸããã 確ãã«æ³åããã®ã¯å¥åŠãªã·ããªãªã§ãããããäžè²«ããŠããããã§ãã
å ¬å¹³ãæãããã«ãã·ã³ãã«ã¯çŸåšã®ãªããžã§ã¯ãã§åäœããããšããã§ã«å¯èœã§ãã Symbolsã䜿çšããŠããå Žåã§ããããããnpmãããã¬ãã«ã¢ãžã¥ãŒã«åãªã©ã®æœåšçã«ã°ããŒãã«ãªåå空éãä»ããã¢ãžã¥ãŒã«ãå¿ èŠã«ãªããŸãïŒãã ããçžå¯Ÿçãªãã®ã§ããããšãæãŸããã§ãïŒã
çŸåšã®APIã§ã¯ãåçŽãªæåååã䜿çšããã®ãéåžžã«èªç¶ã«ãªã£ãŠããã ãã§ãã ãŸããã©ã³ã¿ã€ã ã»ãã³ãã£ã¯ã¹ãç¹å®ã®ããããã£èå¥åãšçµ±åããã¯ããŒãžã£ãŒã³ã³ãã€ã©ã®è©³çŽ°ã¢ãŒããªã©ãæšè«ããã®ãããå°é£ã«ããŸãã ãŸããVMã®æé©åããã蟌ã¿ãŸãã
@sebmarkbage UUIDïŒå¥åSymbolsïŒã䜿çšããããšãã§ããŸãããæ°ããææ¡ã§ã¯å®è¡æã«ããŒã決å®ã§ããŸããã€ãŸãã芪ãå°éå ·ãä»ããŠããŒã«åœ±é¿ãäžããå¯èœæ§ããããŸãïŒããããŸããïŒã ããã¯èšã£ãŠããjsxã¹ã³ãŒãå ã§å€ã䜿çšã§ããããã«ããªããšããããã©ãã»ã©åœ¹ç«ã€ãã¯ããããŸãããããã«ã€ããŠããã«èããå¿ èŠããããŸãããïŒããããïŒããã€ãã®ã¯ãŒã«ãªæè»æ§ãè¿œå ãããŸãã
ãã¯ãŒã ããŒã«ãã®ã¢ãããžãŒã«ã€ããŠã¯ããããããŸãããæŸéã·ããªãªãši18nã®äŸã¯ãææ¡ãããPRã解決ããããšããŠããåé¡ã«ééãããã®ã§ãã
ãŸãã httpsïŒ //github.com/facebook/react/issues/2517#issuecomment -106597895ãã©ã®ããã«åœ¹ç«ã€ãã«ã€ããŠãå®å šã«ã¯ããããŸãããããã¯ãæå³çã«ã¯getChildContextããã³contextTypesãšåçã®ããã§ãã
shouldUpdateChildContext
PRã«ã€ããŠç§ãæ°ã«å
¥ã£ãŠããã®ã¯ãã³ã³ããã¹ãã®å€æŽãäŒæããããã«ãä»»æã®æ·±ãã§ãã¹ãŠã®åãåæããå¿
èŠããªãããšã§ãã
AIUIå
ã
ã®åé¡ã¯ã shouldComponentUpdate
ãcontext
æž¡ãããŠããã³ã³ããã¹ãã®æ§è³ªäžãããããŒããã£ã¹ãããšãã¬ã·ãŒããã®éã®ã³ã³ããŒãã³ããã³ã³ããã¹ããç¥ããªãã£ãããã«falseãè¿ãå¯èœæ§ãããããšã§ããããããééããŠããŸããã
ãã®åé¡ãåé¿ãã2ã€ã®æ¹æ³ã¯ãããªãŒå ã®ã³ã³ããŒãã³ãã®äžã®ã³ã³ããã¹ãããã©ã®ã³ã³ããŒãã³ããèªã¿åãããŠãããã远跡ããããããªãŒã®äžã«ã³ã³ããã¹ãã®å€æŽãäŒæããããã®è¿œå ã®ã¡ã«ããºã ãçšæããããšã§ãã
ãã©ãŒã ã³ã³ããŒãã³ãã§èŠªããŒã¹ã®ã³ã³ããã¹ããå°ã䜿çšããåŸããã®ä»¶ã«ã€ããŠ2ã»ã³ããæäŸããããšæããŸãã ãã©ãŒã ïŒãã¹ãã¢ãã€ã³ã¹ã¿ã³ã¹ãšããŠæ©èœïŒãã³ã³ããã¹ããä»ããŠlisten()
ã¡ãœãããæž¡ãã䞊åã®ãã©ãã¯ã¹ã®ãããªã¡ã«ããºã ã®äœæã«ã€ãªãããã³ã³ããã¹ãã«å¿ãã芪ãšåã®éã®é©åãªæŽæ°ã¡ã«ããºã ã®æ¬ åŠã Field
ã³ã³ããŒãã³ããããŠã³ãæã«ç»é²ãããŸãã ãã©ãŒã ã¯ãäžã«äŒæããå€æŽãããªã¬ãŒããŸãã ããã¯ãã¹ãŠéåžžã«æµåçã§åé¡ãªãåäœããŸãããReactã³ã³ããŒãã³ãã®æ§æå¯èœæ§ã¢ãã«ã
HoCã§ã³ã³ããŒãã³ããã©ããããäžè¬çãªæŠç¥ã¯ãïŒå°éå ·ã®ããã«ïŒæŽæ°ãã£ãã«ã®äžå€®ã§ã¯ãªããæŽæ°ãã£ãã«ã®_å€åŽ_ã«æ°ããã©ããããã³ã³ããŒãã³ããé 眮ãããããããã§ã¯æ©èœããŸããã ãããã©ã·ã¹ãã ã®å€§ããªå©ç¹ã¯ãæµãããããããŠã³ã§ãããéã«æãŸãããã®ã«ãã£ãŠé®æãããå¯èœæ§ãããããšã§ãã æŽæ°ã·ã¹ãã ã®ãããªãã©ãã¯ã¹ã䜿çšããå Žåãã©ããã³ã°ã³ã³ããŒãã³ãããã©ãŒã ããªãã¹ã³ããå¿ èŠããããŸãããã©ããã³ã°ã³ã³ããŒãã³ããšå ã®ïŒã©ããŒïŒã³ã³ããŒãã³ãã®äž¡æ¹ããã©ãŒã ããªãã¹ã³ãããšããåé¡ãçºçããŸãã HoCããåŒãç¶ãããããŒã¿ãå ã®ã³ã³ããŒãã³ãã«æž¡ããŸãã
ã³ã³ããã¹ãã¯ãç¹å®ã®ã³ã³ããã¹ããšããžãã¹ãæããªãã³ã³ããŒãã³ãããããçšåºŠãä¿è·ãããå¿
èŠãããããšã¯æããã§ãããã³ã³ããŒãã³ããå¿
èŠãªå Žåã¯ãããŒã¿ã¹ããªãŒã ã«ç°¡åã«ãžã£ã³ãã§ããå¿
èŠããããŸãã ãã©ãŒã ã³ã³ããŒãã³ãã®ç¹å®ã®ã±ãŒã¹ã§ã¯ã Form
ã»ãšãã©ã®åã¯ãæž¡ãããã³ã³ããã¹ãããåé¢ããã Field
ã³ã³ããŒãã³ãã®ã¿ããããåãåãå¿
èŠããããŸãã ãã ããæ¶è²»è
ãField
ãHoCã§ã©ãããããå ŽåïŒããã©ã«ããèšå®ããããåäœã調æŽãããããããïŒããããè¡ãç°¡åãªæ¹æ³ãããã¯ãã§ãã
ã€ãŸããã³ã³ããã¹ãAPIã¯ãäžéïŒæ¿èªæžã¿ïŒã³ã³ããŒãã³ãããã®ã³ã³ããã¹ãã®ã¬ãã¥ãŒãµãŒãšããŠæ©èœã§ããããã«ããå¿ èŠããããŸããããã¯ãã³ã³ããŒãã³ããå°éå ·ãåã«æž¡ããšãã«ãå°éå ·ããªãã¥ãŒã¹/ãããã§ããã®ãšåãæ¹æ³ã§ãã éãã¯ãå°éå ·ã¯ããããªãã¯ãã¹ããŒã ã§ããã®ã«å¯Ÿããã³ã³ããã¹ãã¯ãã©ã€ããŒãããªããã€ã³ãã¹ããªãŒã ã§ãããšããããšã§ã
ç§ã¯react-side-contextã§ãµãã¹ã¯ãªãã·ã§ã³ããŒã¹ã®ã³ã³ããã¹ãã®ã¢ã€ãã¢ãå°ãè©ŠããŸããã
å
éšçã«ã¯ãã³ã³ããã¹ããããŒããã£ã¹ã¿ãŒã¯{ subscribe(key, cb), getValue(key) }
ã€ã³ã¿ãŒãã§ã€ã¹ãåäŸã«å
¬éãbroadcast({ [key]: newValue, ...otherKeys })
ä»ããŠã³ã³ããã¹ãããŒãžã®å€æŽãçºè¡ããŸãã
@broadcasts([...keys])
ããã³@observes([...keys])
ã¯ã©ã¹ãã³ã¬ãŒã¿ã¯ãã®APIãReactã³ã³ããŒãã³ãã«çµã³ä»ãã context
ã䜿çšããŠã³ã³ããŒãã³ãããªãŒãä»ããŠã³ã³ããã¹ãããªãŒãäŒæãã setState
ã䜿çšããŠæŽæ°ããã¥ãŒã«å
¥ããŸããã³ã³ããã¹ãå€æŽãžã®å¿çã
ãã€ã©ãŒãã¬ãŒããå°ã䜿çšãããšãçŸåšã®shouldUpdateChildContext
ããããŒã¶ã«ãšåçã®APIãã»ããã¢ããã§ããŸãã
ååã®è¡çªãé¿ããããã«ãã³ã³ããã¹ãããªãŒã¯äžæã§ãããããã³ã³ããã¹ãå ã®ããŒããããŒããã£ã¹ããŸãã¯ç£èŠããã«ã¯ãã³ã³ããã¹ããžã®åç §ãå¿ èŠã§ãã
åçãªå€ãæž¡ãããã«ã³ã³ããã¹ãã䜿çšããããšã¯ãªããåç §ãå€æŽããªãã ãã§ãã ããã«ãã®ããã¡ãã®äŸãããã€ããããŸãããæ¬çªã¢ããªã§åçãªå€ãæž¡ãããã«äœ¿çšãã人ã¯ããŸããïŒ ç§ã¯ãã°ãã°ãå®éã®ãŠãŒã¹ã±ãŒã¹ãããåçºçã§ãããšæããŸãã
ããšãã°ãI18nã®å ŽåãããŒãšå€ã®ãã¢ãçŽæ¥æž¡ã人ã¯ããŸããïŒ ãããšããã³ã³ããŒãã³ããå€ãååŸããŠç£èŠã§ãããªããžã§ã¯ããžã®äžå€ã®åç §ãæž¡ãã ãã§ããïŒ
ããçš®ã®ããã«ã¢ããã€ãã³ããã£ã¹ããããã³ã³ããã¹ãã§å®è£ ããããšã«äžåºŠèå³ããããŸããããæ£ç¢ºã«ã¯äœãæå³ããã®ãå¿ããŸãããã芪ãåäŸããã®ã€ãã³ããååããŠã³ã³ããã¹ããè¿œå ã§ããããã«ããŠãåäŸãæã£ãŠããªãããã«ããããšã§ããããããã°ããŒãã«ãªæèã®ã©ãã«é©åãããã«ã€ããŠã®ç¥èãæã£ãŠããããšã
ããã«2ã»ã³ããè¿œå ããã«ã¯ã StaticContainer
å£ããªããããªæ¹æ³ã§ããã«ä¿®æ£ãå®è£
ããæ¹ããããšæããŸãã
StaticContainer
åŒãç¶ãæ©èœãã props
ãšcontext
äž¡æ¹ã§ã芪ããã®ãã¹ãŠã®æŽæ°ããããã¯ããã®ãæãçã«ããªã£ãŠãããšæããŸãã
IMOããããåŠçããæåã®æ¹æ³ã¯ãã³ã³ããã¹ããé¢ä¿ããå Žåã¯åžžã«shouldComponentUpdate
å®å
šã«ç¡èŠããã®ã§ã¯ãªãã shouldComponentUpdate
ãåã«ãã£ãŠäœ¿çšãããã³ã³ããã¹ããžã®å€æŽãæœåšçã«æ€åºã§ããããã«ããããšã§ãã
@ jedwards1211ç§ã®ãŠãŒã¹ã±ãŒã¹ã¯ãI18nProviderã³ã³ããŒãã³ãå ã®ç¿»èš³ã¡ãã»ãŒãžããã§ããããŠãããïŒgettextã¡ãœããã䜿çšããŠïŒJedã€ã³ã¹ã¿ã³ã¹ãæž¡ãããšã§ãã
ã¡ãã»ãŒãžãåä¿¡ãããåã«ãgettextã¡ãœããã¯ç©ºã®æååãè¿ããUIã楜芳çã«ã¬ã³ããªã³ã°ã§ããããã«ããŸãã I18nProviderãã¡ãã»ãŒãžãåä¿¡ãããšã翻蚳å¯èœãªæååãå«ãéšåã®ã¿ãDOMã§æŽæ°ããããã¹ãŠãåã¬ã³ããªã³ã°ãããããšãæåŸ ããŸãã
æååãæœåºã§ããããã«ããã¥ãŒã³ã³ããŒãã³ãã§å®éã«gettext()
åŒã³åºããè¡ãå¿
èŠããããŸãïŒãã®å Žåã¯xgettextã䜿çšïŒã
Reactifluxã§äœ¿ã£ãŠãããå°ã蹎ããŸãã shouldComponentUpdate
ãã¹ãŒããŒfalse
ãã®æŠå¿µãããã°äŸ¿å©ã§ãã
äžè¬çã«ãããã¯ãã®ã³ã³ããã¹ãã®æŽæ°ã¯ãéå»ã«äŒæãã¹ãæããŸããshouldComponentUpdate
è¿ãfalse
ïŒãããã¯å°ãªããšããããã¯ã»ãšãã©ã®ãŠãŒã¹ã±ãŒã¹ãã·ã³ãã«ã«ãªãã ãããïŒãç§ã¯ãŸããäŸãã°ãšã®ç¹å¥ãªã±ãŒã¹ããããšæããŸã<StaticContainer>
芪ãå¿
èŠãšããå Žåãšåæ§ã«ãå€ãžã®é·ç§»ã®ãµãããªãŒåçµãªã©ã®ç®çã®ããã«ããã®åå«ã«ãã¹ãŠã®æŽæ°ããããã¯ããããšãã§ããããã«ãã<StaticContainer>
ã
ããšãã°ã httpsïŒ//github.com/rackt/react-router/pull/2454ãæ€èšããŠ
shouldComponentUpdate
false
ãè¿ãåäœã¯ãã³ã³ããã¹ãã®æŽæ°ããããã¯ããã¹ãã§ã¯ãªãããšã«åæããŸããã <StaticContainer>
ãç¶æããã«ã¯ãããçš®ã®SUPER_FALSE
ã»ã³ããã«ãå¿
èŠã§ãã <StaticContainer>
çŸç¶ã®ãŸãŸã§åäœããŸãã
@taion
ãã©ã³ãžã·ã§ã³ã¢ãŠãã«ãŒãã³ã³ããŒãã³ãã®ã¢ã¯ãã£ãç¶æ ããªã³ã¯ããæŽæ°ãç°¡åã«é²ãããšã¯ã§ããŸããã
ç§ã¯æ··ä¹±ããŠããŸããæãŸãããŠãŒã¹ã±ãŒã¹ã¯äœã§ããïŒ äžè¬ã«ã shouldComponentUpdate
ã¯ãUIã®å€æŽã«ã€ãªããæŽæ°ããããã¯ããããã«äœ¿çšããªãã§ãã ããã ããã¯ãäžå¿
èŠãªèª¿æŽäœæ¥ãåé¿ã§ããããã«ããããã®æé©åã¡ã«ããºã ãšããŠçŽç²ã«æå³ããããã³ãã§ãã
@jimfbãã ããRelayã§ãããæ£ç¢ºã«è¡ãããã«ãã€ãŸããæ°ããããŒã¿ã®ããŒãäžã«æŽæ°ããããã¯ããããã«ããã§ã«<StaticContainer>
ã䜿çšããŠããŸãã
ãŠãŒã¶ãŒããªã³ã¯ãã¯ãªãã¯ããŠãæ°ããã«ãŒããããŒã/ã¹ã¯ããã¢ãŠããããããã«ããªã¬ãŒãããšãããŠãŒã¹ã±ãŒã¹ããããšæããŸãã ãããè¡ãããŠããéãã¢ã€ãã¢ã¯å€ãã«ãŒãäžã®ãã¹ãŠã®çžäºäœçš/æŽæ°ããããã¯ããããšã§ããããã¯ãæ°ããã«ãŒãã®ããŒããå®äºãããšã¹ã¯ããã¢ãŠããããŸãã
ããã¯çŸåšãæ°ããã«ãŒã¿ãŒã®ç¶æ
ãèªã¿èŸŒãŸããŠããéãåžžã«false
ã§shouldComponentUpdate
false
ãè¿ãããšã§å®çŸãããŠããããã§ãã
@taionãªã¬ãŒã®äººãã¡ãšè©±ãããŠãããã§äœãèµ·ãã£ãŠããã®ããç解ããŸãã ããã«ã€ããŠæ確ãªçããåŸããããŸã§ããã®ææ³ãç¬èªã®ã³ãŒãã«é©çšããããšã¯ãå§ãããŸããã
cc @sebmarkbage
@jimfb
ããããããªãããããããã®ã¯ç°¡åã§ãïŒïŒ
æ°ããããŒã¿ã®ããŒããããªã¬ãŒãããšããããã©ã«ãã§ã¯ãæ°ããããŒã¿ã®æºåãã§ãããŸã§å€ãããŒã¿ãã¬ã³ããªã³ã°ãç¶ããããšããèããç§ã®ç解ã§ãã
è¿ãããšã«ãã£ãŠã false
ããshouldComponentUpdate
ããªã¬ãŒã«ãŒãã³ã³ãã/ã¬ã³ãã©ãŒã¯ãçŽåã«ãã£ããã®ã¯äœã§ãã¬ã³ããªã³ã°ãç¶æããç°¡åãªæ¹æ³ããããŸãã
ã€ã³ã¿ã©ã¯ã·ã§ã³èªäœããããã¯ããŠããã®ã§ã¯ãªããäžæçãªç¶æ ã§ã¢ããã¹ããªãŒã ããŒã¿ããã§ããããæŽæ°ããããã¯ããŠããŸãã
@taionãããç§ã¯ãããäœãããŠããã®ãç解ããŠããŸããããããç§ãã¡ããµããŒãããããã¿ãŒã³ã§ããããšã«æççã§ãã ç§ã¯ã»ãã¹ãã£ã³ãšãªã¬ãŒã®äººã ãšè©±ãããŸãããçãã¯ããããããã¯ããã¯ã§ããããããããªãã§ãã ãããã«ãªãã ãããšæããŸãã
éåžžããã®åäœãå®çŸããæ¹æ³ã¯ãå€ãå€ãç¶æ ã«ãïŒæ°ããå€ã衚瀺/å°çãããŸã§ïŒãå€ãå€ãç¶æ ããã¬ã³ããªã³ã°ããããšã§ãã
@jimfb
ãã®ãã¿ãŒã³ã¯ãäžå€ã®ããŒã¿ãªã©ã§ã®ã¿å¯èœã§ãã ïŒã¯ããŒã³åã§ããªãïŒã¹ããŒããã«ãªããžã§ã¯ããããå Žåããã®ãã¿ãŒã³ã«åŸãããšãã§ããªãå ŽåããããŸãã ãªã¬ãŒã«ã¯ãã®åé¡ããªãã®ã§ã¯ãªãããšæããŸãããReactRouterã®çŸåšã®å®è£ ã«ã¯ãã®åé¡ããããŸãã
äžè¬çãªéåæããŒã¿ã©ã€ãã©ãªã®å Žåãããã¯ããªãäžè¬çã§äŸ¿å©ãªãã¿ãŒã³ã®ããã§ãã
@taionããªããæ€èšããŠããã¢ãããŒãã¯ãç¹ã«å¯å€ããŒã¿ãããå Žåãç§ã«ã¯ããã«ãšã©ãŒãçºçããããããã§ãã ããŒã¿ãå€æŽå¯èœã§ããå Žåãåãã©ã³ãã ã«æŽæ°ãããããšããã競åç¶æ ã«ãªãïŒã€ãã³ããã³ãã©ãŒãã³ã³ããã¹ãã®å€æŽã匷å¶æŽæ°ãªã©ã®ããïŒãã³ãŒããéåžžã«äºæž¬äžèœã«ãªããŸãã äœäººãã®äººã ãšåæããŠããããç解ãããŠãã ããã ãã®ãã£ã¹ã«ãã·ã§ã³ã®çµæãæçš¿ããŠããªãå Žåã¯ãæ°æ¥ä»¥å ã«pingãéä¿¡ããŠãã ããã
StaticContainerã®ãŠãŒã¹ã±ãŒã¹ã¯ããã®ãã¿ãŒã³ã§å¯ŸåŠããå¿ èŠããããã®ã§ã¯ãªããšæããŸãã å¥ã®æ©èœã®å¯äœçšããå¹æãåŸãããšããã®ã¯äžå®å®ãªæ¹æ³ã®ããã«èãããŸãã å®éã«èŠæ±ãããŠãããã®ãæ瀺çã«ãµããŒãããæ¹ãã¯ããã«è¯ãã§ãããã
ãã®å Žåãäžéšã®äœã¬ãã«ã®Reactã©ã€ãã©ãªã¯ãã¢ã³ããŠã³ããã€ã³ã¿ãŒã»ããããReactããªãŒã®ã³ã³ããŒãã³ãããçããDOMãåãé¢ããæ¥ç¶ãåæããã¢ã³ããŠã³ãã®ã©ã€ããµã€ã¯ã«ãçµäºãããŸã§å»¶æããæ¹æ³ãæãã§ããããã§ãã
ããã¯ãæ瀺çãªã€ã³ã¿ãŒãã§ã€ã¹ã§ãµããŒãããå¿ èŠãããäœã¬ãã«ã®æ©èœã ãšæããŸãã ãªã³ã¯ãåæããã³ã³ããŒãã³ãã®ã¢ã³ããŠã³ããŸãã¯ã¢ã³ããŠã³ããã€ã³ã¿ãŒã»ããããäœããã®æ¹æ³ã«ãããåŒã³åºãå ã¯ãã°ããã®éãåºã«ãªãã³ã³ããã¹ããæ··ä¹±ãããåŒã³åºããããšãã«ã¢ã³ããŠã³ãã®ã©ã€ããµã€ã¯ã«ãããŒãåéããé¢æ°ãè¿ããŸãã
ReactããåæãããDOMããŒããç¹å®ã®å Žæã«ä¿æããå¿ èŠãããããšãReactã«æ瀺çã«éç¥ããããã«ããã®APIã䜿çšã§ããç¹å¥ãªåœ¢åŒã®ãã©ã°ã¡ã³ããŸãã¯ãã¬ãŒã¹ãã«ããŒãå¿ èŠã«ãªãå ŽåããããŸãã
ããã¯ãè¶ ç¹å¥ãªå éšããŒããªãã§ã¯ããããŸããã ããããåã³ãnoscriptãšããŠã¬ã³ããªã³ã°ããïŒnullãªã¿ãŒã³ã®å žåçãªreactããã¯ãªã©ïŒããã®nextSiblingããã®å Žæã«ä¿æãããã¹ãDOMããŒãã§ããããšã宣èšããç¹å¥ãªäœã¬ãã«ã¿ã€ãã®reactããŒãã®ã¢ã€ãã¢ããããããã§ãªããã°Reactã«ãã£ãŠç¡èŠãããã®ã¯ãä»ã®ããŸããŸãªãã°ã®ä¿®æ£ã«åœ¹ç«ã€å¯èœæ§ã®ããéåžžã«èå³æ·±ãããŒãã¿ã€ãã§ãã
@taionããããŸããããªã¬ãŒããŒã ã®1人ãšãä»ã®2人ã®Reactã®äººãšè©±ãããŸããã ããã¯è¯ããã¿ãŒã³ã§ã¯ãªãããšã«ç§ãã¡ã¯çåæããŠããŸãã ããªãã§ãã ããã æŽæ°ãåŸ ã£ãŠããéã«ç¶æ ã䜿çšããŠããŒã¿ãä¿åããããšãå ¬åŒã®è§£æ±ºçã§ãããã®ãŠãŒã¹ã±ãŒã¹ã«é©ããAPI /æšå¥šäºé ãèŠã€ãããŸã§ã¯ã
ç§ã¯ããã«å¯ŸåŠããããšãã§ããŸã-ãšã«ãããã®ãã¿ãŒã³ã®äœ¿çšããé¢ããããšãã§ããããã«ãReactã«ãŒã¿ãŒåŽã§ããã€ãã®ããšãã¯ãªãŒã³ã¢ãããããšæããŸãã
ããããšãïŒ
ãŸãããã1ã€è³ªåãè¿œå ããããšæããŸãã ç§ã¯ãã®ãããªãã®ãæã£ãŠããŸãã
var BlogPosts = React.createClass({
getChildContext: function() {
return {
currentBlogPost: this.props.currentBlogPost,
currentUser: this.props.currentUser
};
},
childContextTypes: {
currentBlogPost: React.PropTypes.object,
currentUser: React.PropTypes.object
},
render: function() {
return <BlogPosts blogPosts={this.props.blogPosts}/>
}
});
function select(state) {
const { blogPosts, currentUser, currentBlogId } = state;
console.log( state.blogs[currentBlogId]);
// first time the above is undefined and then blogs get populated and I have the object;
return { blogPosts, currentUser, currentBlogPost: state.blogs[currentBlogId] };
};
export default connect(select)(BlogPosts);
çŸåšãBlogPostsã³ã³ããŒãã³ãã«ã¯ãblogPosts [index] .typeãããã¹ããç»åããŸãã¯é³å£°ã®ãããã§ãããã«å¿ããŠãBlogPostTextãBlogPostImageãPodCastããããŸãã
ç§ããã®ããã«ææè ããã§ãã¯ããã³ã³ããŒãã³ãã®1ã€ã§ã
var BlogPostText = React.createClass({
canDeleteMemory: function(post, blog, user) {
return user && (blog.userId == user.id || post.userId == user.id)
},
render: function() {
let isOwner = this.canDeleteMemory(this.context.currentBlogPost, post, this.context.currentUser);
return isOwner ? <a>Delete</a> : null;
}
});
ããã°ãå®çŸ©ãããŠããªããããblog.userIdã§åžžã«ãšã©ãŒãçºçããŸã...ãããã£ãŠããã®ããã«æ¡ä»¶ãå€æŽããŸãlet isOwner = this.context.currentBlogPost && this.canDeleteMemory(this.context.currentBlogPost, post, this.context.currentUser);
ããããåé€ã¢ã€ã³ã³ã¯è¡šç€ºãããŸãã...ããããBlogPostTextã³ã³ããŒãã³ããredux selectã§ã©ããããŠthis.props.currentBlogPostã䜿çšãããšãcontextTypeã䜿çšãã代ããã«ãæ£åžžã«æ©èœããŸãã
ãããã£ãŠãã³ã³ããã¹ãã®å€æŽã¯åã¬ã³ããªã³ã°ãªã©ãããªã¬ãŒããŸãã...ãŸãã¯ç§ã¯ãããééã£ãŠäœ¿çšããŠããŸããïŒ
@ aghosh47ã³ã³ããã¹ãã®å€æŽã¯åã¬ã³ããªã³ã°ãããªã¬ãŒãããšæããŸããããšããžã±ãŒã¹ãèŠéããå¯èœæ§ããããŸãã åé¡ã瀺ãç°¡åãªjsfiddleãäœæã§ããã°ã調æ»ã«åœ¹ç«ã¡ãŸãã
ãŸããgithubã®åé¡ãå¯èœãªéã話é¡ã«ããŠããããã®ã§ãæ°ããåé¡ã«æçš¿ããŠãã ããã
@jimfbããããŸãããã³ãŒããå確èªããäœãã足ããªããã©ããã確èªãã解決ã§ããªãå Žåã¯æ°ããã¹ã¬ãããäœæããŸã
@jimfbåå«ãåããŠã³ãããã«èŠªãå€æŽããããšã«ã€ããŠã®è°è«ã¯ã©ãã«ãããŸããïŒ ç§ã¯ãã®ãããªããšãäºæããŠããªãã£ãã®ã§ãäºæããªãåäœã®å€æŽãå°å ¥ãããå ŽåãReactã®å°æ¥ã®ããŒãžã§ã³ã§ã¢ããªãçºçããå¯èœæ§ãããã®ã§ã¯ãªãããšå¿é ããŠããŸãã ã ããç§ã¯ãã®è°è«ã«ã€ããŠåžžã«æ å ±ãåŸãã
ç§ãå¶ç¶èŠã€ããã³ã³ããã¹ãã®ãã1ã€ã®ãŠãŒã¹ã±ãŒã¹ã¯ãã³ã³ããŒãã³ããè€æ°ã®é·ç§»ã°ã«ãŒãã®äžã«ããå Žåã§ãã ããšãã°ãæåã«ããŠã³ãããã®ã§ã¯ãªãããã¹ãŠã®ç¥å é·ç§»ã°ã«ãŒããå®éã«è¡šç€º/å ¥åããããšãã«å ¥åã«ãã©ãŒã«ã¹ã§ããããã«ããããšæããŸãã ã³ã³ããã¹ããä»ããŠæž¡ãããã¡ãœãããä»ããŠè¡šç€º/å ¥åãããç¥å ã®ã³ãŒã«ããã¯ãç»é²ããã®ãæã䟿å©ãªæ¹æ³ã§ãã
@ jedwards1211æ£çŽãªãšãããã©ãã§è°è«ãããã®ãèŠããŠããŸããã ããã察é¢ã§ã®è°è«ã§ãã£ãå¯èœæ§ã¯ååã«ãããŸããããªã³ã©ã€ã³ã§å€ãã®èŠªãåãæ»ãè°è«ããããããããããã§èŠã€ããã§ãããã
ping @ aghosh47
ããã
@jimfbãŸããåé¡ã¯è§£æ±ºãããŸãã...ã³ãŒãã«ãšã©ãŒããããã³ãŒããæžãã人ã¯catchã䜿çšããŠ
ãããã£ãŠã芪ã®å°éå ·ãå€æŽãããå Žåãåã®contextTypeã¯åæ ãããŸã...ããããšãã
ãããã®ã°ããŒãã«ãæ ŒçŽãã1ã€ã®ãªããžã§ã¯ãã«ãŠã£ã³ããŠã䜿çšããããšã®æ¬åœã«äœãåé¡ã«ãªã£ãŠããŸããïŒ
@cauburtinããã¯ãäœæããããã¹ãŠã®ã³ã³ããŒãã³ããåãã°ããŒãã«ç¶æ ãå ±æãããµãŒããŒåŽã§ã¯å®éã«ã¯æ©èœããŸããã ã³ã³ããã¹ãã¯ãåäžã®ããªãŒã«ã¬ã³ããªã³ã°ããããã¹ãŠã®ã³ã³ããŒãã³ãã«å¯ŸããŠã°ããŒãã«ã§ãããããªãŒèªäœã«å¯ŸããŠããŒã«ã«ã§ãã ã°ããŒãã«ãªç¶æ ãšã¯ç°ãªããä»ã®æšã«æŒããããšã¯ãããŸããã
ã¡ãªã¿ã«ããã®è³ªåã¯åé¡ãšã¯äœã®é¢ä¿ããããŸãããã ïŒãŠã£ã³ã¯ïŒ
@fatfiszãŠãŒã¹ã±ãŒã¹ã¯ããããããŸãããã¯ã©ã€ã¢ã³ãã§ã®ã¿ãŠã£ã³ããŠããããã£ãæãrequireïŒ 'foo'ïŒã䜿çšããããšãã§ããŸãã
ãšããã§ãç§ã®ã¢ããªã§ã¯ãã³ã³ããã¹ããäžæ確ã«èŠããã»ãšãã©ãã¹ãŠã®ã³ã³ããŒãã³ããç§ã®å Žåã¯ããã䜿çšããŠããããããã¹ãŠã®ã³ã³ããŒãã³ãã®å°éå ·ã§ãªããžã§ã¯ããæž¡ãããšã«ãªããŸãã
ããããšã
äœãåé¡ãªã®ã§ããïŒ
// context.js
module.exports = { // sorry for using commonjs, since most of you use import/export I guess
// some shared variables, initialized and used by components
};
次ã«requireïŒ './ context.js'ïŒ; ã³ã³ããã¹ãå€æ°ãšã¡ãœããã«ã¢ã¯ã»ã¹ããå¿ èŠããããã¹ãŠã®ãã¡ã€ã«
ã«ãã»ã«åã¯ããããå°éãããŠããŸãããããŸã..
ïŒ@gaeronïŒ
@cauburtinã³ã³ããã¹ãã¯ã次ã®çç±ã§åœ¹ç«ã¡ãŸãã
1ïŒã¢ãžã¥ãŒã«ã®ãšã¯ã¹ããŒããšã¯ç°ãªããå€æŽããŠåã¬ã³ããªã³ã°ãããªã¬ãŒã§ããŸã
2ïŒèŠªããªãŒããŒã©ã€ãã§ããŸããããã¯æã䟿å©ãªæ©èœã§ãã
3ïŒã·ã³ã°ã«ãã³ã§ããå¿
èŠã¯ãããŸãããããã¯ãããŒã¿ãåé¢ãããµãŒããŒã¬ã³ããªã³ã°ã«åœ¹ç«ã¡ãŸãã
2ïŒãš3ïŒã«åæããŸãã
1ïŒãŸã ãããè¡ãå¿
èŠã¯ãããŸããããã³ã³ããã¹ãå
ã§reactã€ã³ã¹ã¿ã³ã¹ãæž¡ãããšãã§ããŸãïŒããã¯æªãç¿æ
£ã ãšããè³ã«ããŸãããããããããæããããããŸããããããã¥ã¡ã³ãã«ãèšèŒãããŠããŸãïŒæãåºããŠãã ããå¿
èŠã«å¿ããŠãReactã³ã³ããŒãã³ãå
šäœãå°éå
·ã«æž¡ãããšãã§ããŸãïŒãã®å Žåãå°éå
·ã¯ä»£ããã«ãã®ã·ã³ã°ã«ãã³ã³ã³ããã¹ãã«ããããšãã§ããŸãïŒãç§ã«ãšã£ãŠãReactã¯ãã¥ãŒãã€ãã³ããªã¹ããŒãããã³ïŒããã/ã«ãŒãïŒãªã¢ãŒãã³ã³ãããŒã«ã§ãããã®å
±æã³ã³ããã¹ãã¯ããªã¢ãŒãã³ã³ãããŒã«ãžã®å
±æã¢ã¯ã»ã¹ã«ãªããŸãããµãã³ã³ããŒãã³ãã¯ãå°éå
·ãå€æŽããããšãã«æŽæ°ã§ããå Žåã«ãã£ãŠã¯ãã®ã°ããŒãã«ã³ã³ããã¹ãã«ã¢ã¯ã»ã¹ããŠäœ¿çšã§ããŸãïŒç¹ã«ãã®å Žåãã·ã³ã°ã«ãã³ã®ãã¡ã³ã§ã¯ãããŸããã 'åãæž¡ããåå©çšã§ããŸããå°éå
·ã®æ¹æ³ã§ã€ã³ã¹ã¿ã³ã¹ã«åå¿ããŸããããã圹ç«ã€å Žåããã®ãåãæž¡ããã¯ãå
±éã®èŠªã¯ã©ã¹ãŸãã¯æ§æã«ãã£ãŠå€ããå°ãªããèªåå/é衚瀺ã«ã§ããŸãïŒ
ãããããŸãæžããŠãããšãã·ã³ã°ã«ãã³ã³ã³ããã¹ãã®ã¢ã€ãã¢ãæªãããšã«æ°ã¥ããŸã:)
çŽããããã®ã¯ãReactããã¥ã¡ã³ãã¯ã³ã³ããã¹ãã䜿çšããããã«ããŸãæåŸ ããªãããšã§ããå®éã«ã¯ãªãã·ã§ã³ã®å°éå ·ã®ãããªãã®ã§ãèŠæ±ãããšãã«ååŸããŸããïŒ
ç§ã¯reactnativeã䜿çšããŠAndroidã«Drawerãå®è£ ããããã¯ãŒã¡ãã¥ãŒã³ãŒããšããã¯ãŒã³ã³ãã³ãã³ãŒãçšã«ç°ãªããã¡ã€ã«ãäœæããããšããŠããŸãã ãããè¡ãããã«ãç§ã¯å¥ã®reactã³ã³ããŒãã³ããäœæããŸããã ãããã®ãã¡ã€ã«ã§ãã¹ãŠã®äœæ¥ãè¡ãããšãã§ããŸãããã³ã³ããŒãã³ããã¡ã€ã«ã§ããã¯ãŒã®äžéšã®æäœãå®è¡ããã«ã¯ããã¯ãŒåç §ãå¿ èŠã§ãã ãããç§ã®ã³ãŒãã§ããopenDrawerïŒïŒã®ãããªããã¯ãŒã¡ãœããã䜿çšããããã«ãããã¯ãŒã®åç §ãä»ã®ã³ã³ããŒãã³ããã¡ã€ã«ã«æž¡ãã«ã¯ã©ãããã°ããã§ããã
'use strict';
var React = require('react-native');
var { View,
StyleSheet,
TouchableHighlight,
} = React;
var DrawerLayout = require('react-native-drawer-layout');
var DrawerScreen = require('./DrawerScreen');
var DrawerMenu = require('./DrawerMenu');
var DrawerLayoutExample = React.createClass({
render: function() {
var navigationView = (
<View >
<DrawerMenu/>
</View>
);
return (
<DrawerLayout
onDrawerSlide={(e) => this.setState({drawerSlideOutput: JSON.stringify(e.nativeEvent)})}
onDrawerStateChanged={(e) => this.setState({drawerStateChangedOutput: JSON.stringify(e)})}
drawerWidth={200}
ref={(drawer) => { return this.drawer = drawer }}
keyboardDismissMode="on-drag"
renderNavigationView={() => navigationView}>
<View style={styles.container}>
// Here is content component for drawer, need to refer drawer reference
<DrawerScreen ></DrawerScreen>
</View>
</DrawerLayout>
);
}
});
var styles = StyleSheet.create({
container: {
alignItems: 'center',
justifyContent: 'center',
flex: 1,
flexDirection: 'column',
},
});
module.exports = DrawerLayoutExample;
DrawerScreen.js
'use strict';
var React = require('react-native');
var {
AppRegistry,
StyleSheet,
Text,
View,
Dimensions,
Image,
TouchableHighlight,
TextInput,
} = React;
var deviceWidth = Dimensions.get('window').width;
var DrawerScreen = React.createClass({
render: function() {
return (
<View style={styles.container}>
<Text style={styles.welcome}>Content!</Text>
<TouchableHighlight onPress={() => this.state.openDrawer()}>
<Text>Open drawer</Text>
</TouchableHighlight>
<TextInput style={styles.inputField} />
</View>
);
},
});
var styles = StyleSheet.create({
container: {
alignItems: 'center',
justifyContent: 'center',
flex: 1,
flexDirection: 'column',
},
inputField: {
backgroundColor: '#F2F2F2',
height: 40,
},
});
çŸåšãç§ã¯reduxã䜿çšããŠã¡ãã£ã¢ã¯ãšãªããµãã¹ã¯ã©ã€ãããã³ä¿åããŠãããããã³ã³ããŒãã³ãã¯é»è©±ãªã©ã§ç°ãªãã¬ã³ããªã³ã°ã決å®ã§ããŸãã
ã€ãŸããçŽç²ãªã³ã³ããŒãã³ãã«ã¯ã¹ãã¢ãžã®ãµãã¹ã¯ãªãã·ã§ã³ãå¿ èŠã§ãããReduxã®ãµãã¹ã¯ã©ã€ãã¢ãã«ã¯èšããŸã§ããªãããã®ãããªåãã¯ç§ã«ã¯ééã£ãŠããŸãã
ãã®å Žåãã³ã³ããã¹ãã¯ãããä¿åããã®ã«ã¯ããã«è¯ãå Žæã ãšæããŸããããã®åé¡ã«ããç§ã¯ããã䜿çšã§ããŸããã
@wmertensããã¯componentDidMountã§å®è¡ããå¿ èŠããããã®ã§ãããïŒ
@cauburtinã¯
ãµã€ãºå€æŽã®å Žåã¯ãcomponentDidMountã§ãªãã¹ã³ã§ããŸããèšèªã®å Žåã¯ããã¹ãŠãåã¬ã³ããªã³ã°ããŸãã
次ã®ãããªã¯ãŒã«ãªãã®ãããå Žåã¯ããã¹ãŠã®ãµã€ãºå€æŽããžãã¯ãç¹°ãè¿ããªãæ¹ãããã§ãã
apoå
šäœããªãã¹ã³ããŠãµãŒããŒåŽã§åäœããreduxactioncreator
ããŸãã«ãâŠ
state.response.isPhone / isPrerender / screenwidthãªã©ããããŸãããµãŒããŒäžã§ã
ãŠãŒã¶ãŒãšãŒãžã§ã³ãã«åºã¥ããŠçºéããŸãã ãã¡ããšããã
éã2016幎4æ29æ¥ã«ã¯ã16:52ã·ãªã«Auburtin [email protected]
æžããŸããïŒ
ãµã€ãºå€æŽã«ã€ããŠã¯ãcomponentDidMountã§èãããšãã§ããŸããèšèªã«ã€ããŠã¯ã
ãã¹ãŠãåã¬ã³ããªã³ã°ããâ
ããªããèšåãããã®ã§ããªãã¯ãããåãåã£ãŠããŸãã
ãã®ã¡ãŒã«ã«çŽæ¥è¿ä¿¡ããããGitHubã§è¡šç€ºããŠãã ãã
https://github.com/facebook/react/issues/2517#issuecomment -215742327
ãããŒã
ïŒã¢ãã€ã«ã§å
¥åãç°¡æœããèšãèš³ïŒ
ãããããããããªãŒã®äžçªäžã«ããåçŽãªkey = {lang}ã§ååã§ãã
èšèªã ãã ããã¢ãã¡ãŒã·ã§ã³ã®ãããµã€ãã«ã¯ããŸãé©ããŠããŸããã
2016幎4æ29æ¥éææ¥ãååŸ6æ7åWout Mertenswoutã [email protected]ã¯æžããïŒ
次ã®ãããªã¯ãŒã«ãªãã®ãããå Žåã¯ããã¹ãŠã®ãµã€ãºå€æŽããžãã¯ãç¹°ãè¿ããªãæ¹ãããã§ãã
apoå šäœããªãã¹ã³ããŠãµãŒããŒåŽã§åäœããreduxactioncreator
ããŸãã«ãâŠ
state.response.isPhone / isPrerender / screenwidthãªã©ããããŸãã
ãµãŒããŒããŠãŒã¶ãŒãšãŒãžã§ã³ãã«åºã¥ããŠãã£ã¹ãããããŸãã ãã¡ããšãããéã2016幎4æ29æ¥ã«ã¯ã16:52ã·ãªã«Auburtin [email protected]
æžããŸããïŒãµã€ãºå€æŽã«ã€ããŠã¯ãcomponentDidMountã§èãããšãã§ããŸããèšèªã«ã€ããŠã¯ã
ãã¹ãŠãåã¬ã³ããªã³ã°ããâ
ããªããèšåãããã®ã§ããªãã¯ãããåãåã£ãŠããŸãã
ãã®ã¡ãŒã«ã«çŽæ¥è¿ä¿¡ããããGitHubã§è¡šç€ºããŠãã ãã
https://github.com/facebook/react/issues/2517#issuecomment -215742327ãããŒã
ïŒã¢ãã€ã«ã§å ¥åãç°¡æœããèšãèš³ïŒ
ãããŒã
ïŒã¢ãã€ã«ã§å
¥åãç°¡æœããèšãèš³ïŒ
ç§ã¯ããªãã®ããã§ãããããµã€ãºå€æŽã€ãã³ããªã¹ããŒã¯å®éã«ã¯å®äŸ¡ã§ãããåãã¿ã€ãã®ãªã¹ããŒãããããããããšã¯æªãããšã§ã¯ãªããšæããŸã
ããããå®ãã®ã¯ééããããŸããããã£ãšç°¡åãªã ãã§ãã
ãµã€ãºå€æŽãã³ãã©ãŒã管çãããããthis.context.isPhoneãèšè¿°ããŸãã
18:38ã·ãªã«Auburtinã§éã2016幎4æ29æ¥ã«ã¯[email protected]
æžããŸããïŒ
ç§ã¯ããªãã®ããã§ãããããµã€ãºå€æŽã€ãã³ããªã¹ããŒã¯å®éã«ã¯å®ãã§ããç§ã¯ããŸãã
åãã¿ã€ãã®ãªã¹ããŒãããããããã®ã¯æªãããšã ãšæããŸãâ
ããªããèšåãããã®ã§ããªãã¯ãããåãåã£ãŠããŸãã
ãã®ã¡ãŒã«ã«çŽæ¥è¿ä¿¡ããããGitHubã§è¡šç€ºããŠãã ãã
https://github.com/facebook/react/issues/2517#issuecomment -215797819
ãããŒã
ïŒã¢ãã€ã«ã§å
¥åãç°¡æœããèšãèš³ïŒ
åé¡ã¯ãreact-reduxã=== ReactElementãè¿ããrenderã¡ãœãããããæŽæ°ãªããã§ããããšãéç¥ããããšã§ãã ãã ããå®éã«ã¯ããã®ã·ã§ãŒãã«ããã¯ãã³ã³ããã¹ãã===ã§ããå Žåã«ã®ã¿ãããããã³ã³ããŒãã³ãããå¶åŸ¡ããããšã¯ã§ããŸããã ãããããªãããããã®ããã«è¡ãããã®ãå®å šã«ã¯ããããŸããã ãããããreact-reduxã®äººãã¡ãžã®è³ªåã§ãã
Reduxã®æäœã«ã€ããŠã¯ã httpsïŒ//github.com/reactjs/react-router/issues/470ããã³PRã§ã®ç¶ç¶çãªè°è«ãåç §ããŠ
ããæç¹ã§ã httpsïŒ//github.com/reactjs/react-router/issues/3484ãå®éã«è§£æ±ºããŠãä»ã®ã©ã€ãã©ãªããããç°¡åã«äœ¿çšã§ããããã«ããŸãããåœåã®èããããå°é£ã§ãã
react-routerã§çŸåšäœ¿çšãããŠãããœãªã¥ãŒã·ã§ã³ã«ã€ããŠã®æ³šæã ããã¯æ©èœããŸãããã€ã©ã€ã©ããããã¯ã§ãã ã³ã³ããã¹ããã€ã³ãã¬ãŒã¹ã§å€æŽãããããŠãŒã¶ãŒãã³ã³ããã¹ããªããžã§ã¯ãéã®åç §IDãç¶æããå¿ èŠããããŸãã
ã©ã¡ããçŽ æŽãããããšã§ã¯ãããŸããããæ¬åœã®åé¡ã¯ãã³ã³ããŒãã³ãéå±€ã®åšãã®ã¯ãŒã ããŒã«ã³ã³ããã¹ããããŒã¿ãããŒã®Reactã³ã³ããŒãã³ãã¢ãã«ã®æãåªãããããã®1ã€ãå£ãããšã§ããã€ãŸããäžéïŒæš©éãæã€ïŒã®ãã¹ãŠãã³ã³ããã¹ãã調æŽã§ãããšããããšã§ãã ã ã垯åå€ãã³ã³ããŒãã³ããä»ããŠã³ã³ããã¹ããæž¡ãããšã«ãããã³ã³ããã¹ããåã«ãããã³ã°ããããã«å¥ã®ã¡ã«ããºã ã䜿çšããå¿ èŠããããŸããããã§ãªãå ŽåããããŸãã 確ãã«ããã¯_äžè¬çãª_ãŠãŒã¹ã±ãŒã¹ã§ã¯ãããŸãããããšã«ããã³ã³ããã¹ãã®äœ¿çšæ³ã®ãã¹ãŠã説æããŠããŸã
2ã€ã®ã¢ãããŒãã®éã§ã¯ãå°ãªããšã_ããçšåºŠ_äžè¬çã§ãã...ä»ã®ãšããã§ããæåã®ããšã ãšæããŸãð
ã¯ãindedïŒPãããã¯ãŸã æé©ã§ã¯ãªããã³ã³ããã¹ããäžè¬çã«æ©èœããæ¹æ³ãä¿®æ£ããããã®è¯ã代æ¿åã§ã¯ãªãããšã«æ³šæããŠãã ãã
@jquenseçãäžã®ã³ã³ããŒãã³ãã¯ã contextTypes
ã宣èšããŠäžããã³ã³ããã¹ããªããžã§ã¯ãããªãã¹ã³ãã childContextTypes
/ getChildContext()
ã宣èšããŠãã®ã³ã³ããã¹ãã®å€æŽãããã³ããŒãæäŸããããšãã§ããŸããã§ãããã®åå«ïŒ
@DarylCantrellã³ã³ããŒãã³ãã¯ãèŠæ±ããã³ã³ããã¹ãã®åéšåã«ãªããã€ã³ããå¿
èŠããããŸãã contextTypes
ã宣èšããŠãã³ã³ããã¹ãå
šäœãã³ã³ããŒãã³ãã«ããŒã«ã»ãŒã«ã§æž¡ãæ¹æ³ã¯ãããŸããã
ãããã«ãããç§ã®ãã€ã³ãã¯ãã³ã³ããã¹ãã®ãããã調æŽããããšã¯å¯èœã§ãããã³ã³ããã¹ãã®åªããæ©èœã§ããããã®åé¡ã®åé¿çã«ãã£ãŠå£ããŠãããšããããšã§ã
@ 1000hzãã¡ããã§ããã圌ã¯ãã³ã³ããã¹ãã®äžéšã調æŽãããããšã«ã€ããŠè©±ããŠããŸããã ãã®ã·ããªãªã§ã¯ããå šäœãã®ã³ã³ããã¹ããååŸããå¿ èŠã¯ãªãããªãŒããŒã©ã€ãããäºå®ã®éšåã ããååŸããå¿ èŠããããŸãã
@DarylCantrellãã£ãšãç§ã¯ããªãã®æå³ãèªã¿ééããŸããã
ãã®åé¡ã®ãã«ãªã¯ãšã¹ããéä¿¡ããŸããïŒïŒ7213
ïŒãã«ãªã¯ãšã¹ãããïŒ
ã³ã³ããã¹ãã䜿çšããŠããã±ãŒã«ãšã«ãŒãã£ã³ã°æ
å ±ãäŒéããŠããŸãã ç§ã®åé¡ã¯ãã³ã³ããã¹ããå€æŽããããšãäžéšã®çŽç²ã³ã³ããŒãã³ãããµãããªãŒã®ã¬ã³ããªã³ã°ãåæ¢ããããšã§ãïŒçŽç²ã³ã³ããŒãã³ãã¯ç¶æ
ãšå°éå
·ã®ã¿ããã§ãã¯ããããïŒã ããã¯ãåé¡ïŒ2517ã«ãããšãå€ãã®äººã«ãšã£ãŠåé¡ã§ãã
äžéã³ã³ããŒãã³ãã®ã³ã³ããã¹ãããã¹ãã³ã°ããªãæ¹ããã¹ãã³ã°ãããåªããŠãããå®çŸ©ãããcontextTypesã¯æ€èšŒã«ã®ã¿äœ¿çšããããã£ã«ã¿ãªã³ã°ã«ã¯äœ¿çšãããªããšç§ã¯èããŸããã ããã¯propTypesã®åäœãšäŒŒãŠãããæå®ãããããããã£ã¯æ€èšŒãããŸãããæå®ãããŠããªãããããã£ã¯åŒãç¶ãã³ã³ããŒãã³ãã§äœ¿çšã§ããŸãã ãã®æŽæ°ãåæ ããããã«ãã¹ããæŽæ°ããŸããã
ã³ã³ããã¹ãã«é¢å¿ã®ãªãã³ã³ããŒãã³ãã¯éåžžãã³ã³ããã¹ãåŒæ°ã䜿çšããªããããã³ã³ããã¹ãããã¹ã¯ããªããŠããæ¢åã®ã³ã³ããŒãã³ããç Žæããããšã¯ãããŸããããã ãããã®ã³ã³ããŒãã³ããã³ã³ããã¹ããã©ã¡ãŒã¿ãæªå®çŸ©ã§ããããšãæ瀺çã«ãã§ãã¯ããŠããå Žåãé€ããŸãã ãã ããããã«ãããæŽç·ŽãããçŽç²ã³ã³ããŒãã³ããããšãã°ãshouldComponentUpdateã®ç¶æ ãå°éå ·ãã³ã³ããã¹ããæ¯èŒããContextAwarePureComponentã®æ©äŒãçãŸããã³ã³ããã¹ããæŽæ°ãããŠçŽç²ã³ã³ããŒãã³ããåã¬ã³ããªã³ã°ãããããã«ãªããŸãã
ç§ã¯çŸåšãã©ãžãŠã ãšããã€ãã®react-bootstrapã³ã³ããŒãã³ãã䜿çšããŠããã®ãããã§éçºãå®è¡ããŠããŸãããåé¡ã¯çºçããŸããã§ãã
ããã«ã¡ã¯@bvella ãç§ã¯ããªãããã®ãã«ãªã¯ãšã¹ããæå³ãããšæããŸãïŒ7212ã§ã¯ãªãïŒ7213ã
@DarylCantrellããã§ããããããšã
https://github.com/facebook/react/pull/7213 / https://github.com/facebook/react/pull/7225ã¯è¯ããã®ã§ãããé©å¿ãããå¿ èŠããããšæããŸã
ç§ã®ç解ã§ã¯ãã³ã³ããã¹ãã¯ã°ããŒãã«å€æ°ã®ãããªãã®ã§ããããã䜿çšãå¶éããå¿
èŠããããŸãã
ãã ããããã¯ããŠãŒã¶ãŒãã°ããŒãã«å€æ°ã«ã¢ã¯ã»ã¹ããåã«å®£èšãè¡ãå¿
èŠããããšããæå³ã§ã¯ãããŸããã
ã°ããŒãã«å€æ°ã¯ã宣èšãããã©ããã«é¢ä¿ãªããåžžã«ã¢ã¯ã»ã¹å¯èœã§ããå¿
èŠããããŸãã
contextType宣èšã¯ãpropTypesãšåæ§ã«ãæ€èšŒç®çã§ã®ã¿æ©èœããå¿ èŠããããŸã
ç¹°ãè¿ãã«ãªããŸããããè¿·æããããããŸãã®ã§ããäºæ¿ãã ããã
ïŒç§ã¯react Relayã䜿çšããŠããããã¹ãŠã®ã³ã³ããã¹ããªããžã§ã¯ããé衚瀺ã«ããŸãïŒ
ç§ã¯https://github.com/facebook/react/pull/7225#issuecomment-276618328ã«ã³ã¡ã³ãããã³ã³ããã¹ãã¯ãã¹ãŠãæŽæ°ããã ãã§ããã sCU
ã¯ãã®ã³ã³ããŒãã³ããåã¬ã³ããªã³ã°ããå¿
èŠããããã©ãããå€æããããã ãã«åœ¹ç«ã€ãšäž»åŒµããŸãã; ãã®åã¯é¢ä¿ãªãæ€èšŒãããŸãã
ãã®æ¹æ³ã§ã³ã³ããã¹ãã®æŽæ°ãè¡ããšã³ã¹ããããããŸãããããªãŒå šäœã匷å¶çã«ã¬ã³ããªã³ã°ãããããã³ã¹ããããããŸãããããã¯ãçŸåšãã³ã³ããã¹ãã®æŽæ°ãååŸããŠãã¹ãŠã®ã³ã³ããŒãã³ãã«é©çšããå¯äžã®æ¹æ³ã§ãã ã³ã³ããã¹ãã¯ããã»ã©å€åããªãã¯ãã§ãã æ¥éã«å€åããã¢ããããŒãïŒäŸïŒReduxïŒã«ã¯ããè¯ããªãã·ã§ã³ããããŸãã
çŸåšã解決çã¯ãããŸããïŒ
ãã®ã¹ã¬ãããããããããã«ãæ¢åã®ãœãªã¥ãŒã·ã§ã³ã¯ããªãæ ¹æ¬çã«å£ããŠããŸãã
ãã¹ãŠã®ã¢ããªãé
ãããã«çŸåšã®APIãä¿®æ£ããããšã¯ã§ããŸããïŒããã¯é¿ãããã§ã:-)ã
ãããã£ãŠãåããŠãŒã¹ã±ãŒã¹ãåŠçãããããããã®èšèšäžã®æ¬ é¥ããªãæ°ããAPIãææ¡ããŸãã èšç»ã§ã¯ãAPIã䞊ã¹ãŠååšãããåŸã§ãŠãŒã¶ãŒã移è¡ãããšãã«å€ãAPIã段éçã«å»æ¢ããäºå®ã§ãã
ãã£ã¹ã«ãã·ã§ã³ããã§ãã¯ããŠãã ããïŒ https ïŒ
@acdliteã¯ãæ°ããã³ã³ããã¹ãAPIïŒ https://github.com/facebook/react/pull/11818ïŒã䜿çšããŠPRãéå§ããŸãã
ããã¯ééçãšèŠãªãããšãã§ãããšæããŸãã æ°ããAPIã«ã¯ãã®åé¡ã¯ãããŸããã å€ãAPIã¯ä¿®æ£ã§ããŸãããäž»èŠãªã©ã€ãã©ãªãæ°ããAPIã«ã¢ããã°ã¬ãŒããããåŸãããæç¹ã§éæšå¥šã«ãªããŸãã
æ°ããAPIãå©çšå¯èœã«ãªãã次ã®ãã€ããŒãªReact16.xãªãªãŒã¹ã®1ã€ã§ææžåãããŸãã
@gaearonãããé »ç¹ã«èããã©ããã¯
æãåèã«ãªãã³ã¡ã³ã
éäžã§åœã®
shouldComponentUpdate
ã«ãã£ãŠãããã¯ãããããšãªããã³ã³ããã¹ãã®äŒæãå¥ã®ããªãŒãã©ããŒãµã«ã§çºçããå¯èœæ§ãããã®ã§ãããããåºæ¬çã«ã芪ã®ã³ã³ããã¹ããå€æŽããããšãã©ãã»ã©é¢ããŠããŠãããã®ã³ã³ããã¹ããåãåããã¹ãŠã®åå«ãããŒãã£ãšããŠããŒã¯ããå¿ èŠããããŸãã ç¥å ã®ã³ã³ããã¹ãã®å€æŽã¯ããã®ã³ã³ããã¹ãããªããã€ã³ããåå«ã®ç¶æ ã®å€æŽãšåãå¹æãæã€ã¯ãã§ãã芪ã®çºèšã«é¢ä¿ãªããæ°ãã
context
ãåãåãå¿ èŠããããŸãã