ããĒãéˇãéãį§ã¯setState
ãéåæã§ããįįąãįč§Ŗãããã¨ããžããã ãããĻãéåģãĢãããĢ寞ããįããčĻã¤ãããã¨ãã§ããĒããŖããŽã§ãį§ã¯ãããæ´å˛įãĒįįąãŽããã§ãããããããäģã¯å¤ãããŽãéŖããã¨ããįĩčĢãĢéããžããã ãããã @ gaearonã¯æįĸēãĒįįąããããã¨ãį¤ēãããŽã§ãįĨãããã¨æãŖãĻããžã:)
ã¨ãĢãããããčŗãĢããįįąã¯ãããĢãããžãããį°ĄåãĢ寞æã§ãããŽã§ãããšãĻã§ã¯ãĒãã¨æããžã
å¤ããŽäēēã¯åŊåãããã¯ãŦãŗããĒãŗã°åšįãŽããã§ããã¨čããĻããžãã ãããããããããŽåäŊãŽčåžãĢããįįąã§ã¯ãĒãã¨æããžãããĒããĒããsetStateãéåæãŦãŗããĒãŗã°ã¨åæããããã¨ã¯ãį§ãĢã¯äēį´°ãĒãã¨ãŽãããĢčãããããã§ãã
Component.prototype.setState = (nextState) => {
this.state = nextState
if (!this.renderScheduled)
setImmediate(this.forceUpdate)
}
åŽéããã¨ãã°mobx-react
äŊŋį¨ããã¨ããĒããļãŧãããĢã¸ãŽåæå˛ãåŊãĻãå¯čŊãĢãĒãããŦãŗããĒãŗã°ãŽéåææ§ãå°éãããžãã
į§ãæã čŗãĢããäģãŽč°čĢã¯ãããĒãã_čĻæąããã_įļæ ã§ã¯ãĒãã_ãŦãŗããĒãŗã°ããã_įļæ ãĢã¤ããĻæ¨čĢãããã¨ãããã¨ã§ãã ããããããŽååãĢãå¤ããŽãĄãĒãããããããŠããã¯ããããžããã æĻåŋĩįãĢã¯ããã¯į§ãĢã¯åĨåĻãĢæããžãã ãŦãŗããĒãŗã°ã¯å¯äŊį¨ã§ãããįļæ ã¯äēåŽãĢéĸããããŽã§ãã äģæĨãį§ã¯32æŗã§ãããææããĻãããŗãŗããŧããŗããäģåš´åãŦãŗããĒãŗã°ã§ããããŠãããĢéĸäŋãĒããæĨåš´ã¯33æŗãĢãĒããžã:)ã
īŧããããč¯ããĒãīŧåšŗčĄįˇãæããĢã¯īŧčĒåã§æ¸ããåčĒææ¸ãŽæåžãŽããŧã¸ã§ãŗãå°åˇãããžã§_čĒã_ãã¨ãã§ããĒãå ´åãããã¯ããĒãåäģã§ãã ãã¨ãã°ãã˛ãŧã ã¨ãŗã¸ãŗã¯ãã˛ãŧã ãŽãŠãŽįļæ ãæŖįĸēãĢãŦãŗããĒãŗã°ããããŠãŽããŦãŧã ããããããããããĢã¤ããĻãŽããŖãŧãããã¯ãæäžããã¨ã¯æããžããã
čåŗæˇąãčĻŗå¯īŧ2åš´éã§mobx-react
čĒ°ãį§ãĢčŗĒåãããžããã§ããīŧį§ãŽčĻŗæ¸ŦéããŦãŗããĒãŗã°ãããĻãããã¨ããŠãããŖãĻįĨããã¨ãã§ããžããīŧ ããŽčŗĒåã¯ããžãéĸéŖæ§ããĒãããã§ãã
ãŠãŽããŧãŋããŦãŗããĒãŗã°ãããããįĨããã¨ãéŠåã§ããã¨ããããã¤ããŽãąãŧãšãĢééããžããã į§ãčĻããĻãããŽã¯ããŦã¤ãĸãĻããŽãããĢããã¤ããŽããŧãŋãŽãã¯ãģãĢ寸æŗãįĨãåŋ
čĻãããå ´åã§ããã ããããããã¯didComponentUpdate
ãäŊŋį¨ãããã¨ã§ã¨ãŦãŦãŗããĢč§Ŗæąēããã setState
ãéåæã§ãããã¨ãĢåŽéãĢã¯äžåããĻããžããã§ããã ããããŽãąãŧãšã¯é常ãĢãžãã§ãããããä¸ģãĢããããä¸åŋãĢAPIãč¨č¨ãããã¨ã¯ãģã¨ããŠæŖåŊåãããžããã ãĒãã¨ãã§ããã°ååã ã¨æããžã
Reactããŧã ãsetState
ãŽéåææ§ããã°ãã°ããããæˇˇäšąãčĒčããĻãããã¨ã¯ééããĒããŽã§ãįžå¨ãŽãģããŗããŖã¯ãšãĢã¯åĨãŽé常ãĢæŖåŊãĒįįąãããã¨æããžãã ããŖã¨æããĻãã ãã:)
@gaearonãåž ãŖãĻããžãã
@KaybaraxãããéąæĢã§ã;-)
@mweststrateããīŧ į§ãŽæĒãã æļŧããã
ããã§æčļŗãĢåēãĻãåãããŖãã¯ã§č¤æ°ãŽsetState
ããããåĻįããããã ã¨č¨ããžãã
æĨéąã¯äŧæãĢãĒããžãããããããįĢææĨãĢčĄããŽã§ãæææĨãĢčŋäŋĄãããã¨æããžãã
éĸæ°enqueueUpdateīŧcomponentīŧ{
sureInjectedīŧīŧ;
//ãŗãŧããŽããžããžãĒé¨åīŧReactCompositeComponentãĒãŠīŧ
// _renderValidatedComponentīŧrenderãŽåŧãŗåēãã¯ããšããããĻããĒãã¨æŗåŽããžãã
//ãããäēåŽã§ãããã¨ãįĸēčĒããžãã īŧããã¯ãåããããŦããĢãŽæ´æ°ãĢããŖãĻåŧãŗåēãããžã
// setStateãforceUpdateãĒãŠãŽéĸæ°; äŊæã¨
//ããããŦããĢãŽãŗãŗããŧããŗããŽį ´åŖã¯ReactMountã§äŋčˇãããĻããžããīŧ
ifīŧīŧbatchingStrategy.isBatchingUpdatesīŧ{
batchingStrategy.batchedUpdatesīŧenqueueUpdateãcomponentīŧ;
æģã;
}
dirtyComponents.pushīŧãŗãŗããŧããŗãīŧ;
ifīŧcomponent._updateBatchNumber == nullīŧ{
component._updateBatchNumber = updateBatchNumber + 1;
}
}
@mweststrateããã2ãģãŗãīŧããã¯é常ãĢæåšãĒčŗĒåã§ãã
setStateãåæããĻããå ´åãįļæ
ãĢã¤ããĻæ¨čĢããæšãã¯ãããĢį°Ąåã§ãããã¨ãĢį§ããĄã¯įåæããĻããã¨įĸēäŋĄããĻããžãã
setStateãéåæãĢããįįąãäŊã§ãããããŧã ããããå°å
ĨããæŦ įšã¨æ¯čŧããĻããžãååŋããããŠããã¯ããããžããããã¨ãã°ãįžå¨ãŽįļæ
ãĢã¤ããĻæ¨čĢãããŽãéŖãããã¨ããéįēč
ãĢããããæˇˇäšąãĒãŠã§ãã
@mweststratečåŗæˇąããã¨ãĢãį§ã¯ããã§åãčŗĒåãããžããīŧ https īŧ //discuss.reactjs.org/t/historic-reasons-behind-setstate-not-being-immediately-visible/8487
į§ã¯åäēēįãĢããŽåéĄãĢã¤ããĻäģãŽéįēč ãŽæˇˇäšąãįĩé¨ããĻããžããã @gaearonæéãããã°ããããĢã¤ããĻãŽčĒŦæãåžããŽã¯į´ æ´ããããã¨ã§ã:)
įŗãč¨ŗãããžããããäģåš´ãŽįĩããã§ãããGitHubãĒãŠã§ãäŧæåãĢåãįĩãã§ããããšãĻãŽäŊæĨããžã¨ãããã¨ããĻå°ãé ããĻããžãã
į§ã¯ããŽãšãŦãããĢæģãŖãĻãããĢã¤ããĻč°čĢããã¤ããã§ãã ããããįžå¨ã this.state
ããã¤ãŠãŽãããĢæ´æ°ãããããĢį´æĨéĸäŋããéåæReactæŠčŊãĢåãįĩãã§ãããããããã¯å°ãåãįŽæ¨ã§ããããžãã äŊããæ¸ããŽãĢå¤ããŽæéãč˛ģããããã¯ãããžããããããĻãæ šæŦįãĒäģŽåŽãå¤ããŖããŽã§ããããæ¸ãį´ããĒããã°ãĒããžããã ã§ãããããããéãããžãžãĢããĻãããããŽã§ããããã¤æąēåŽįãĒįããåēãããã¯ãžã ããããžããã
ã ãããããĢããã¤ããŽčãããããžãã ããã¯æąēããĻåŽå ¨ãĒåŋįã§ã¯ãããžããããäŊãč¨ããĒããããåŊšįĢã¤ãããããžããã
ãžããæ´æ°ããããåĻįãããããĢčĒŋæ´ãé
ããããã¨ãæįã§ãããã¨ãĢåæããã¨æããžãã ã¤ãžãã setState()
åæįãĒåãŦãŗããĒãŗã°ã¯å¤ããŽå ´åéåšįįã§ãããč¤æ°ãŽæ´æ°ãčĄãããå¯čŊæ§ãéĢããã¨ããããŖãĻããå ´åã¯ãæ´æ°ããããåĻįãããã¨ããå§ãããžãã
äžãã°ãæã
ã¯ããŠãĻãļå
ã§ãĒãclick
ããŗããŠããããŗ严æšãŽChild
ã¨Parent
åŧãsetState
æã
ã¯åãŦãŗããĒãŗã°ããåŋ
čĻã¯ãããžããã Child
2åäŊŋį¨ããäģŖãããĢããããããŧããŖã¨ããĻããŧã¯ããããŠãĻãļã¤ããŗããįĩäēããåãĢããããä¸įˇãĢåãŦãŗããĒãŗã°ãããã¨ãåĨŊãŋãžãã
ããĒããæąããĻãããŽã¯ããĒãåããã¨īŧãããåĻįīŧãåŽčĄã§ããĒããŽãĢãčĒŋæ´ãŽįĩäēãåž
ãããĢsetState
æ´æ°ãthis.state
ãããĢæ¸ãčžŧããã¨ãã§ããĒããŽãã¨ãããã¨ã§ãã æįŊãĒįãã¯1ã¤ã§ã¯ãĒãã¨æããžããīŧãŠãĄããŽãŊãĒãĨãŧãˇã§ãŗãĢãããŦãŧããĒãããããžãīŧãčããããįįąãããã¤ããããžãã
state
ãåæįãĢæ´æ°ãããĻãã props
ã¯æ´æ°ãããžããã īŧčĻĒãŗãŗããŧããŗããåãŦãŗããĒãŗã°ãããžã§props
įĨããã¨ã¯ã§ããžããããããåæįãĢčĄãã¨ããããåĻįã¯ãĻãŖãŗããĻãŽå¤ãĢåēãžããīŧ
įžå¨ãReactãĢããŖãĻæäžããããĒãã¸ã§ã¯ãīŧ state
ã props
ã refs
īŧã¯ãå
é¨įãĢį¸äēãĢ
įļæ ã ããäŊŋį¨ããå ´åãīŧææĄãããããĢīŧ
console.log(this.state.value) // 0
this.setState({ value: this.state.value + 1 });
console.log(this.state.value) // 1
this.setState({ value: this.state.value + 1 });
console.log(this.state.value) // 2
ãã ããããŽįļæ ãč§Ŗé¤ããĻããã¤ããŽãŗãŗããŧããŗãã§å ąæããåŋ čĻããããããčĻĒãĢį§ģåããã¨ããžãã
-this.setState({ value: this.state.value + 1 });
+this.props.onIncrement(); // Does the same thing in a parent
setState()
äžåããå
¸åįãĒReactãĸããĒã§ã¯ãããããžãã
ãã ããããã¯ãŗãŧããåŖããžãīŧ
console.log(this.props.value) // 0
this.props.onIncrement();
console.log(this.props.value) // 0
this.props.onIncrement();
console.log(this.props.value) // 0
ããã¯ãææĄãããĸããĢã§ã¯ã this.state
ã¯ãããĢããŠããˇãĨãããžããã this.props
ã¯ããŠããˇãĨãããĒãããã§ãã ãžããčĻĒãåãŦãŗããĒãŗã°ãããĢthis.props
ããããĢããŠããˇãĨãããã¨ã¯ã§ããžãããã¤ãžãããããåĻįããããããåŋ
čĻããããžãīŧå ´åãĢããŖãĻã¯ããããŠãŧããŗãšã大åš
ãĢäŊä¸ããå¯čŊæ§ããããžãīŧã
props
īŧãžã ããŠããˇãĨãããĻããĒãīŧã¨state
īŧãããĢããŠããˇãĨããããã¨ãææĄãããĻããīŧãŽããŧãŋãæˇˇåããĻæ°ããįļæ
ãäŊæããå ´åãĒãŠãããããŠãŽãããĢåŖããå¯čŊæ§ãããããĢã¤ããĻãŽãã垎åĻãĒãąãŧãšããããžãīŧ https īŧ//github.com/facebook/react/issues/122#issuecomment-81856416ã åį
§ãĢã¯åãåéĄããããžãīŧ https īŧ//github.com/facebook/react/issues/122#issuecomment-22659651ã
ããããŽäžã¯ãžãŖããįčĢįã§ã¯ãããžããã åŽéãReact Reduxãã¤ãŗããŖãŗã°ã¯ãReactå°éå ˇã¨éReactįļæ ãæˇˇå¨ããĻããããããžããĢããŽį¨ŽãŽåéĄãæąããĻããžããīŧ https īŧ //github.com/ reactjs / /ããĢ/ 99-ReduxãŽãååŋããã https://github.com/reactjs/react-redux/issues/292 ã https://github.com/reactjs/redux/issues/1415 ã httpsīŧ//ã§githubãŽã com / reactjs / react-redux / issues / 525ã
MobXãĻãŧãļãŧããããĢãļã¤ãããĒãįįąã¯ããããžããããį§ãŽį´æã§ã¯ãMobXãĻãŧãļãŧã¯ããŽãããĒãˇããĒãĒãĢãļã¤ããå¯čŊæ§ããããžãããčĒåãŽããã§ããã¨čããĻããžãã ãããã¯ã props
ããããžãčĒãŋåãããäģŖãããĢMobXå¯å¤ãĒãã¸ã§ã¯ãããį´æĨčĒãŋåãå ´åããããžãã
ã§ã¯ãReactã¯äģæĨããããŠãŽãããĢč§Ŗæąēããžããīŧ Reactã§ã¯ã this.state
ã¨this.props
严æšãčĒŋæ´ã¨ããŠããˇãĨãŽåžãĢãŽãŋæ´æ°ãããããããĒããĄã¯ãŋãĒãŗã°ãŽååžãŽä¸Ąæšã§0
ãåēåãããžãã ãããĢãããæãĄä¸ãįļæ
ãåŽå
¨ãĢãĒããžãã
ã¯ããããã¯å ´åãĢããŖãĻã¯ä¸äžŋã§ãã įšãĢãåä¸ãŽå ´æã§åŽå ¨ãĒįļæ ãŽæ´æ°ã襨ãæšæŗãčãããŽã§ã¯ãĒããįļæ ãæ°åå¤æ´ãããã ããŽãããå¤ããŽOOããã¯ã°ãŠãĻãŗãããæĨãĻããäēēã ãĢã¨ãŖãĻã ãããã°ãŽčĻŗįšããã¯ãįļæ ãŽæ´æ°ãéä¸ãããæšãæįĸēã ã¨æããžãããå ąæã§ããžãīŧ https īŧ//github.com/facebook/react/issues/122#issuecomment-19888472ã
ããã§ããįšãĢãŦãŗããĒãŗã°ãŽäŋĄé ŧã§ããæ å ąæēã¨ããĻäŊŋį¨ããĒãå ´åã¯ããããĢčĒãŋåãããįļæ ãæ¨ĒåããĢå¤æ´å¯čŊãĒãĒãã¸ã§ã¯ããĢį§ģåãããĒããˇã§ãŗããããžãã ããã¯ãMobXã§ã§ãããã¨ã¨ãģãŧåãã§ãđã
äŊãããĻãããŽãããããŖãĻããå ´åã¯ãããĒãŧå
¨äŊãReactDOM.flushSync(fn)
ã¨åŧã°ããžãã ãžã ææ¸åããĻããĒãã¨æããžããã16.xãĒãĒãŧãšãĩã¤ã¯ãĢãŽããæįšã§įĸēåŽãĢææ¸åããäēåŽã§ãã åŽéãĢã¯ãåŧãŗåēãå
ã§įēįããæ´æ°ãĢ寞ããĻåŽå
¨ãĒåãŦãŗããĒãŗã°ãåŧˇåļããããããäŊŋį¨ã¯æ
éãĢčĄãåŋ
čĻããããžãã ããŽãããĢããĻã props
ã state
ããããŗrefs
éãŽå
é¨æ´åæ§ãŽäŋč¨ŧãį ´ããã¨ã¯ãããžããã
čĻį´ããã¨ãReactãĸããĢã¯å¸¸ãĢæãį°ĄæŊãĒãŗãŧããĢã¤ãĒããã¨ã¯éããžããããå é¨įãĢä¸č˛Ģæ§ããããįļæ ãæãĄä¸ããĻãåŽå ¨ã§ãã
æĻåŋĩįãĢã¯ãReactã¯ãŗãŗããŧããŗããã¨ãĢåä¸ãŽæ´æ°ããĨãŧãããããŽãããĢåäŊããžãã ããããč°čĢããžãŖããįãĢããĒãŖãĻããįįąã§ããæ´æ°ãæŖįĸēãĒé åēã§éŠį¨ããããã¨ã¯ééããĒããŽã§ã this.state
ãĢæ´æ°ããããĢéŠį¨ããããŠãããĢã¤ããĻč°čĢããžãã ãã ããããã§ããåŋ
čĻã¯ãããžããīŧįŦīŧã
æčŋãį§ããĄã¯ãéåæãŦãŗããĒãŗã°ããĢã¤ããĻå¤ããŽãã¨ã芹ããĻããžããã ãããäŊãæåŗãããŽããããžãäŧãããã¨ãã§ããĻããĒããã¨ã¯čĒããžããããããRīŧDãŽæ§čŗĒã§ããæĻåŋĩįãĢææã¨æããããĸã¤ããĸãčŋŊæąããžãããååãĒæéãč˛ģãããĻåããĻããŽæåŗãįč§Ŗããžãã
ãéåæãŦãŗããĒãŗã°ããĢã¤ããĻčĒŦæããĻãã1ã¤ãŽæšæŗã¯ã ReactãsetState()
åŧãŗåēããŽįēäŋĄå
ãĢåŋããĻãã¤ããŗãããŗããŠãŧããããã¯ãŧã¯ãŦãšããŗãšããĸããĄãŧãˇã§ãŗãĒãŠãĢåŋããĻį°ãĒãåĒå
é äŊãå˛ãåŊãĻããã¨ãã§ããã¨ãã
ãã¨ãã°ããĄããģãŧã¸ãå
ĨåããĻããå ´åã TextBox
ãŗãŗããŧããŗããŽsetState()
åŧãŗåēãã¯ãããĢããŠããˇãĨããåŋ
čĻããããžãã ãã ããå
Ĩåä¸ãĢæ°ãããĄããģãŧã¸MessageBubble
ãŦãŗããĒãŗã°ãįšåŽãŽãããå¤īŧãã¨ãã°1į§īŧãžã§é
ãããæšãããããã¯ãŽãããĢå
Ĩåãéåãããããããããč¯ãã§ããããįŗ¸ã
įšåŽãŽæ´æ°ãŽåĒå åēĻããäŊããããã¨ããŦãŗããĒãŗã°ãæ°ããĒį§ãŽå°ããĒããŖãŗã¯ãĢåå˛ããĻããĻãŧãļãŧãæ°äģããĒããããĢãããã¨ãã§ããžãã
ããŽãããĒãããŠãŧããŗãšãŽæéŠåã¯ãããžãã¨ããĩã¤ããŖãŗã°ã§čĒŦåžåããĒããããĢčããããããããžããã ãMobXã§ã¯ããã¯åŋ čĻãããžãããæ´æ°ãŽčŋŊ补ã¯ãåãŦãŗããĒãŗã°ãåéŋãããŽãĢååãĒéåēĻã§ããã¨č¨ããã¨ãã§ããžãã ããšãĻãŽå ´åãĢåŊãĻã¯ãžãã¨ã¯æããžããīŧãã¨ãã°ãMobXããŠããģãŠéĢéã§ããŖãĻããDOMããŧããäŊæããæ°ããããĻãŗããããããĨãŧãŽãŦãŗããĒãŗã°ãčĄãåŋ čĻããããžãīŧã ããã§ãããããįåŽã§ãããčĒãŋåãã¨æ¸ãčžŧãŋãčŋŊ补ããįšåŽãŽJavaScriptãŠã¤ããŠãĒãĢãĒãã¸ã§ã¯ãã常ãĢãŠããããĻãåéĄãĒãã¨æčįãĢå¤æããå ´åã¯ãããããŽæéŠåãŽæŠæĩãããžãåããĒãå¯čŊæ§ããããžãã
ãã ããéåæãŦãŗããĒãŗã°ã¯ãããŠãŧããŗãšãŽæéŠåã ãã§ã¯ãããžããã
ãã¨ãã°ãããįģéĸããåĨãŽįģéĸãĢį§ģåããĻããå ´åãčããĻãŋãžãã é常ãæ°ããįģéĸãŽãŦãŗããĒãŗã°ä¸ãĢãšãããŧã襨į¤ēããžãã
ãã ããããã˛ãŧãˇã§ãŗãååãĢéĢéã§ããå ´åīŧ1į§äģĨå īŧããšãããŧãįšæģ ãããĻãããĢé襨į¤ēãĢããã¨ããĻãŧãļãŧã¨ã¯ãšããĒã¨ãŗãšãäŊä¸ããžãã ãããĢæĒããã¨ãĢãéåæãŽäžåéĸäŋīŧããŧãŋããŗãŧããįģåīŧãį°ãĒãč¤æ°ãŽãŦããĢãŽãŗãŗããŧããŗããããå ´åããšãããŧãŽãĢãšãąãŧãã1ã¤ãã¤įæéįšæģ ãããã¨ãĢãĒããžãã ããã¯čĻčĻįãĢä¸åŋĢã§ãããããšãĻãŽDOMãĒãããŧãŽãããĢåŽéãĢã¯ãĸããĒãŽéåēĻãäŊä¸ããžãã ãžããå¤ããŽåŽåãŗãŧããŽãŊãŧãšã§ããããžãã
åĨãŽããĨãŧããŦãŗããĒãŗã°ããåį´ãĒsetState()
ãåŽčĄããã¨ããĢãæ´æ°ãããããĨãŧãŽãããã¯ã°ãŠãĻãŗããã§ãŽãŦãŗããĒãŗã°ããéå§ãã§ããã¨äžŋåŠã§ã¯ãĒãã§ããããã čĒåã§čĒŋæ´ãŗãŧããč¨čŋ°ãããĢãæ´æ°ãĢįšåŽãŽãããå¤īŧ1į§ãĒãŠīŧãčļ
ããå ´åãĢãšãããŧã襨į¤ēããããæ°ãããĩãããĒãŧå
¨äŊãŽéåæäžåéĸäŋãæēčļŗã ãããĢããåž
æŠä¸ããŽéããå¤ãįģéĸãã¯ã¤ãŗãŋãŠã¯ããŖããĒãžãžã§ããīŧãã¨ãã°ãåĨãŽãĸã¤ãã ãé¸æããĻį§ģčĄã§ããžãīŧãReactã¯ãæéãããããããå ´åã¯ãšãããŧã襨į¤ēããåŋ
čĻããããã¨ãåŧˇåļããžãã
įžå¨ãŽReactãĸããĢã¨ãŠã¤ããĩã¤ã¯ãĢãŽčĒŋæ´ãĢãããåŽéãĢãããåŽčŖ ã§ãããã¨ãããããžããã @acdliteã¯éåģæ°éąéããŽæŠčŊãĢåãįĩãã§ããããžããĒãRFCãæį¨ŋ
ãããå¯čŊãĒãŽã¯ã this.state
ããããĢããŠããˇãĨãããĒãããã ãã§ãããã¨ãĢæŗ¨æããĻãã ããã ãããĢããŠããˇãĨãããå ´åããå¤ãããŧã¸ã§ãŗãã襨į¤ēãããĻã¤ãŗãŋãŠã¯ããŖãã§ããéã¯ãããĨãŧãŽãæ°ããããŧã¸ã§ãŗããŽãŦãŗããĒãŗã°ãããã¯ã°ãŠãĻãŗãã§éå§ããæšæŗããããžããã åŊŧããŽįŦįĢããįļæ
ãŽæ´æ°ã¯čĄįĒããã§ãããã
ããŽããšãĻãįē襨ãããã¨ãĢéĸããĻã @ acdliteããéˇãįããã¨ã¯ããããããžãããããããå°ãĒãã¨ãå°ãã¨ããĩã¤ããŖãŗã°ãĢčããããã¨ãéĄãŖãĻããžãã ããã¯ãžã ããŧããŧãĻã§ãĸãŽãããĢčãããããį§ããĄãäŊãããĻãããŽãæŦåŊãĢããããĒããããĢčããããããããžããã äģåžæ°ãæäģĨå ãĢäģãŽæšæŗã§į´åžã§ãããã¨ãéĄãŖãĻããžãããžããReactãĸããĢãŽæčģæ§ãéĢãčŠäžĄããĻããã ããã°åš¸ãã§ãã ãããĻãį§ãįč§ŖããĻããéãã§ã¯ãįļæ ãŽæ´æ°ããããĢããŠããˇãĨããĒããã¨ã§ãå°ãĒãã¨ãé¨åįãĢããŽæčģæ§ãå¯čŊãĢãĒããžãã
ReactãŽãĸãŧããã¯ããŖãŽčåžãĢããæąēåŽãĢã¤ããĻãŽį´ æ´ãããčŠŗį´°ãĒčĒŦæã ãããã¨ãã
ããŧã¯
ãããã¨ããããŗã
į§ã¯â¤ī¸ããŽåéĄã į´ æ´ãããčŗĒåã¨į´ æ´ãããįãã ããã¯æĒãč¨č¨ä¸ãŽæąēåŽã ã¨ãã¤ãæãŖãĻãããŽã§ãäģã¯čãį´ããĒããã°ãĒããžããđ
ãããã¨ããããŗã
į§ã¯ãããasyncAwesomesetStateīŧsmileã¨åŧãã§ããžãīŧ
į§ã¯ããšãĻãæåãĢéåæã§åŽčŖ ããåŋ čĻãããã¨æãåžåããããžããåææäŊãåŋ čĻãĒå ´åã¯ãéåææäŊãåŽäēãåž ã¤ãã¨ã§ãŠããããžãã éåæãŗãŧãããåæãŗãŧããäŊæããæšãã¯ãããĢį°Ąåã§ãīŧåŋ čĻãĒãŽã¯ãŠãããŧã ãã§ãīŧãéãŽå ´åīŧãšãŦããåãĢæãäŧ¸ã°ããĒãéããåēæŦįãĢåŽå ¨ãĒæ¸ãæããåŋ čĻã§ããããã¯ãžãŖããčģŊéã§ã¯ãããžããīŧã
@gaearončŠŗį´°ãĒčĒŦæãĢæčŦããžãīŧ ããã¯éˇãéį§ãæŠãžããĻããžããīŧãæŖåŊãĒįįąããããĢéããããžããããčĒ°ããŠããįĨããã¨ãã§ããžãããīŧã ãããäģã§ã¯ããã¯åŽå ¨ãĢįãĢããĒãŖãĻããããããæŦåŊãĢæčįãĒæąēåŽã§ãããã¨ãããããžã:)ã åš åēãåįããããã¨ãããããžãããæŦåŊãĢæčŦããĻããžãã
ãžãã¯ãå°éå ˇããããžãčĒãŋåãããäģŖãããĢMobXå¯å¤ãĒãã¸ã§ã¯ãããį´æĨčĒãŋåãå ´åããããžãã
ããã¯įĸēããĢįĸēããĢįåŽã ã¨æããžããMobXã§ã¯ãå°éå ˇã¯é常ãåãĒããŗãŗããŧããŗãæ§æã¨ããĻäŊŋį¨ãããããĄã¤ãŗããŧãŋã¯é常ãå°éå ˇã§ã¯ãĒãããŗãŗããŧããŗãéã§æ¸ĄãããããĄã¤ãŗã¨ãŗããŖããŖã§ããŖãããŖãããžãã
įš°ãčŋããĢãĒããžããããŠãããããã¨ãããããžããīŧ
@gaearončŠŗį´°ã§į´ æ´ãããčĒŦæããããã¨ãã
ãããĢã¯ãžã äŊãčļŗããĒãããŽããããžãããį§ã¯įč§ŖããĻããã¨æããžãããįĸēčĒãããã¨æããžãã
ã¤ããŗãããOutsideReactããĢįģé˛ãããĻããå ´åãããã¯ããããããã¨ãã°refãŽaddEventListener
ãäģããĻčĄããããã¨ãæåŗããžãã ããŽåžããããåĻįã¯čĄãããžããã
ããŽãŗãŧããčããĻãŋãžãããīŧ
class App extends React.Component {
constructor(props) {
super(props);
this.state = {
count: 0
};
}
componentDidMount() {
this.refBtn.addEventListener("click", this.onClick);
}
componentWillUnmount() {
this.refBtn.removeEventListener("click", this.onClick);
}
onClick = () => {
console.log("before setState", this.state.count);
this.setState(state => ({ count: state.count + 1 }));
console.log("after setState", this.state.count);
};
render() {
return (
<div>
<button onClick={this.onClick}>React Event</button>
<button ref={ref => (this.refBtn = ref)}>Direct DOM event</button>
</div>
);
}
}
ãReactEventãããŋãŗãã¯ãĒãã¯ããã¨ããŗãŗãŊãŧãĢãĢæŦĄãŽãããĢ襨į¤ēãããžãã
"before setState" 0
"after setState" 0
äģãŽããŋãŗãDirectDOMeventããã¯ãĒãã¯ããã¨ããŗãŗãŊãŧãĢãĢæŦĄãŽãããĢ襨į¤ēãããžãã
"before setState" 0
"after setState" 1
ããã¤ããŽå°ããĒčĒŋæģã¨ãŊãŧãšãŗãŧããŽé˛čĻ§ãŽåžãį§ã¯ããããĒãčĩˇãããŽããįĨãŖãĻããã¨æããžãã
reactã¯ã¤ããŗããŽãããŧãåŽå
¨ãĢåļåžĄã§ãããæŦĄãŽã¤ããŗãããã¤ãŠãŽãããĢįēįããããįĸēčĒã§ããĒããããããããã¯ãĸãŧããã¨ããĻįļæ
å¤æ´ããããĢããĒãŦãŧããžãã
ãããĢã¤ããĻãŠãæããžããīŧ īŧčãīŧ
@ sag1vã¯å°ãéĸéŖæ§ããããžãããæ°ããčŗĒåãŽãããĢæ°ããåéĄãéãæšãããããæįĸēã§ãã čĒŦæãŽãŠããã§īŧ11527ãäŊŋį¨ããĻããããĢãĒãŗã¯ããĻãã ããã
@ sag1v @gaearonã¯ãããã§é常ãĢį°ĄæŊãĒčŋäŋĄããããžããhttps://twitter.com/dan_abramov/status/949992957180104704 ã åŊŧãŽãããĢ寞ããčĻæšããį§ãĢããŖã¨å ˇäŊįãĢįããã¨æããžãã
@mweststrateæ°ããåéĄãéããã¨ãčããžãããããããããĒãsetState
éåæãĒãŽããã¨ããčŗĒåãĢį´æĨéĸäŋããĻãããã¨ãĢæ°äģããžããã
ããŽč°čĢã¯setState
ãéåæããĢããéãŽæąēåŽãĢéĸããããŽãĒãŽã§ããã¤ããĒããåæããĢããããčŋŊå ãããã¨æããžããã
į§ãŽæį¨ŋãããŽåéĄãĢéĸéŖããĻãããã¨ãããĒããĢį´åžãããĒããŖãå ´åãį§ã¯æ°ããåéĄãéããĻãããžããžããīŧwinkīŧ
@Kaybaraxããã¯ãããĒããŽčŗĒåãã_ãĒãåæ_ãã§ã¯ãĒãã_ãã¤åæ_ãã ãŖãããã§ãã
į§ãŽæį¨ŋã§čŋ°ãšããããĢãį§ã¯įįąãįĨãŖãĻããã¨æããžãããį§
reactã¯ã¤ããŗããŽãããŧãåŽå ¨ãĢåļåžĄã§ãããæŦĄãŽã¤ããŗãããã¤ãŠãŽãããĢįēįããããįĸēčĒã§ããĒããããããããã¯ãĸãŧããã¨ããĻįļæ å¤æ´ããããĢããĒãŦãŧããžã
ããį¨Žã ããã¯ã this.state
æ´æ°ãĢéĸããčŗĒåã¨ã¯æŖįĸēãĢã¯éĸéŖããĻããžãããã
ããĒããæąããĻãããŽã¯ãReactããããåĻįãæåšãĢããå ´åã§ãã Reactã¯įžå¨ãReactãįŽĄįããã¤ããŗãããŗããŠãŧå ã§æ´æ°ããããåĻįã
ã¤ããŗãããŗããŠãŧãReactãĢããŖãĻč¨åŽãããĻããĒãå ´åãįžå¨ã¯æ´æ°ãåæãããžãã åž ã¤ãŽãåŽå ¨ããŠããããããĻäģãŽæ´æ°ããããĢčĄãããããŠãããããããĒãããã§ãã
ReactãŽå°æĨãŽããŧã¸ã§ãŗã§ã¯ãããŽåäŊã¯å¤æ´ãããžãã č¨įģã§ã¯ãæ´æ°ããããŠãĢãã§äŊåĒå åēĻã¨ããĻæąããæįĩįãĢåäŊããĻãããåĻįãīŧãã¨ãã°ã1į§äģĨå īŧããããĢããŠããˇãĨãããã¨ãé¸æããžãã čŠŗį´°ãĢã¤ããĻã¯ã https īŧ
į´ æ´ãããīŧ
ããŽčŗĒåã¨åįã¯ãããå°éããããå ´æãĢææ¸åããåŋ čĻããããžãã į§ããĄãåįēããĻãããĻãããã¨ãã
å¤ããåĻãã ã ãããã¨ã
į§ãŽčĻįšããšãŦãããĢčŋŊå ãããã¨ããĻããžãã į§ã¯MobXãããŧãšãĢãããĸããĒãĢæ°ãæåãįĩãã§ãããClojureScriptãäŊåš´ãæĸį´ĸããįŦčĒãŽReactãŽäģŖæŋææŽĩīŧRespoã¨åŧã°ããīŧãäŊæããžãããé常ãĢįãæéã§ããããåæãĢReduxãčŠĻããReasonMLãĢčŗããĻããžãã
Reactã¨éĸæ°åããã°ãŠããŗã°īŧFPīŧãįĩãŋåãããéãŽä¸åŋįãĒãĸã¤ããĸã¯ãFPãŽæŗåãĢåžããšããĢãäŊŋį¨ããĻãããŧãŋãããĨãŧãĢãŦãŗããĒãŗã°ã§ãããããĢãããã¨ã§ãã į´į˛éĸæ°ãŽãŋãäŊŋį¨ããå ´åãå¯äŊį¨ã¯ãããžããã
Reactã¯į´į˛éĸæ°ã§ã¯ãããžããã Reactã¯ããŗãŗããŧããŗãå ãĢããŧãĢãĢįļæ ãįĩãŋčžŧããã¨ã§ãDOMãããŽäģãŽããŠãĻãļãŧAPIīŧMobXãĢã寞åŋīŧãĢéĸéŖããããžããžãĒãŠã¤ããŠãĒãŧã¨å¯žčŠąã§ãããããReactã¯ä¸į´ãĢãĒããžãã ãã ããClojureScriptã§čŠĻããĻãŋãžããããReactãį´į˛ãĒå ´åãå¯äŊį¨ãŽããæĸåãŽãŠã¤ããŠãĒã¨ãŽããåããé常ãĢéŖãããããįŊåŽŗãĢãĒãå¯čŊæ§ããããžãã
ããããŖãĻãRespoīŧį§čĒčēĢãŽãŊãĒãĨãŧãˇã§ãŗīŧã§ã¯ãįįžããĻãããããĢčĻãã2ã¤ãŽįŽæ¨ããããžããã1īŧ view = f(store)
ãĒãŽã§ãããŧãĢãĢįļæ
ã¯æåž
ãããžããã 2īŧã°ããŧããĢãŦããĨãŧãĩãŧã§ããšãĻãŽãŗãŗããŧããŗãUIįļæ
ãããã°ãŠã ãããŽã¯åĨŊãã§ã¯ãããžãããããã¯ãįļæãããŽãéŖããå¯čŊæ§ãããããã§ãã æåžãĢã paths
ããĻã°ããŧããĢãšããĸã§ãŗãŗããŧããŗããŽįļæ
ãįļæãããŽãĢåŊšįĢã¤ãˇãŗãŋãã¯ãšãˇãĨãŦãŧãåŋ
čĻã§ãããã¨ãããããžãããããŽéãClojureãã¯ããäŊŋį¨ããĻãŗãŗããŧããŗãå
ãĢįļæ
ãŽæ´æ°ãæ¸ãčžŧãŋãžãã
ã¤ãžããį§ãåĻãã ãã¨ã¯ãããŧãĢãĢįļæ ã¯éįēč ã¨ã¯ãšããĒã¨ãŗãšæŠčŊã§ãããããŽä¸ãĢã¯ãã¨ãŗã¸ãŗãæˇąããŦããĢã§æéŠåãåŽčĄã§ãããããĢããã°ããŧããĢįļæ ãåŋ čĻã§ãã ããã§ãMobXãŽäēēã ã¯OOPãåĨŊãŋãžããããã¯éįēč ãŽįĩé¨ãŽããã§ãããããã¨ãã¨ãŗã¸ãŗãŽããã§ããīŧ
ãĄãĒãŋãĢãããĒãããããčĻéããå ´åãĢåããĻãį§ã¯Reactã¨ããŽéåææŠčŊãŽå°æĨãĢã¤ããĻ芹ããžããīŧ
https://reactjs.org/blog/2018/03/01/sneak-peek-beyond-react-16.html
ããŗãããĒãã¯į§ãŽãĸã¤ããĢã§ã.....ãŠãããããã¨ãã
æãåčãĢãĒããŗãĄãŗã
ã ãããããĢããã¤ããŽčãããããžãã ããã¯æąēããĻåŽå ¨ãĒåŋįã§ã¯ãããžããããäŊãč¨ããĒããããåŊšįĢã¤ãããããžããã
ãžããæ´æ°ããããåĻįãããããĢčĒŋæ´ãé ããããã¨ãæįã§ãããã¨ãĢåæããã¨æããžãã ã¤ãžãã
setState()
åæįãĒåãŦãŗããĒãŗã°ã¯å¤ããŽå ´åéåšįįã§ãããč¤æ°ãŽæ´æ°ãčĄãããå¯čŊæ§ãéĢããã¨ããããŖãĻããå ´åã¯ãæ´æ°ããããåĻįãããã¨ããå§ãããžããäžãã°ãæã ã¯ããŠãĻãļå ã§ãĒã
click
ããŗããŠããããŗ严æšãŽChild
ã¨Parent
åŧãsetState
æã ã¯åãŦãŗããĒãŗã°ããåŋ čĻã¯ãããžãããChild
2åäŊŋį¨ããäģŖãããĢããããããŧããŖã¨ããĻããŧã¯ããããŠãĻãļã¤ããŗããįĩäēããåãĢããããä¸įˇãĢåãŦãŗããĒãŗã°ãããã¨ãåĨŊãŋãžããããĒããæąããĻãããŽã¯ããĒãåããã¨īŧãããåĻįīŧãåŽčĄã§ããĒããŽãĢãčĒŋæ´ãŽįĩäēãåž ãããĢ
setState
æ´æ°ãthis.state
ãããĢæ¸ãčžŧããã¨ãã§ããĒããŽãã¨ãããã¨ã§ãã æįŊãĒįãã¯1ã¤ã§ã¯ãĒãã¨æããžããīŧãŠãĄããŽãŊãĒãĨãŧãˇã§ãŗãĢãããŦãŧããĒãããããžãīŧãčããããįįąãããã¤ããããžããå é¨ãŽä¸č˛Ģæ§ãäŋč¨ŧãã
state
ãåæįãĢæ´æ°ãããĻããprops
ã¯æ´æ°ãããžããã īŧčĻĒãŗãŗããŧããŗããåãŦãŗããĒãŗã°ãããžã§props
įĨããã¨ã¯ã§ããžããããããåæįãĢčĄãã¨ããããåĻįã¯ãĻãŖãŗããĻãŽå¤ãĢåēãžããīŧįžå¨ãReactãĢããŖãĻæäžããããĒãã¸ã§ã¯ãīŧ
state
ãprops
ãrefs
īŧã¯ãå é¨įãĢį¸äēãĢįļæ ã ããäŊŋį¨ããå ´åãīŧææĄãããããĢīŧ
ãã ããããŽįļæ ãč§Ŗé¤ããĻããã¤ããŽãŗãŗããŧããŗãã§å ąæããåŋ čĻããããããčĻĒãĢį§ģåããã¨ããžãã
setState()
äžåããå ¸åįãĒReactãĸããĒã§ã¯ãããããžãããã ããããã¯ãŗãŧããåŖããžãīŧ
ããã¯ãææĄãããĸããĢã§ã¯ã
this.state
ã¯ãããĢããŠããˇãĨãããžãããthis.props
ã¯ããŠããˇãĨãããĒãããã§ãã ãžããčĻĒãåãŦãŗããĒãŗã°ãããĢthis.props
ããããĢããŠããˇãĨãããã¨ã¯ã§ããžãããã¤ãžãããããåĻįããããããåŋ čĻããããžãīŧå ´åãĢããŖãĻã¯ããããŠãŧããŗãšãå¤§åš ãĢäŊä¸ããå¯čŊæ§ããããžãīŧãprops
īŧãžã ããŠããˇãĨãããĻããĒãīŧã¨state
īŧãããĢããŠããˇãĨããããã¨ãææĄãããĻããīŧãŽããŧãŋãæˇˇåããĻæ°ããįļæ ãäŊæããå ´åãĒãŠãããããŠãŽãããĢåŖããå¯čŊæ§ãããããĢã¤ããĻãŽãã垎åĻãĒãąãŧãšããããžãīŧ https īŧ//github.com/facebook/react/issues/122#issuecomment-81856416ã åį §ãĢã¯åãåéĄããããžãīŧ https īŧ//github.com/facebook/react/issues/122#issuecomment-22659651ãããããŽäžã¯ãžãŖããįčĢįã§ã¯ãããžããã åŽéãReact Reduxãã¤ãŗããŖãŗã°ã¯ãReactå°éå ˇã¨éReactįļæ ãæˇˇå¨ããĻããããããžããĢããŽį¨ŽãŽåéĄãæąããĻããžããīŧ https īŧ //github.com/ reactjs / /ããĢ/ 99-ReduxãŽãååŋããã https://github.com/reactjs/react-redux/issues/292 ã https://github.com/reactjs/redux/issues/1415 ã httpsīŧ//ã§githubãŽã com / reactjs / react-redux / issues / 525ã
MobXãĻãŧãļãŧããããĢãļã¤ãããĒãįįąã¯ããããžããããį§ãŽį´æã§ã¯ãMobXãĻãŧãļãŧã¯ããŽãããĒãˇããĒãĒãĢãļã¤ããå¯čŊæ§ããããžãããčĒåãŽããã§ããã¨čããĻããžãã ãããã¯ã
props
ããããžãčĒãŋåãããäģŖãããĢMobXå¯å¤ãĒãã¸ã§ã¯ãããį´æĨčĒãŋåãå ´åããããžããã§ã¯ãReactã¯äģæĨããããŠãŽãããĢč§Ŗæąēããžããīŧ Reactã§ã¯ã
this.state
ã¨this.props
严æšãčĒŋæ´ã¨ããŠããˇãĨãŽåžãĢãŽãŋæ´æ°ãããããããĒããĄã¯ãŋãĒãŗã°ãŽååžãŽä¸Ąæšã§0
ãåēåãããžãã ãããĢãããæãĄä¸ãįļæ ãåŽå ¨ãĢãĒããžããã¯ããããã¯å ´åãĢããŖãĻã¯ä¸äžŋã§ãã įšãĢãåä¸ãŽå ´æã§åŽå ¨ãĒįļæ ãŽæ´æ°ã襨ãæšæŗãčãããŽã§ã¯ãĒããįļæ ãæ°åå¤æ´ãããã ããŽãããå¤ããŽOOããã¯ã°ãŠãĻãŗãããæĨãĻããäēēã ãĢã¨ãŖãĻã ãããã°ãŽčĻŗįšããã¯ãįļæ ãŽæ´æ°ãéä¸ãããæšãæįĸēã ã¨æããžãããå ąæã§ããžãīŧ https īŧ//github.com/facebook/react/issues/122#issuecomment-19888472ã
ããã§ããįšãĢãŦãŗããĒãŗã°ãŽäŋĄé ŧã§ããæ å ąæēã¨ããĻäŊŋį¨ããĒãå ´åã¯ããããĢčĒãŋåãããįļæ ãæ¨ĒåããĢå¤æ´å¯čŊãĒãĒãã¸ã§ã¯ããĢį§ģåãããĒããˇã§ãŗããããžãã ããã¯ãMobXã§ã§ãããã¨ã¨ãģãŧåãã§ãđã
äŊãããĻãããŽãããããŖãĻããå ´åã¯ãããĒãŧå ¨äŊã
ReactDOM.flushSync(fn)
ã¨åŧã°ããžãã ãžã ææ¸åããĻããĒãã¨æããžããã16.xãĒãĒãŧãšãĩã¤ã¯ãĢãŽããæįšã§įĸēåŽãĢææ¸åããäēåŽã§ãã åŽéãĢã¯ãåŧãŗåēãå ã§įēįããæ´æ°ãĢ寞ããĻåŽå ¨ãĒåãŦãŗããĒãŗã°ãåŧˇåļããããããäŊŋį¨ã¯æ éãĢčĄãåŋ čĻããããžãã ããŽãããĢããĻãprops
ãstate
ããããŗrefs
éãŽå é¨æ´åæ§ãŽäŋč¨ŧãį ´ããã¨ã¯ãããžãããčĻį´ããã¨ãReactãĸããĢã¯å¸¸ãĢæãį°ĄæŊãĒãŗãŧããĢã¤ãĒããã¨ã¯éããžããããå é¨įãĢä¸č˛Ģæ§ããããįļæ ãæãĄä¸ããĻãåŽå ¨ã§ãã
åææ´æ°ãŽæåšå
æĻåŋĩįãĢã¯ãReactã¯ãŗãŗããŧããŗããã¨ãĢåä¸ãŽæ´æ°ããĨãŧãããããŽãããĢåäŊããžãã ããããč°čĢããžãŖããįãĢããĒãŖãĻããįįąã§ããæ´æ°ãæŖįĸēãĒé åēã§éŠį¨ããããã¨ã¯ééããĒããŽã§ã
this.state
ãĢæ´æ°ããããĢéŠį¨ããããŠãããĢã¤ããĻč°čĢããžãã ãã ããããã§ããåŋ čĻã¯ãããžããīŧįŦīŧãæčŋãį§ããĄã¯ãéåæãŦãŗããĒãŗã°ããĢã¤ããĻå¤ããŽãã¨ã芹ããĻããžããã ãããäŊãæåŗãããŽããããžãäŧãããã¨ãã§ããĻããĒããã¨ã¯čĒããžããããããRīŧDãŽæ§čŗĒã§ããæĻåŋĩįãĢææã¨æããããĸã¤ããĸãčŋŊæąããžãããååãĒæéãč˛ģãããĻåããĻããŽæåŗãįč§Ŗããžãã
ãéåæãŦãŗããĒãŗã°ããĢã¤ããĻčĒŦæããĻãã1ã¤ãŽæšæŗã¯ã Reactã
setState()
åŧãŗåēããŽįēäŋĄå ãĢåŋããĻãã¤ããŗãããŗããŠãŧããããã¯ãŧã¯ãŦãšããŗãšããĸããĄãŧãˇã§ãŗãĒãŠãĢåŋããĻį°ãĒãåĒå é äŊãå˛ãåŊãĻããã¨ãã§ããã¨ãããã¨ãã°ããĄããģãŧã¸ãå ĨåããĻããå ´åã
TextBox
ãŗãŗããŧããŗããŽsetState()
åŧãŗåēãã¯ãããĢããŠããˇãĨããåŋ čĻããããžãã ãã ããå Ĩåä¸ãĢæ°ãããĄããģãŧã¸MessageBubble
ãŦãŗããĒãŗã°ãįšåŽãŽãããå¤īŧãã¨ãã°1į§īŧãžã§é ãããæšãããããã¯ãŽãããĢå Ĩåãéåãããããããããč¯ãã§ããããįŗ¸ãįšåŽãŽæ´æ°ãŽåĒå åēĻããäŊããããã¨ããŦãŗããĒãŗã°ãæ°ããĒį§ãŽå°ããĒããŖãŗã¯ãĢåå˛ããĻããĻãŧãļãŧãæ°äģããĒããããĢãããã¨ãã§ããžãã
ããŽãããĒãããŠãŧããŗãšãŽæéŠåã¯ãããžãã¨ããĩã¤ããŖãŗã°ã§čĒŦåžåããĒããããĢčããããããããžããã ãMobXã§ã¯ããã¯åŋ čĻãããžãããæ´æ°ãŽčŋŊ补ã¯ãåãŦãŗããĒãŗã°ãåéŋãããŽãĢååãĒéåēĻã§ããã¨č¨ããã¨ãã§ããžãã ããšãĻãŽå ´åãĢåŊãĻã¯ãžãã¨ã¯æããžããīŧãã¨ãã°ãMobXããŠããģãŠéĢéã§ããŖãĻããDOMããŧããäŊæããæ°ããããĻãŗããããããĨãŧãŽãŦãŗããĒãŗã°ãčĄãåŋ čĻããããžãīŧã ããã§ãããããįåŽã§ãããčĒãŋåãã¨æ¸ãčžŧãŋãčŋŊ补ããįšåŽãŽJavaScriptãŠã¤ããŠãĒãĢãĒãã¸ã§ã¯ãã常ãĢãŠããããĻãåéĄãĒãã¨æčįãĢå¤æããå ´åã¯ãããããŽæéŠåãŽæŠæĩãããžãåããĒãå¯čŊæ§ããããžãã
ãã ããéåæãŦãŗããĒãŗã°ã¯ãããŠãŧããŗãšãŽæéŠåã ãã§ã¯ãããžããã
ãã¨ãã°ãããįģéĸããåĨãŽįģéĸãĢį§ģåããĻããå ´åãčããĻãŋãžãã é常ãæ°ããįģéĸãŽãŦãŗããĒãŗã°ä¸ãĢãšãããŧã襨į¤ēããžãã
ãã ããããã˛ãŧãˇã§ãŗãååãĢéĢéã§ããå ´åīŧ1į§äģĨå īŧããšãããŧãįšæģ ãããĻãããĢé襨į¤ēãĢããã¨ããĻãŧãļãŧã¨ã¯ãšããĒã¨ãŗãšãäŊä¸ããžãã ãããĢæĒããã¨ãĢãéåæãŽäžåéĸäŋīŧããŧãŋããŗãŧããįģåīŧãį°ãĒãč¤æ°ãŽãŦããĢãŽãŗãŗããŧããŗããããå ´åããšãããŧãŽãĢãšãąãŧãã1ã¤ãã¤įæéįšæģ ãããã¨ãĢãĒããžãã ããã¯čĻčĻįãĢä¸åŋĢã§ãããããšãĻãŽDOMãĒãããŧãŽãããĢåŽéãĢã¯ãĸããĒãŽéåēĻãäŊä¸ããžãã ãžããå¤ããŽåŽåãŗãŧããŽãŊãŧãšã§ããããžãã
åĨãŽããĨãŧããŦãŗããĒãŗã°ããåį´ãĒ
setState()
ãåŽčĄããã¨ããĢãæ´æ°ãããããĨãŧãŽãããã¯ã°ãŠãĻãŗããã§ãŽãŦãŗããĒãŗã°ããéå§ãã§ããã¨äžŋåŠã§ã¯ãĒãã§ããããã čĒåã§čĒŋæ´ãŗãŧããč¨čŋ°ãããĢãæ´æ°ãĢįšåŽãŽãããå¤īŧ1į§ãĒãŠīŧãčļ ããå ´åãĢãšãããŧã襨į¤ēããããæ°ãããĩãããĒãŧå ¨äŊãŽéåæäžåéĸäŋãæēčļŗã ãããĢããåž æŠä¸ããŽéããå¤ãįģéĸãã¯ã¤ãŗãŋãŠã¯ããŖããĒãžãžã§ããīŧãã¨ãã°ãåĨãŽãĸã¤ãã ãé¸æããĻį§ģčĄã§ããžãīŧãReactã¯ãæéãããããããå ´åã¯ãšãããŧã襨į¤ēããåŋ čĻããããã¨ãåŧˇåļããžããįžå¨ãŽReactãĸããĢã¨ãŠã¤ããĩã¤ã¯ãĢãŽčĒŋæ´ãĢãããåŽéãĢãããåŽčŖ ã§ãããã¨ãããããžããã @acdliteã¯éåģæ°éąéããŽæŠčŊãĢåãįĩãã§ããããžããĒãRFCãæį¨ŋ
ãããå¯čŊãĒãŽã¯ã
this.state
ããããĢããŠããˇãĨãããĒãããã ãã§ãããã¨ãĢæŗ¨æããĻãã ããã ãããĢããŠããˇãĨãããå ´åããå¤ãããŧã¸ã§ãŗãã襨į¤ēãããĻã¤ãŗãŋãŠã¯ããŖãã§ããéã¯ãããĨãŧãŽãæ°ããããŧã¸ã§ãŗããŽãŦãŗããĒãŗã°ãããã¯ã°ãŠãĻãŗãã§éå§ããæšæŗããããžããã åŊŧããŽįŦįĢããįļæ ãŽæ´æ°ã¯čĄįĒããã§ããããããŽããšãĻãįē襨ãããã¨ãĢéĸããĻã @ acdliteããéˇãįããã¨ã¯ããããããžãããããããå°ãĒãã¨ãå°ãã¨ããĩã¤ããŖãŗã°ãĢčããããã¨ãéĄãŖãĻããžãã ããã¯ãžã ããŧããŧãĻã§ãĸãŽãããĢčãããããį§ããĄãäŊãããĻãããŽãæŦåŊãĢããããĒããããĢčããããããããžããã äģåžæ°ãæäģĨå ãĢäģãŽæšæŗã§į´åžã§ãããã¨ãéĄãŖãĻããžãããžããReactãĸããĢãŽæčģæ§ãéĢãčŠäžĄããĻããã ããã°åš¸ãã§ãã ãããĻãį§ãįč§ŖããĻããéãã§ã¯ãįļæ ãŽæ´æ°ããããĢããŠããˇãĨããĒããã¨ã§ãå°ãĒãã¨ãé¨åįãĢããŽæčģæ§ãå¯čŊãĢãĒããžãã