私は10秒ごとに関数を呼び出しています。反応setStateが異常な配列動作を引き起こす
setInterval(this.getStudent, 10000);
この関数内では、students配列の最新の状態を取得する必要があります。
getStudent() {
const initialArr = this.state.students;
const student = createStudent(); // this function works
// it just returns a student object
initialArr.push(student);
this.setState({ students: initialArr });
}
私がconsole.log(this.state.students);
の場合、10秒後に生徒が作成されます。
Object // After 10 seconds perfect!
name: Liam Smith
major: BIO
...
さらに10秒後(合計20秒後)には、新たに作成された生徒が1人追加されます。しかし、それは余分なので、このように見えます:
[Object, Object, Object]
そしてそこからタイマーはすべて台無しになり、望むたびに新しい生徒を追加します。しかし、なぜそれが原因で反応するのですか? 10秒ごとに生徒を追加するにはどうすればよいですか?
シモンズ:私はそうのようにレンダリング内のsetIntervalを呼んでいる...
render() {
setInterval(this.getStudent, 10000);
console.log(this.state.cards);
return (
<div>
....
どこから 'setInterval'を呼び出していますか?あなたが不適切なライフサイクルの方法でそれを呼び出すように聞こえるので、同時に複数の間隔を実行しているようです。 –
私はrender()内で呼び出しています@DaveNewton更新された投稿 – Modelesq