Javascript 在React中,如何在循环中设置状态变量?
我有许多状态变量(我只显示了3个): 给予 现在有什么方法可以循环使用这些检索到的值并设置状态,例如循环或映射版本:Javascript 在React中,如何在循环中设置状态变量?,javascript,reactjs,typescript,Javascript,Reactjs,Typescript,我有许多状态变量(我只显示了3个): 给予 现在有什么方法可以循环使用这些检索到的值并设置状态,例如循环或映射版本: this.setState({dat['field_name']:dat['start_text']}); 因此,返回的第一行是fieldname=i1,start_text='hi',因此循环将setState({i1:'hi'}) 反应文档: setState()不会立即改变this.state,但会创建挂起的状态转换。调用此方法后访问this.state可能会返回现有值。
this.setState({dat['field_name']:dat['start_text']});
因此,返回的第一行是fieldname=i1,start_text='hi',因此循环将setState({i1:'hi'})
反应文档:
setState()不会立即改变this.state,但会创建挂起的状态转换。调用此方法后访问this.state可能会返回现有值。无法保证对setState调用的同步操作,调用可能会>批处理以提高性能
不要在循环中调用setState,
只需在aloop中更新一个局部变量,然后对该变量调用setState方法,这将为您节省一些重新加载程序
反应文档:
setState()不会立即改变this.state,但会创建挂起的状态转换。调用此方法后访问this.state可能会返回现有值。无法保证对setState调用的同步操作,调用可能会>批处理以提高性能
不要在循环中调用setState,
只需在aloop中更新一个局部变量,然后对该变量调用setState方法,这将为您节省一些重新加载的时间,作为一个技术问题“我可以这样做吗?”答案是“可以”。在您的示例中,可以在循环内调用
setState
,因为每个状态更新都是相互独立的,并且不依赖于状态的先前值。React可能会将setState
更新批处理在一起,这样您就不会有多个重新渲染
for (var key in response.data) {
var dat = response.data[key];
this.setState({ [dat.field_name]: dat.start_text });
}
在[dat.field\u name]
周围使用括号,因为它是一个变量属性键。但是变量属性名对于Typescript来说是个问题,因为它假定它们是string
,而不是有效的键
我可能会按照@Sharon Geller的建议,使用组合值调用一次
setState
const changes = response.data.reduce(
(acc, curr) => ({ ...acc, [curr.field_name]: curr.start_text }),
{}
);
this.setState(changes);
从技术上讲,这不需要断言,因为
的类型changes
是空对象{}
,但是您可能希望在初始值{}上断言一个类型作为State
作为“我可以这样做吗?”的技术问题,答案是“是”。在您的示例中,可以在循环内调用setState
,因为每个状态更新都是相互独立的,并且不依赖于状态的先前值。React可能会将setState
更新批处理在一起,这样您就不会有多个重新渲染
for (var key in response.data) {
var dat = response.data[key];
this.setState({ [dat.field_name]: dat.start_text });
}
在[dat.field\u name]
周围使用括号,因为它是一个变量属性键。但是变量属性名对于Typescript来说是个问题,因为它假定它们是string
,而不是有效的键
我可能会按照@Sharon Geller的建议,使用组合值调用一次
setState
const changes = response.data.reduce(
(acc, curr) => ({ ...acc, [curr.field_name]: curr.start_text }),
{}
);
this.setState(changes);
从技术上讲,这不需要断言,因为
的类型changes
是空对象{}
,但是您可能希望在初始值{}上断言一个类型作为State
谢谢,非常有帮助。但是我得到的参数'prev'隐式地有一个'any'类型。
知道为什么吗?什么是prev
?哦,对不起,我更改了acc
的名称。它应该得到初始值的类型,即{}
。如果需要不同的类型,可以将初始值的类型断言为State{}。这可能会有帮助吗?我对这一切都不熟悉,所以我会读更多。非常感谢你!谢谢,非常有帮助。但是我得到的参数'prev'隐式地有一个'any'类型。
知道为什么吗?什么是prev
?哦,对不起,我更改了acc
的名称。它应该得到初始值的类型,即{}
。如果需要不同的类型,可以将初始值的类型断言为State{}。这可能会有帮助吗?我对这一切都不熟悉,所以我会读更多。非常感谢你!
const changes = response.data.reduce(
(acc, curr) => ({ ...acc, [curr.field_name]: curr.start_text }),
{}
);
this.setState(changes);