Fix all review memory leak on block transform (https://github.com/woocommerce/woocommerce-blocks/pull/4428)
This commit is contained in:
parent
ce965a3578
commit
4907ddcd5d
|
@ -47,6 +47,8 @@ const withReviews = ( OriginalComponent ) => {
|
||||||
|
|
||||||
delayedAppendReviews = this.props.delayFunction( this.appendReviews );
|
delayedAppendReviews = this.props.delayFunction( this.appendReviews );
|
||||||
|
|
||||||
|
isMounted = false;
|
||||||
|
|
||||||
state = {
|
state = {
|
||||||
error: null,
|
error: null,
|
||||||
loading: true,
|
loading: true,
|
||||||
|
@ -57,6 +59,7 @@ const withReviews = ( OriginalComponent ) => {
|
||||||
};
|
};
|
||||||
|
|
||||||
componentDidMount() {
|
componentDidMount() {
|
||||||
|
this.isMounted = true;
|
||||||
this.replaceReviews();
|
this.replaceReviews();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -80,7 +83,9 @@ const withReviews = ( OriginalComponent ) => {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
componentWillUnMount() {
|
componentWillUnmount() {
|
||||||
|
this.isMounted = false;
|
||||||
|
|
||||||
if ( this.delayedAppendReviews.cancel ) {
|
if ( this.delayedAppendReviews.cancel ) {
|
||||||
this.delayedAppendReviews.cancel();
|
this.delayedAppendReviews.cancel();
|
||||||
}
|
}
|
||||||
|
@ -120,7 +125,6 @@ const withReviews = ( OriginalComponent ) => {
|
||||||
}
|
}
|
||||||
|
|
||||||
const { onReviewsReplaced } = this.props;
|
const { onReviewsReplaced } = this.props;
|
||||||
|
|
||||||
this.updateListOfReviews().then( onReviewsReplaced );
|
this.updateListOfReviews().then( onReviewsReplaced );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -158,16 +162,19 @@ const withReviews = ( OriginalComponent ) => {
|
||||||
reviews: newReviews,
|
reviews: newReviews,
|
||||||
totalReviews: newTotalReviews,
|
totalReviews: newTotalReviews,
|
||||||
} ) => {
|
} ) => {
|
||||||
|
if ( this.isMounted ) {
|
||||||
this.setState( {
|
this.setState( {
|
||||||
reviews: oldReviews
|
reviews: oldReviews
|
||||||
.filter(
|
.filter(
|
||||||
( review ) => Object.keys( review ).length
|
( review ) =>
|
||||||
|
Object.keys( review ).length
|
||||||
)
|
)
|
||||||
.concat( newReviews ),
|
.concat( newReviews ),
|
||||||
totalReviews: newTotalReviews,
|
totalReviews: newTotalReviews,
|
||||||
loading: false,
|
loading: false,
|
||||||
error: null,
|
error: null,
|
||||||
} );
|
} );
|
||||||
|
}
|
||||||
|
|
||||||
return { newReviews };
|
return { newReviews };
|
||||||
}
|
}
|
||||||
|
@ -176,6 +183,9 @@ const withReviews = ( OriginalComponent ) => {
|
||||||
}
|
}
|
||||||
|
|
||||||
setError = async ( e ) => {
|
setError = async ( e ) => {
|
||||||
|
if ( ! this.isMounted ) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
const { onReviewsLoadError } = this.props;
|
const { onReviewsLoadError } = this.props;
|
||||||
const error = await formatError( e );
|
const error = await formatError( e );
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue