react setState导致不稳定的数组行为
react setState causing erratic array behaviour
我每10秒调用一次函数。
setInterval(this.getStudent, 10000);
在函数中,它应该获取学生数组的最新状态。
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 });
}
如果I console.log(this.state.students);
,它会在10秒后显示一个学生的创建。
Object // After 10 seconds perfect!
name: Liam Smith
major: BIO
...
但是在另一个10秒后(总共20秒),它应该只是附加一个新创建的学生。但是它附加了一个额外的so,看起来像这样:
[Object, Object, Object]
然后计时器变得一团糟,随时随地添加新的学生。但是为什么反应状态会导致这个呢?我怎么能每10秒就增加一个学生呢?
Ps:我在渲染中调用setInterval…
render() {
setInterval(this.getStudent, 10000);
console.log(this.state.cards);
return (
<div>
....
render()
在每次组件需要重新渲染时被调用,例如当您添加学生时。
每次render()
被调用时,你启动一个新的间隔计时器,例如,每次你更新state.students
时,你渲染,它启动一个新的计时器,它导致一个新的学生,这导致一个新的渲染,这导致许多新的计时器,学生,和渲染,和恶心。
你想在componentDidMount()
中启动一个定时器,例如,
componentDidMount() {
setInterval(this.getStudent, 10000);
}
render() {
return (
<div>
...
(这可能不满足您的实际需求,例如,如果您有多个组件依赖于相同的学生列表,这将是不合适的。)
不相关,但你目前通过压入state.students
数组直接改变状态。这可能会因为各种各样的原因而变得不可预测的糟糕;只是在你继续前进的时候要记住一些事情。正确修改ReactJS中的状态数组
相关文章:
- 我需要迭代一个JSON数组——不知道如何做到——已经搜索过了,但仍然可以'我一点也不知道
- 通过AJAX从具有LazyLoadingEnabled=true的EF返回的数组不正确
- For循环与数组不起作用
- Lodash 从与值数组不匹配的数组中获取项目
- 循环浏览页面上所有选中的复选框并将id拉入数组不起作用
- 文本框搜索/Javascript函数数组**不对应**
- 带有附加元素的新数组不会可视化
- 映射 jQuery 对象的数组不起作用
- Javascript-自定义数组不起作用
- AngularStrap Select和ng选项don'使用动态数组不能很好地工作
- 函数中的Javascript数组不起作用
- Knockout.js多个可观察数组不工作
- 角度数组不会显示嵌套数组
- Js browserify 需要从字符串数组不起作用
- Javascript 对象数组不返回正确的值
- 使用 Moment.js 制作本周日期的数组不会添加到数组中
- 使用 JavaScript 比较 2 个数组并创建一个新的对象数组,该数组不包含与 id 字段匹配的对象
- 确保我的随机值数组不包含重复值
- Dojo JsonRestStore 的数组不在 JSON 响应的根级别
- 节点.js遍数组不显示整个对象