From 600d8cfd297e24faebd226a11490c9898439ce8d Mon Sep 17 00:00:00 2001 From: Brenton Simpson Date: Sun, 8 Oct 2023 22:33:31 -0700 Subject: [PATCH] Add support for new String() as a child (#4152) Fixes #4151 --- src/diff/children.js | 2 +- test/browser/components.test.js | 12 ++++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/diff/children.js b/src/diff/children.js index 35874a64e1..9d5d9855c0 100644 --- a/src/diff/children.js +++ b/src/diff/children.js @@ -69,7 +69,7 @@ export function diffChildren( // or we are rendering a component (e.g. setState) copy the oldVNodes so it can have // it's own DOM & etc. pointers else if ( - typeof childVNode == 'string' || + childVNode.constructor === String || typeof childVNode == 'number' || // eslint-disable-next-line valid-typeof typeof childVNode == 'bigint' diff --git a/test/browser/components.test.js b/test/browser/components.test.js index 3d36e3a29f..1dfb7a55d9 100644 --- a/test/browser/components.test.js +++ b/test/browser/components.test.js @@ -533,6 +533,18 @@ describe('Components', () => { expect(scratch.innerHTML).to.equal('42'); }); + it('should render a new String()', () => { + class ConstructedStringComponent extends Component { + render() { + /* eslint-disable no-new-wrappers */ + return new String('Hi from a constructed string!'); + } + } + + render(, scratch); + expect(scratch.innerHTML).to.equal('Hi from a constructed string!'); + }); + it('should render null as empty string', () => { class NullComponent extends Component { render() {