正しく動作しないコードがいくつかあります。キーと値を親コンポーネントのsetState()
に送信するonChange
ハンドラがあります。ループオーバー状態でオブジェクトが存在するかどうかをチェック
_onAttributeChange(key, value) {
const changes = this.state.changes;
const pushObj = {key: key, value: value};
console.log(pushObj);
if (changes.length === 0) {
this.setState({changes: changes.concat([pushObj])});
} else {
changes.forEach(change => {
if (change.key === key) {
console.log('Update');
} else {
console.log('No update');
this.setState({changes: changes.concat([pushObj])});
}
});
}
}
あなたは、私が{key: 1, value: 'Some Value'}
のようになります。キー値のパラメータに基づいてオブジェクトを作成しています。このコードから見ることができます。目標は、配列の長さが0の場合は配列に連結することです。その部分は正常に動作します。 forEachは私が問題を抱えている場所です。私の目標は、ステート配列をループし、入ってくるchange.keyが配列内のキーと一致するかどうかをチェックし、そうでなければ、更新を実行するかどうかを確認します。そうでなければ、 。
だから、2つの質問:まず
、最初の変更が入ってくると、ループが正常に動作し、ちょうど同じ鍵(すなわち、1)と連続する各変化に対して
Update
をログコンソールます。別の変更が入ると、最初は正しく動作して配列に連結しますが、2のキーで連続して変更すると、Updateのコンソールログとelse節が起動します。第2に、状態を直接変更することなく配列をループしながら変更をどのように更新できますか?
私の回答はまったく役に立ちましたか?もしそうなら、それを「受け入れ」とマークすることを検討してください。そうでない場合、私がどのように助けることができるか教えてください。 – Chris
@Chris Chrisについては申し訳ありません。私は実際にこれを尋ねる前に胃インフルエンザに襲われたので、先日までそれを確認することさえなかった。私はそれが間違いなく解決策であるとしてあなたの答えを受け入れました! – Jake
問題ありません。うれしいことです:) – Chris