Skip to content

Commit e178f62

Browse files
authored
Merge pull request #224 from Newbie012/fix-UNSAFE_componentWillReceiveProps
Replace UNSAFE_componentWillReceiveProps with getDerivedStateFromProps
2 parents 445146a + 706028d commit e178f62

File tree

1 file changed

+18
-2
lines changed

1 file changed

+18
-2
lines changed

src/index.tsx

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ export interface Props {
2929
interface State {
3030
showLoader: boolean;
3131
pullToRefreshThresholdBreached: boolean;
32+
prevDataLength: number | undefined;
3233
}
3334

3435
export 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

Comments
 (0)