react-native - Picker - undefined不是一个对象(评估' this.props.children [position] .props)

时间:2016-08-19 09:15:03

标签: react-native

使用Picker时遇到了一种奇怪的行为。

我使用Picker如下:

<Picker
  mode="dropdown"
  style={styles.pickerField}
  selectedValue={this.state.dayAndTime}
  onValueChange={(text) => this.setState({ dayAndTime: text })}
>
  <Picker.Item label="Le 5/07 à 15H" value="0" key="0" />
</Picker>

当加载显示此选择器的屏幕时,我得到一个错误屏幕(参见下面的截图):undefined不是对象(评估&#39; this.props.children [position] .props)

从我收集的内容来看,我的问题来自Libraries / Components / Picker / PickerAndroid.android.js的第106行,似乎有一个属性&#34; onValueChange&#34;触发它。我删除了它,错误没有发生。

我使用react-native 0.31.0,我使用了一个带有genymotion的android api 23虚拟设备。

有什么我做错的事吗?

enter image description here

3 个答案:

答案 0 :(得分:3)

必须至少有2个项目可供选择,例如: <Picker.Item label="Le 5/07 à 15H" value="0" key="0" /> <Picker.Item label="Le 5/07 à 15H" value="1" key="1" />

另外,为了获得更好的语法,您可以尝试: onValueChange={(dayAndTime) => this.setState({ dayAndTime })}

答案 1 :(得分:1)

我有一个类似的问题,但它使用的是Item组件+数组。为了解决这个问题,我添加了一个空数组作为我的dataSource prop的默认值。就像那样:

<Picker style={styles.picker} mode="dropdown" { ...props }>
    <Picker.Item label="--- Select ---" value="" />
    {
        props.dataSource.map(({ label, value }) => (
            <Picker.Item key={value} label={label} value={value} />
        ))
    }
</Picker>

PickerWithLabel.defaultProps = {
    dataSource: []
};

答案 2 :(得分:1)

 import {Picker} from '@react-native-picker/picker';
 <Picker
                  dropdownIconColor={colors.bColor}
                  selectedValue={formik.values.state}
                  onValueChange={value => changeValue('state', value)}>
                  <Picker.Item label={'Select State'} value="" />
                  {states ?                        states.map((item, index) => {
                      return (
                        <Picker.Item
                          key={index}
                          label={item.StateName}
                          value={item.StateName}
                        />
                      );
                    }):null}
                </Picker>


----------
If you return null when you don't have a array to render, It will solve the issue. But you need to provide that 
"<Picker.Item label={'Select State'} value="" />" for blank selected value.