如何解决如何使用地图函数的setState动态做出反应?
我正在使用以下方法来使用map动态更新状态。但是,这不起作用,状态也不会更改。为什么这种方法无效,应该怎么做?
values= ['test1','test2','test3'] // The array could contain anything
this.setState({
events: [
...events,values.map((value) => {
return {
title: value,start: this.state.start,end: this.state.end,};
}),],});
解决方法
我可能是错的,但对我来说,您似乎只是在as.POSIXlt("2015-12-10",format = "%Y-%m-%d",tz = "GMT")-
as.POSIXlt("2015-10-07",tz = "GMT")
#Time difference of 64 days
前面缺少散布运算符
values.map(...)
因为this.setState({
events: [
...events,...values.map((value) => {
return {
title: value,start: this.state.start,end: this.state.end,};
}),],});
返回一个数组,并且看到您扩展了values.map(...)
,所以我猜想您也希望映射值也被扩展。如果我误会了一些东西,请告诉我,我们可以进一步调查。
此外,除非您将events
的状态从先前的状态中解构了(在代码中未粘贴到此处),否则您可能希望将其称为events
。
编辑:
有关为什么使用传播算子作为解决方案的更详细说明:
在您的this.state.events
中,属性state
是一个对象数组。因此,当您更改它的值时,它必须再次是一个对象数组。
也许最重要的细节是events
返回数组。
values.map
是对象的数组。 events
也是如此。
因此values.map
是一个包含两个数组的数组,一个数组位于位置0,另一个数组位于位置1。
但是您想要一个对象数组,而不是数组数组。因此,您必须同时传播它们。
我希望现在更加清楚。如果您还有其他问题,请随时提问。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。