したがって、私はReactを初めて使用しています。私は関数マップを使用して、コンポーネントの状態でオブジェクトの配列にIDを渡そうとしています。しかし、関数内のオブジェクトを反復処理すると、結果として得られる配列の要素はすべて同じになり、最後に反復されたものと等しくなります。私はユニークなIDを追加するためにuuidモジュールを使用しています。これは、コンポーネントの内部にコメントの説明が含まれています。Reactのマップを使用すると、最後の要素に等しい配列が返されます
constructor() {
super()
this.state = {
classes: Array(5).fill({
id: null,
name: null
}),
}
}
componentWillMount() {
// This console.log, strangely, logs the state of the Component as if
// this componentWillMount function had already been executed, showing the
// classes with their ids (still the wrong ones). Would appreciate it if
// someone explained that
console.log(this.state.classes)
let classThings = this.state.classes.map(classObject => {
let obj = classObject
obj.id = uuid.v4()
// This logs the object correctly. The console shows, thanks to this,
// five different objects with five different ids
console.log(obj)
return obj
})
this.setState({
classes: classThings
})
// But, for some reason, this one logs the array and all the elements
// inside are equal to te last one logged by the previous console.log
// that is inside the map function, when it should log an array with the
// five different elements
console.log(classThings)
}
ご協力いただければ幸いです。ありがとう。
を取得するために、新しいオブジェクト毎回作成する必要があり、すべての反復
'アレイ#1 fill'は同じに、アレイ内のすべての要素を設定されていますオブジェクトであるため、最も最近の変更はオブジェクトに含まれるものになります。 – 4castle
@ 4castleは応答に感謝します。しかし、私はコンストラクタで一度しか使用していませんが、setStateを使用してそれらのすべてが等しくない場合でも影響します。 –