如何在reactjs的map函数中进行连接

How to concat in map function of reactjs

在下面的代码中,concat 正在替换数组中的值而不是将其推送到 react 中。

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 正在覆盖数组而不是连接它

帮我解决这个问题..

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))

由于 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))
  })