react-native中Picker的子Item获取value报错失败问题的解决方案

在React-Native应用中遇到Picker组件使用时,通过this.props.children获取值报错。问题出在Picker的children并非纯数组,而是特殊的结构。解决方案是将Item用concat连接成纯数组,从而正常获取所需值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在使用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>
        );
    }
}

参考 React-Native 的 pull request

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值