diff --git a/packages/react-dom/src/server/ReactPartialRenderer.js b/packages/react-dom/src/server/ReactPartialRenderer.js index fddd4c0a0642..cda2b0a0488e 100644 --- a/packages/react-dom/src/server/ReactPartialRenderer.js +++ b/packages/react-dom/src/server/ReactPartialRenderer.js @@ -821,6 +821,7 @@ class ReactDOMServerRenderer { return null; } + const prevDispatcher = ReactCurrentOwner.currentDispatcher; if (enableHooks) { ReactCurrentOwner.currentDispatcher = Dispatcher; } else { @@ -871,7 +872,7 @@ class ReactDOMServerRenderer { } return out; } finally { - ReactCurrentOwner.currentDispatcher = null; + ReactCurrentOwner.currentDispatcher = prevDispatcher; } } diff --git a/packages/react-reconciler/src/__tests__/ReactHooks-test.internal.js b/packages/react-reconciler/src/__tests__/ReactHooks-test.internal.js index 98655a26eb15..468bbcb3c0a5 100644 --- a/packages/react-reconciler/src/__tests__/ReactHooks-test.internal.js +++ b/packages/react-reconciler/src/__tests__/ReactHooks-test.internal.js @@ -15,6 +15,7 @@ let React; let ReactFeatureFlags; let ReactTestRenderer; +let ReactDOMServer; // Additional tests can be found in ReactHooksWithNoopRenderer. Plan is to // gradually migrate those to this file. @@ -27,6 +28,7 @@ describe('ReactHooks', () => { ReactFeatureFlags.enableHooks = true; React = require('react'); ReactTestRenderer = require('react-test-renderer'); + ReactDOMServer = require('react-dom/server'); }); it('warns about variable number of dependencies', () => { @@ -79,4 +81,17 @@ describe('ReactHooks', () => { ' in App (at **)', ]); }); + + // https://github.com/facebook/react/issues/14022 + it('works with ReactDOMServer calls inside a component', () => { + const {useState} = React; + function App(props) { + const markup1 = ReactDOMServer.renderToString(

hello

); + const markup2 = ReactDOMServer.renderToStaticMarkup(

bye

); + const [counter] = useState(0); + return markup1 + counter + markup2; + } + const root = ReactTestRenderer.create(); + expect(root.toJSON()).toMatchSnapshot(); + }); }); diff --git a/packages/react-reconciler/src/__tests__/__snapshots__/ReactHooks-test.internal.js.snap b/packages/react-reconciler/src/__tests__/__snapshots__/ReactHooks-test.internal.js.snap new file mode 100644 index 000000000000..87633a047a8f --- /dev/null +++ b/packages/react-reconciler/src/__tests__/__snapshots__/ReactHooks-test.internal.js.snap @@ -0,0 +1,3 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`ReactHooks works with ReactDOMServer calls inside a component 1`] = `"

hello

0

bye

"`;