2016-05-24 7 views
1

特定の要素のみを更新するために、setStateのパラメータで特定のキーを渡すことができるチュートリアルを読んだ。しかしここに私の場合です:ReactJSで特定のキーにsetState

私はtomchentwの反応 - google - マップコンポーネントを使用します。私はAppの状態でマップのオプションを設定します(そして、それを小道具を介してGoogleMapコンポーネントに渡します)。

app.jsx

constructor() { 
    super(); 
    //Initial value 
    this.state = { 
     optionsMap:{ 
     center: { 
      lat: 46.8261444, 
      lng: 2.2418121 
     }, 
     zoom: 5 
    }, 
     variables: {} 
    } 
} 

map.jsx

render() { 
     return (
      <GoogleMapLoader 
       containerElement={ <div {...this.props} style={{ height: '500px'}}></div> } 
       googleMapElement={ 
        <GoogleMap 
         ref="googleMap" 
         {...this.props.optionsMap} //biding map options with spread 
         onIdle={this._handleIdle.bind(this)}> 
        </GoogleMap> 
       } 
      /> 
     ); 
    } 


    _handleIdle(event) { 
     this.props.updateVarsOptions(this.props.optionsMap); 
    } 

私はapp.jsxで定義する(私はマップをmoove)()関数の私updateVarOptionsを呼び出して、私は非常に特定のキーの変数の状態を更新してください。

app.jsx

_updateVarsOptions(mapOptions) { 
     this.setState({ 
      variables : mapOptions 
     }); 
} 

だから、私は状態にのみ変数キーを更新し、私はSETSTATEを行うときに、マップがデフォルト値を持つresettings(中心位置とズームです)。状態がoptionsMapキーをに更新しています。なぜか分からない。

+0

*「状態はoptionsMapキーを「*」に更新しています。これはマップの動作に基づいた前提ですか?または、実際に 'this.props.optionsMap'の値をログに記録しましたか?値が同じであることは間違いないので、これは 'GoogleMap'コンポーネント自体のバグを示す可能性があります。 –

+0

それは私の前提です。 state.optionsMapはタッチではありません。しかし、マップはstate.optionsMap値でリセットされるため、DOMは更新中です。 ( – Gaius

+0

)setState()の変数キーのみを更新している間にGoogleマップのDOMが更新されるのはなぜですか? – Gaius

答えて

2

マップがoptionsMapのデフォルト値で更新されているのは、setStateを呼び出すと、コンポーネントが再レンダリングされるからです(そうでない場合はshouldComponentUpdateで定義された動作がない限り)。これにより、Googleマップの要素が再描画され、optionsMapの情報が再度渡されます(最初のレンダリング以降は変更されていません)。

shouldComponentUpdatelifecycle functionをご覧ください。この関数はレンダリングの直前に呼び出され、その戻り値は、render関数を再度呼び出す必要があるかどうかをコンポーネントに通知します。デフォルトでは、常にtrueを返します。 variables状態が変更された場合、コンポーネントが再レンダリングされないようにこの動作を変更できます。

+0

非常にうれしいです、ありがとうございました!これは私です最初にReactとES6を試してみて、私はどちらの可能性にも慣れていない。とにかく、ありがとう! – Gaius

関連する問題