Picker (android): Convert children to an array before accessing with a position

Summary:
When using the following component, `this.props.children` is not a flat array.

``` js
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>
        );
    }
}
```

The resulting `this.props.children` is:

``` js
[
    (child),
    [
        (child),
        (child),
    ],
];
```

Therefor you can't use `this.props.children[2]` to get the last item.

The Android version of the [Picker](https://facebook.github.io/react-native/do
Closes https://github.com/facebook/react-native/pull/8153

Differential Revision: D4753480

Pulled By: javache

fbshipit-source-id: deb0264746b39303e66c69c191af0c962db39085
This commit is contained in:
Tim 2017-03-23 05:59:10 -07:00 committed by Facebook Github Bot
parent 8a8f34ae10
commit 720e19525e
1 changed files with 2 additions and 1 deletions

View File

@ -116,7 +116,8 @@ class PickerAndroid extends React.Component {
if (this.props.onValueChange) {
var position = event.nativeEvent.position;
if (position >= 0) {
var value = this.props.children[position].props.value;
var children = React.Children.toArray(this.props.children);
var value = children[position].props.value;
this.props.onValueChange(value, position);
} else {
this.props.onValueChange(null, position);