Как конкатить в карту функцию реагирования - PullRequest
0 голосов
/ 08 мая 2018

В приведенном ниже коде происходит то, что concat заменяет значение в массиве, а не вводит его в реакции.

export default class Newsfeed extends Component {

 constructor(props, context) {
 super(props, context);
 this.imagemodal = this.imagemodal.bind(this)
 this.state = {
   imageArray:[],
   myimage:[{id:1,media:[{url:xyz},{url:abc}},
           {id:2, media:[{url:xyz}, {url:abc}]
  }




 this.state.myimage.map((myimage) => {
    if(someId === myimage.id){

     myimage.media.map((media)=>{

        this.setState({
          imageArray:this.state.imageArray.concat([media.url]),
          showimageslider:true,
          sid:sid
        },() =>console.log(this.state.imageArray.length))
      })

    }
  })

imageArray завершил запись массива вместо его конкатенации

Помоги мне в этом. .. 1006 *

Ответы [ 2 ]

0 голосов
/ 08 мая 2018

Поскольку функция seState является асинхронной, вам нужно выполнить обычную операцию -> сформировать массив и затем выполнить setState

const imageArray = [];
this.state.myimage.map((myimage) => {
if(someId === myimage.id){

 myimage.media.map((media)=>{
    imageArray.push(media.url);  
  }
});
this.setState({
      imageArray:this.state.imageArray.concat(imageArray),
      showimageslider:true,
      sid:sid
    },() =>console.log(this.state.imageArray.length))
  })
0 голосов
/ 08 мая 2018

setState функция асинхронная. Вы можете попробовать что-то вроде ниже

let mediaURLs = [];
this.state.myimage.map((myimage) => {
    if(someId === myimage.id){
      myimage.media.map((media)=>{
          mediaURLs.push(media.url);      
      })
    }
})
mediaURLs = mediaURLs.concat(this.state.imageArray);
this.setState({
  imageArray:mediaURLs,
  showimageslider:true,
  sid:sid
},() =>console.log(this.state.imageArray.length))
...