Reactjs 在React中使用for循环时,this.setState不会将项推入数组

Reactjs 在React中使用for循环时,this.setState不会将项推入数组,reactjs,Reactjs,如何使用react将单个项目从一个阵列转移到另一个阵列 我有一个处于我创建状态的项目数组,但我需要将它们逐个发送到另一个状态。最好的方法是什么?我尝试了回调函数,但我不想使用setTimeone state = { imageChosen: [] }; // Choose multiple images to upload fileSelectedHandler = event => { let tmp = []; for (let i = 0; i < e

如何使用react将单个项目从一个阵列转移到另一个阵列

我有一个处于我创建状态的项目数组,但我需要将它们逐个发送到另一个状态。最好的方法是什么?我尝试了回调函数,但我不想使用setTimeone

state = { imageChosen: [] };    

// Choose multiple images to upload
fileSelectedHandler = event => {
    let tmp = [];
    for (let i = 0; i < event.target.files.length; i++) {
      tmp.push(event.target.files[i])
    }
    this.setState({ imageChosen: tmp }, () => this.uploadMedia());
  }
  // Add chosen images to the media chosen array
  uploadMedia = () => {
    for (let i = 0; i < this.state.imageChosen.length; i++) {
      this.setState({ 
        mediaChosenArr: [...this.state.mediaChosenArr, this.state.imageChosen[i]],
        displayMediaChosenArr: [...this.state.displayMediaChosenArr, URL.createObjectURL(this.state.imageChosen[i])],
        imageChosen: [],
      });
    }
    document.getElementById("mediaPlaceholder").value = '';
  };
state={imageselected:[]};
//选择要上载的多个图像
fileSelectedHandler=event=>{
设tmp=[];
for(设i=0;ithis.uploadMedia());
}
//将所选图像添加到所选媒体阵列
上传媒体=()=>{
for(设i=0;i
不建议将
setState()
一起用于循环

已编辑

fileSelectedHandler = event => {
  let mediaChosenArr = [];
  let displayMediaChosenArr = [];
  for (let i = 0; i < event.target.files.length; i++) {
    mediaChosenArr.push(event.target.files[i]);
    displayMediaChosenArr.push(URL.createObjectURL(event.target.files[i]);
    });
  }
  this.setState({
    mediaChosenArr: mediaChosenArr,
    displayMediaChosenArr: displayMediaChosenArr
  });
  document.getElementById("mediaPlaceholder").value = ''; // It seems not good.
}
fileSelectedHandler=event=>{
让mediaChosenArr=[];
让displayMediaChosenArr=[];
for(设i=0;i
不建议将
setState()
一起用于循环

已编辑

fileSelectedHandler = event => {
  let mediaChosenArr = [];
  let displayMediaChosenArr = [];
  for (let i = 0; i < event.target.files.length; i++) {
    mediaChosenArr.push(event.target.files[i]);
    displayMediaChosenArr.push(URL.createObjectURL(event.target.files[i]);
    });
  }
  this.setState({
    mediaChosenArr: mediaChosenArr,
    displayMediaChosenArr: displayMediaChosenArr
  });
  document.getElementById("mediaPlaceholder").value = ''; // It seems not good.
}
fileSelectedHandler=event=>{
让mediaChosenArr=[];
让displayMediaChosenArr=[];
for(设i=0;i
避免从循环内部调用
setState
,因为每次调用
setState
都会导致渲染

而是首先组装所选的
图像
数组,然后将其传递给
setState
。此外,由于您没有修改文件数组,因此应该能够直接将其传递到
setState
,而无需循环

还要记住


避免从循环内部调用
setState
,因为每次调用
setState
都会导致渲染

而是首先组装所选的
图像
数组,然后将其传递给
setState
。此外,由于您没有修改文件数组,因此应该能够直接将其传递到
setState
,而无需循环

还要记住


您可以使用模板数组

state = { imageChosen: [] };    

fileSelectedHandler = event => {
   let tmpArray = [...imageChosen];
   for (let i = 0; i < event.target.files.length; i++) {

     tmpArray.push(event.target.files[i]);

     console.log(event.target.files[i])
   }

   this.setState({imageChosen: tmpArray})

 }

state={imageselected:[]};
fileSelectedHandler=event=>{
让tmpArray=[…ImageSelected];
for(设i=0;i
您可以使用模板数组

state = { imageChosen: [] };    

fileSelectedHandler = event => {
   let tmpArray = [...imageChosen];
   for (let i = 0; i < event.target.files.length; i++) {

     tmpArray.push(event.target.files[i]);

     console.log(event.target.files[i])
   }

   this.setState({imageChosen: tmpArray})

 }

state={imageselected:[]};
fileSelectedHandler=event=>{
让tmpArray=[…ImageSelected];
for(设i=0;i
您可以用几种方法来实现这一点,下面是一种使用forEach的方法

const initialArray = ['one.png','two.png','three.png']
this.state = { imageChosen: [] }; 
let {imageChosen} = this.state
initialArray.forEach(insertImages);

function insertImages(value) {
 this.setState({imageChosen: value})
}

你可以用几种方法来实现这一点,这里有一种是forEach

const initialArray = ['one.png','two.png','three.png']
this.state = { imageChosen: [] }; 
let {imageChosen} = this.state
initialArray.forEach(insertImages);

function insertImages(value) {
 this.setState({imageChosen: value})
}

你能看一下我刚做的更新,让我知道是否有办法做到这一点吗?如果mediaChosenArr和displayMediaChosenArr状态的数组中已经有我需要附加的内容,我该怎么办?NVM,我知道了。我只需要将现有状态推入这些初始变量。非常感谢你的帮助!你能看一下我刚做的更新,让我知道是否有办法做到这一点吗?如果mediaChosenArr和displayMediaChosenArr状态的数组中已经有我需要附加的内容,我该怎么办?NVM,我知道了。我只需要将现有状态推入这些初始变量。非常感谢你的帮助!