【发布时间】:2020-01-31 07:01:37
【问题描述】:
我是 React Native 的新手,在其中填充下拉选项时遇到问题。
在您说这是一个重复的问题之前 - 这是 3 年前提出的问题的 link,他们讨论了如何使用数组和列表填充下拉列表。
我正在使用map,它是ES6中JS引入的一种数据结构。
我正在使用 Picker 作为下拉菜单。
我正在使用 REST API 获取的数据填充名为 branchData 的地图。
这是我用于填充下拉列表的代码:
<Picker
selectedValue={this.state.branch}
style={styles.fieldPicker}
mode="dropdown"
onValueChange={(itemValue, itemIndex) =>
this.setState({branch: itemValue})
}>
{/* Data Binding */}
{this.state.branchData.forEach((name, id) =>
{
return <Picker.Item key={id} value={id} label={name} />;
})
}
</Picker>
我通过点击一个按钮来检查名称和 ID 是否被正确访问。
问题是我无法看到下拉列表被填充,我所看到的只是向下箭头点击,它什么都不做。
之前我手动添加了两个选择器项目,并且能够在点击时看到它们。
更新:
问题是在 API 获取详细信息和更新状态变量之前调用了渲染函数。
因此下拉菜单是空的,但按下按钮时调用的 console.log 会显示数据。 (如果你想看代码,请告诉我)
我在构造函数中添加了 API 调用,假设它会在渲染之前执行,但 API 调用是异步调用,不会在渲染之前发生。
简而言之- API成功获取数据后如何调用render?
【问题讨论】:
-
您可以提供更多代码吗?,在您的代码中,当 forEach 只是一个迭代器时,您返回的 forEach 的使用是错误的。如果你使用 react 钩子,你应该使用 effects 将你的异步调用与 fetch 一起使用,如果你使用类组件,你应该使用 componentDidMount。
-
@anthonywillismuñoz 我也尝试过componentDidMount,它没有用,你能推荐任何好的资源来学习如何处理异步调用获取的数据吗?谢谢。 return 语句运行良好,我尝试使用手动定义的数组和映射,它正确填充了下拉列表,因此没有语法错误,唯一的问题是使用从异步调用中获取的数据。
-
robinwieruch.de/react-fetching-data with promises, if you like async await dev.to/johnpaulada/synchronous-fetch-with-asyncawait
标签: javascript api react-native asynchronous picker