diff --git a/src/diff/index.js b/src/diff/index.js index ae2d77ffc23..1857e10e448 100644 --- a/src/diff/index.js +++ b/src/diff/index.js @@ -486,7 +486,6 @@ function diffElementNodes( } } - // If the new vnode didn't have dangerouslySetInnerHTML, diff its children if (newHtml) { // Avoid re-applying the same '__html' if it did not changed between re-render if ( @@ -499,6 +498,15 @@ function diffElementNodes( } newVNode._children = []; + } else if ( + typeof newChildren === 'string' && + typeof oldProps.children === 'string' + ) { + if (newChildren !== oldProps.children) { + oldVNode._children[0]._dom.data = newChildren; + newVNode._children = oldVNode._children; + oldVNode._children = []; + } } else { if (oldHtml) dom.innerHTML = ''; diff --git a/test/browser/fragments.test.js b/test/browser/fragments.test.js index 7eb0b0924d9..13e64f1092a 100644 --- a/test/browser/fragments.test.js +++ b/test/browser/fragments.test.js @@ -1325,6 +1325,7 @@ describe('Fragment', () => { ); }); + // TODO it('should support moving Fragments between beginning and end', () => { const Foo = ({ condition }) => (