繁体   English   中英

为什么.map()不返回任何内容?

[英]Why is .map() not returning anything?

我试图在API调用后从状态动态加载表单,这是在componentDidMount() API调用成功,完成后在languageList上调用setState() ,但是.map()调用不返回任何选项。 它什么也不返回。

  componentDidMount() {
    let languages = []
    base('Languages').select({
      view: 'Grid view'
    }).firstPage(function(err, records) {
      if (err) {console.error(err); return; }
      records.forEach(function(record) {
        let languageObject = {}
        languageObject['id'] = record.id
        languageObject['name'] = record.get('Language Name')
        languages.push(languageObject)
      })
    })
    this.setState({
      languageList: languages,
    })
  }

  render() {
    return (
      ...
      <select>
        {this.state.languageList.map((language, key) => (
          <option key={key} value={language.id}>{language.name}</option>
        ))}
      </select>
    )
  }

我已经验证state.languageList是一个对象数组,每个对象都有一个idname

我想念什么?

当数据可用时,将setState移到API回调中。

您正在接收数据之前调用它,因为它是异步的

base('Languages').select({
  view: 'Grid view'
}).firstPage((err, records) => {// arrow function to not block `this`
  if (err) {
    console.error(err);
    return;
  }
  records.forEach(function(record) {
    let languageObject = {}
    languageObject['id'] = record.id
    languageObject['name'] = record.get('Language Name')
    languages.push(languageObject)
  })
  // languages array has been updated here
  this.setState({
    languageList: languages,
  })

})

尝试这个

<select>
  {
   this.state.languageList && this.state.languageList.map((language, key) => (
   <option key={key} value={language.id}>{language.name}</option>
   ))
  }
</select>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM