-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathScrollProvider.js
43 lines (38 loc) · 1009 Bytes
/
ScrollProvider.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
import React from 'react';
import { ScrollView } from 'react-native';
class ScrollProvider extends React.Component {
constructor(props) {
super(props);
this.state = {
contentOffset: { x: 0, y: 0 },
layoutMeasurement: {}
};
}
handleScroll = (e) => {
const { contentOffset, layoutMeasurement } = e.nativeEvent;
this.setState({ contentOffset, layoutMeasurement });
}
render() {
const childrenWithProps = React.Children.map(this.props.children,
(child) => {
if (child.props.name === 'ScrollReceiver') {
return React.cloneElement(child, {
contentOffset: this.state.contentOffset,
layoutMeasurement: this.state.layoutMeasurement
});
}
return child;
}
);
return (
<ScrollView
scrollEventThrottle={300}
onScroll={this.handleScroll}
{...this.props}
>
{childrenWithProps}
</ScrollView>
);
}
}
export default ScrollProvider;