在使用Picker时,类似下面的代码:
class Example extends Component {
render() {
const values = ['1', '2'];
return (
<Picker
value={this.state.value}
onValueChange={this.onValueChange.bind(this)}
>
<Picker.Item
label="n/a"
value={null}
/>
{values.map(value => {
return (
<Picker.Item
label={value}
value={value}
/>
);
})}
</Picker>
);
}
}
点击下拉框中的 1 / 2, 便会报错:Cannot read 'props' of undefined
或者Cannot read 'value' of undefined
发现
在测试中发现单独使用数组渲染Picker的子Item时可正常使用,但是添加一个’静态’的Item时,数组渲染的Item就会受到影响,
进一步发现Picker的this.props.children
并不是一个纯数组,而是类似
[
(child),
[
(child),
(child),
],
];
这样的结构,而使用this.props.children[2]去获取也是失败的。
解决方案
可以使用concat去连接Item使Picker的this.props.children
变为纯数组:
class Example extends Component {
render() {
const values = ['1', '2'];
return (
<Picker
value={this.state.value}
onValueChange={this.onValueChange.bind(this)}
>
{
[
<Picker.Item label="n/a" />
].concat(values.map(value => {
return (
<Picker.Item
label={value}
value={value}
/>
);
}))
}
</Picker>
);
}
}