diff --git a/compat/src/suspense.js b/compat/src/suspense.js index 9229774f91..48c8960996 100644 --- a/compat/src/suspense.js +++ b/compat/src/suspense.js @@ -1,5 +1,9 @@ import { Component, createElement, options, Fragment } from 'preact'; -import { MODE_HYDRATE, COMPONENT_FORCE } from '../../src/constants'; +import { + MODE_HYDRATE, + FORCE_PROPS_REVALIDATE, + COMPONENT_FORCE +} from '../../src/constants'; import { assign } from './util'; const oldCatchError = options._catchError; @@ -67,6 +71,10 @@ function detachedClone(vnode, detachedParent, parentDom) { function removeOriginal(vnode, detachedParent, originalParent) { if (vnode && originalParent) { + if (typeof vnode.type == 'string') { + vnode._flags |= FORCE_PROPS_REVALIDATE; + } + vnode._original = null; vnode._children = vnode._children && diff --git a/compat/test/browser/suspense-hydration.test.js b/compat/test/browser/suspense-hydration.test.js index 59d3117adf..6a02112bf0 100644 --- a/compat/test/browser/suspense-hydration.test.js +++ b/compat/test/browser/suspense-hydration.test.js @@ -656,6 +656,14 @@ describe('suspense hydration', () => { rerender(); expect(scratch.innerHTML, 'second suspend').to.equal(div('fallback')); + expect(getLog()).to.deep.equal([ + '