Add setNativeProps

Summary:
Curently FlatList does not implement setting native props directly like the old ListView did. This pr introduce the `setNativeProps` function which delegates to MetroListView or VirtualizedList. Thos don't have `setNativeProps` handling either, so, I delegated further to the respective ListView and Scroll components, which do have handling for it, thus, allowing to set the native props through FlatList.

Create a project with a FlatList and change a native property using `setNativeProps`:

```javascript
  componentDidMount() {
        setInterval(() => {
            this.list.setNativeProps({ style: {backgroundColor:"white"} })
        }, 1000)
    }

  render() {
    return (
      <View style={styles.container}>
        <FlatList ref={component => this.list = component}
                  style={{backgroundColor:"black"}}
                  data={[{key: 'a'}, {key: 'b'}]}
                  renderItem={({item}) => <Text>{item.key}</Text>} />
      </View>
    )
  }
```

Fixes #13501
Closes https://github.com/facebook/react-native/pull/13529

Differential Revision: D5283593

Pulled By: sahrens

fbshipit-source-id: 8f96f88e286042d82452fef924689b5a8a783987
This commit is contained in:
Rene Weber 2017-06-20 09:24:54 -07:00 committed by Facebook Github Bot
parent 60783aa6ba
commit 75508c12ff
3 changed files with 17 additions and 0 deletions

View File

@ -388,6 +388,12 @@ class FlatList<ItemT>
} }
} }
setNativeProps(props: Object) {
if (this._listRef) {
this._listRef.setNativeProps(props);
}
}
componentWillMount() { componentWillMount() {
this._checkProps(this.props); this._checkProps(this.props);
} }

View File

@ -95,6 +95,11 @@ class MetroListView extends React.Component {
getListRef() { getListRef() {
return this._listRef; return this._listRef;
} }
setNativeProps(props: Object) {
if (this._listRef) {
this._listRef.setNativeProps(props);
}
}
static defaultProps: DefaultProps = { static defaultProps: DefaultProps = {
keyExtractor: (item, index) => item.key || String(index), keyExtractor: (item, index) => item.key || String(index),
renderScrollComponent: (props: Props) => { renderScrollComponent: (props: Props) => {

View File

@ -313,6 +313,12 @@ class VirtualizedList extends React.PureComponent<OptionalProps, Props, State> {
} }
} }
setNativeProps(props: Object) {
if (this._scrollRef) {
this._scrollRef.setNativeProps(props);
}
}
static defaultProps = { static defaultProps = {
disableVirtualization: false, disableVirtualization: false,
horizontal: false, horizontal: false,