diff --git a/scripts/fiber/tests-passing.txt b/scripts/fiber/tests-passing.txt index 36d020d40a..a97036fb33 100644 --- a/scripts/fiber/tests-passing.txt +++ b/scripts/fiber/tests-passing.txt @@ -1240,6 +1240,8 @@ src/renderers/dom/shared/__tests__/ReactEventListener-test.js src/renderers/dom/shared/__tests__/ReactMount-test.js * throws when given a non-node +* returns false on non-React containers +* returns true on React containers * throws when given a string * throws when given a factory * should render different components in same root diff --git a/src/renderers/dom/fiber/ReactDOMFiber.js b/src/renderers/dom/fiber/ReactDOMFiber.js index f58466bab4..f142d0554f 100644 --- a/src/renderers/dom/fiber/ReactDOMFiber.js +++ b/src/renderers/dom/fiber/ReactDOMFiber.js @@ -518,11 +518,16 @@ var ReactDOM = { } // Unmount should not be batched. - return DOMRenderer.unbatchedUpdates(() => { - return renderSubtreeIntoContainer(null, null, container, () => { + DOMRenderer.unbatchedUpdates(() => { + renderSubtreeIntoContainer(null, null, container, () => { container._reactRootContainer = null; }); }); + // If you call unmountComponentAtNode twice in quick succession, you'll + // get `true` twice. That's probably fine? + return true; + } else { + return false; } }, diff --git a/src/renderers/dom/shared/__tests__/ReactMount-test.js b/src/renderers/dom/shared/__tests__/ReactMount-test.js index fb942d15b8..2bfc9ac26e 100644 --- a/src/renderers/dom/shared/__tests__/ReactMount-test.js +++ b/src/renderers/dom/shared/__tests__/ReactMount-test.js @@ -46,6 +46,21 @@ describe('ReactMount', () => { 'unmountComponentAtNode(...): Target container is not a DOM element.', ); }); + + it('returns false on non-React containers', () => { + var d = document.createElement('div'); + d.innerHTML = 'hellooo'; + expect(ReactDOM.unmountComponentAtNode(d)).toBe(false); + expect(d.textContent).toBe('hellooo'); + }); + + it('returns true on React containers', () => { + var d = document.createElement('div'); + ReactDOM.render(hellooo, d); + expect(d.textContent).toBe('hellooo'); + expect(ReactDOM.unmountComponentAtNode(d)).toBe(true); + expect(d.textContent).toBe(''); + }); }); it('throws when given a string', () => {