diff --git a/packages/react-reconciler/src/ReactFiberHotReloading.js b/packages/react-reconciler/src/ReactFiberHotReloading.js
index 16d78a667709e..6392440d05d39 100644
--- a/packages/react-reconciler/src/ReactFiberHotReloading.js
+++ b/packages/react-reconciler/src/ReactFiberHotReloading.js
@@ -296,7 +296,11 @@ function scheduleFibersWithFamiliesRecursively(
if (staleFamilies.has(family)) {
needsRemount = true;
} else if (updatedFamilies.has(family)) {
- needsRender = true;
+ if (tag === ClassComponent) {
+ needsRemount = true;
+ } else {
+ needsRender = true;
+ }
}
}
}
diff --git a/packages/react-refresh/src/__tests__/ReactFreshIntegration-test.js b/packages/react-refresh/src/__tests__/ReactFreshIntegration-test.js
index 7e42fd22c94aa..6f3f890f4d6ce 100644
--- a/packages/react-refresh/src/__tests__/ReactFreshIntegration-test.js
+++ b/packages/react-refresh/src/__tests__/ReactFreshIntegration-test.js
@@ -1299,6 +1299,53 @@ describe('ReactFreshIntegration', () => {
}
});
+ it('remounts deprecated factory components', () => {
+ if (__DEV__) {
+ expect(() => {
+ render(`
+ function Parent() {
+ return {
+ render() {
+ return