reactjs - 如何在 react.js 的迭代中处理 SetState 函数
问题描述
当我在 for 循环中使用 setState 函数时,它只在每个子组件 value 中分配数组的最后一个值。我如何使它分配具有相应索引的值。
class App extends Component {
constructor() {
super();
this.postID = "";
this.value = 0;
this.name = "";
this.state = {
countersarray: []
};
}
componentDidMount() {
this.loadData();
}
//load data as from array
loadData = countersarray => {
var nam = ["Haseeb", "Fawad", "Khan"];
var elements = "";
var count = 0;
for (var i = 0; i < nam.length; i++) {
elements = nam[i];
this.setState(previousState => ({
countersarray: [
...previousState.countersarray,
(countersarray = {
key: uniqeid(),
id: uniqeid(),
value: 0,
name: elements
})
]
}));
}
};
我期望输出具有不同的名称,但实际输出具有相同的名称。
状态
countersarray:[{id:"ju2a3ex7", key:"ju2a3ex6",name:"Khan",value:0},
{id:"ju2a3ex9",key:"ju2a3ex8",name:"Khan",value:0},
{id:"ju2a3exb",key:"ju2a3exa",name:"Khan",value:0}]
预期的
countersarray:[{id:"ju2a3ex7", key:"ju2a3ex6",name:"Haseeb",value:0},
{id:"ju2a3ex9",key:"ju2a3ex8",name:"Fawad",value:0},
{id:"ju2a3exb",key:"ju2a3exa",name:"Khan",value:0}]
解决方案
不要setState
在for..loop
. 或者你可以尝试一些东西
loadData = countersarray=>{
var name = ["Haseeb", "Fawad", "Khan"]
countersarray = [...countersarray, ...name.map(nm => {
key: uniqeid(),
id: uniqeid(),
value: 0,
name: nm
})]
this.setState({countersarray})
}
推荐阅读
- c - 由于 libffi 中未定义的引用,构建 Glib 时出错
- hadoop - 无法从 Hive 外部表上的 Druid 数据源查询数据
- r - 根据自定义标识符对数据框中的行进行排序
- java - 在java9中将发布者流到字符串
- linux - 下载并安装(Jetbrains 产品) IntellijIdea-webStorm-phpStorm idea 32 位 Linux tar.gz
- python - 基于 Django 类的视图中的密码格式无效或未知散列算法
- xamarin.forms - 适合标签页 xamarin 表单上的标题文本?
- .net - 添加消费者时的 MassTransit
- github-actions - 如何在 Cloud Runners 的 GitHub Actions 中使用 msdeploy?
- java - Null Objects after submitting Form in Spring (H2, SpringBoot, Thymeleaf, CRUD)