2016-08-11 10 views
0

this.state内のオブジェクトの更新に問題があります。基本的には、複数の範囲スライダを持つフォームがあります。スライダが変更されるたびにthis.state.dreadModelオブジェクトを更新したいと思いますが、私はそれを上書きすることしかできないようです。reactJsオブジェクトを上書きせずに状態オブジェクトを更新します

this.setState(update (this.state.dreadModel, { dreadModel: { [name]: e.target.value } }), function() { 
    console.log(this.state); 
}); 

を私は上記のコードで取得エラー「がキャッチされないにReferenceError:更新が定義されていない」である。

これは私がこれまでにしようとしているものです。

私は非常に近いと感じますが、構文はかなり正しいです。

ああ、ここではスライダの値が変更されるたびにオブジェクトを上書きするコードを使用しています。

this.setState({ dreadModel: {[name]: e.target.value }}, function() { 
    console.log(this.state); 
}); 
+0

? – madox2

+1

'update'は[Reactにデフォルトでは含まれていないため]定義されていません(https://facebook.github.io/react/docs/update.html)。あなたはアドオンをインストールする必要があります: 'var update = require( 'react-addons-update');' – Hamms

答えて

-1

私は通常、私はネストされたオブジェクトを更新する必要がある場合はどのような、より多くのようなものです: `update`機能から来たんどこから

var dreadModel = {...this.state.dreadModel, [name]: e.target.value }; 
//or, if no ES6: 
//var dreadModel = Object.assign({}, this.state.dreadModel); 
//dreadModel[name] = e.target.value; 
this.setState({ dreadModel: dreadModel }, function() { 
    console.log(this.state); 
}); 
+0

ありがとう、これはうまくいきました。私はこのソリューションを見ていないと信じることはできません。ちょっと戻ってしまえば、はるかに単純なものがあれば、本当に複雑なソリューションに深く深く入り込んだようです。ご協力いただきありがとうございます。 –

+0

これはあなたがするべきではない状態オブジェクトに変異を起こしています – Hamms

+0

これはうまくいきますが、 'this.state'を変更しているので、これはちょっとしたパターンです。 'var dreadModel = {... this.state.dreadModel}'のようにオブジェクトをコピーしてから 'dreadModel'を修正することができます – Aaron

関連する問題