在 React Native 中,使用 Map 对象生成 Picker.Item 实例会触发“TypeError:undefined 不是对象”
2018-07-25
1060
我的代码基于此 Stack Overflow 上的以下问题: React Native 将状态中的数组值应用为 Picker 项目
我使用了 Manjeet Singh 的第一个解决方案(用于将对象映射到 Picker.Item 实例),因为我将数据存储在对象中。
但是,当我使用他的方法时,出现了“TypeError:undefined 不是对象(评估‘child.props.value’)”错误。
我的代码如下所示:
class View extends React.Component{
state = { exercise: '' };
arrItems = {"Badminton":"7", "Basketball":"9.3", "Biking":"8"};
render(){
<Picker selectedValue={this.state.exercise}
onValueChange={(itemValue, itemIndex)=>this.setState({ exercise: itemValue })>
{Object.keys(this.arrItems).map((key) => {
return (<Picker.Item label={key} value={key} key={key}/>)
})}
}
</Picker>
}
我对 React Native 还很陌生 - 是什么问题导致了此错误?
1个回答
一些小提示:
- 尝试将变量设置为本地状态 (this.state),目前我认为您无法访问变量。您在构造函数中设置状态,构造函数(如下所示)和 super() 行是必需的。
- 您在 onValueChange 属性末尾缺少结束标记。
-
{ return(statement) } 等于
(statement)
,这仅在单行时有效。 -
您也可以使用
.map((item, index) =>
来获取项目的索引,以便您可以将其用作项目中的关键属性。
试试这个:
class View extends React.Component {
constructor() {
super();
this.state = {
exercise: '',
arrItems: { "Badminton": "7", "Basketball": "9.3", "Biking": "8" }
}
}
render() {
return (
<Picker selectedValue={this.state.exercise}
onValueChange={(itemValue, itemIndex) => this.setState({ exercise: itemValue })}>
{Object.keys(this.state.arrItems).map((key, index) =>
<Picker.Item label={key} value={key} key={index} />
)}
</Picker>
)
}
}
此外,您可能希望将您的 Class 重命名为不同于 View 的名称,因为您可能会经常使用内置 View(只能有一个)。
howtopythonpls
2018-07-25