@@ -29,6 +29,7 @@ export interface Props {
29
29
interface State {
30
30
showLoader : boolean ;
31
31
pullToRefreshThresholdBreached : boolean ;
32
+ prevDataLength : number | undefined ;
32
33
}
33
34
34
35
export default class InfiniteScroll extends Component < Props , State > {
@@ -38,6 +39,7 @@ export default class InfiniteScroll extends Component<Props, State> {
38
39
this . state = {
39
40
showLoader : false ,
40
41
pullToRefreshThresholdBreached : false ,
42
+ prevDataLength : props . dataLength ,
41
43
} ;
42
44
43
45
this . throttledOnScrollListener = throttle ( 150 , this . onScrollListener ) . bind (
@@ -137,15 +139,25 @@ export default class InfiniteScroll extends Component<Props, State> {
137
139
}
138
140
}
139
141
140
- UNSAFE_componentWillReceiveProps ( props : Props ) {
142
+ componentDidUpdate ( nextProps : Props ) {
141
143
// do nothing when dataLength is unchanged
142
- if ( this . props . dataLength === props . dataLength ) return ;
144
+ if ( this . props . dataLength === nextProps . dataLength ) return ;
143
145
144
146
this . actionTriggered = false ;
145
- // update state when new data was sent in
146
- this . setState ( {
147
- showLoader : false ,
148
- } ) ;
147
+ }
148
+
149
+ static getDerivedStateFromProps ( nextProps : Props , prevState : State ) {
150
+ const dataLengthChanged = nextProps . dataLength !== prevState . prevDataLength ;
151
+
152
+ // reset when data changes
153
+ if ( dataLengthChanged ) {
154
+ return {
155
+ showLoader : false ,
156
+ pullToRefreshThresholdBreached : false ,
157
+ prevDataLength : nextProps . dataLength ,
158
+ } ;
159
+ }
160
+ return null ;
149
161
}
150
162
151
163
getScrollableTarget = ( ) => {
0 commit comments