@@ -29,6 +29,7 @@ export interface Props {
2929interface State {
3030 showLoader : boolean ;
3131 pullToRefreshThresholdBreached : boolean ;
32+ prevDataLength : number | undefined ;
3233}
3334
3435export default class InfiniteScroll extends Component < Props , State > {
@@ -38,6 +39,7 @@ export default class InfiniteScroll extends Component<Props, State> {
3839 this . state = {
3940 showLoader : false ,
4041 pullToRefreshThresholdBreached : false ,
42+ prevDataLength : props . dataLength ,
4143 } ;
4244
4345 this . throttledOnScrollListener = throttle ( 150 , this . onScrollListener ) . bind (
@@ -137,17 +139,31 @@ export default class InfiniteScroll extends Component<Props, State> {
137139 }
138140 }
139141
140- UNSAFE_componentWillReceiveProps ( props : Props ) {
142+ componentDidUpdate ( prevProps : Props ) {
141143 // do nothing when dataLength is unchanged
142- if ( this . props . dataLength === props . dataLength ) return ;
144+ if ( this . props . dataLength === prevProps . dataLength ) return ;
143145
144146 this . actionTriggered = false ;
147+
145148 // update state when new data was sent in
146149 this . setState ( {
147150 showLoader : false ,
148151 } ) ;
149152 }
150153
154+ static getDerivedStateFromProps ( nextProps : Props , prevState : State ) {
155+ const dataLengthChanged = nextProps . dataLength !== prevState . prevDataLength ;
156+
157+ // reset when data changes
158+ if ( dataLengthChanged ) {
159+ return {
160+ ...prevState ,
161+ prevDataLength : nextProps . dataLength ,
162+ } ;
163+ }
164+ return null ;
165+ }
166+
151167 getScrollableTarget = ( ) => {
152168 if ( this . props . scrollableTarget instanceof HTMLElement )
153169 return this . props . scrollableTarget ;
0 commit comments