[英]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
是一个对象数组,每个对象都有一个id
和name
。
我想念什么?
当数据可用时,将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.