Permalink
Browse files

Bugfix - Only add valid IOSPicker items.

Summary:
Fixes #9216.

As nickzuber describes in #9216, conditional `Picker.Item` elements will lead to exceptions downstream when the `Picker` attempts to construct the collection of items.

[In the picker source](https://github.com/facebook/react-native/blob/a2fb703bbb988038323c55b29b40e8f5ff52966d/Libraries/Components/Picker/PickerIOS.ios.js#L48-L53) we can see that `child.props` is accessed when `child` has the potential to be an invalid `React` element.

```js
ReactChildren.forEach(props.children, function (child, index) {
  if (child.props.value === props.selectedValue) {
    selectedIndex = index;
  }
  items.push({value: child.props.value, label: child.props.label});
});
```

This change ensures the incoming element is valid

```diff
ReactChildren.forEach(props.children, function (child, index) {
+ if (!React.isValidElement(child)) {
+   return;
+ }
  if (child.props.value === props.selectedValue) {
    selectedIndex = index;
  }
  items.
Closes #9243

Differential Revision: D3847514

Pulled By: spicyj

fbshipit-source-id: f46fbd4b0f81de7a92e1ca3e60b5ed15a9cbbf78
  • Loading branch information...
1 parent 2ee910a commit 2e4ab9ff70713386a951771e6096e55fdd78e3be @ajwhite ajwhite committed with Facebook Github Bot 0 Sep 11, 2016
Showing with 1 addition and 1 deletion.
  1. +1 −1 Libraries/Components/Picker/PickerIOS.ios.js
@@ -45,7 +45,7 @@ var PickerIOS = React.createClass({
_stateFromProps: function(props) {
var selectedIndex = 0;
var items = [];
- ReactChildren.forEach(props.children, function (child, index) {
+ ReactChildren.toArray(props.children).forEach(function (child, index) {
if (child.props.value === props.selectedValue) {
selectedIndex = index;
}

0 comments on commit 2e4ab9f

Please sign in to comment.