reactjs:如何为嵌套对象同步多次setState

时间:2017-12-24 14:03:53

标签: reactjs

我的嵌套状态如下:

this.state = {
  urls: {

    site1:[]
    site2:[]
    site3:[]

  }

}

我有一个更新网址的功能,即site1,site2和site3

create_urls(sitename){
   ..... some logic to produce list of urls based on sitename
  this.setState({ urls:{
        ...this.state.urls,
        [sitename]: [url1,url2 ..... ]
      }
   });
}

现在我想填写下面的网址

componentDidMount(){
    this.create_urls("site1");
    this.create_urls("site2");
    this.create_urls("site3");
}

我发现最终只有site3网址显示为site1,site2显示为空。我期待填写所有三个网站的网址。

状态异步变化。如果我在其中放入一个带有console.log的回调函数,我就能看到它。

那么如何在mount之后输入所有网站的网址。

2 个答案:

答案 0 :(得分:1)

create_urls(sitename){
   ..... some logic to produce list of urls based on sitename
   return urlArray

}

componentDidMount(){
   const url1Array = this.create_urls("site1");
   const url2Array = this.create_urls("site2");
   const url3Array = this.create_urls("site3");
    this.setState({ 
     site1: url1Array,
     site2: url2Array,
    site3: url3Array,

   });

}

答案 1 :(得分:0)

你可以简单地将一个函数传递给setState调用,然后你可以安全地将以前的状态与新的状态同步

InMemory