diff --git a/packages/react-dom/src/__tests__/ReactDOMServerIntegrationHooks-test.internal.js b/packages/react-dom/src/__tests__/ReactDOMServerIntegrationHooks-test.internal.js index 37315929e4..421a4e074b 100644 --- a/packages/react-dom/src/__tests__/ReactDOMServerIntegrationHooks-test.internal.js +++ b/packages/react-dom/src/__tests__/ReactDOMServerIntegrationHooks-test.internal.js @@ -516,6 +516,19 @@ describe('ReactDOMServerHooks', () => { expect(domNode.tagName).toEqual('SPAN'); expect(domNode.textContent).toEqual('Count: 0'); }); + + itRenders('should support render time callbacks', async render => { + function Counter(props) { + const renderCount = useCallback(increment => { + return 'Count: ' + (props.count + increment); + }); + return ; + } + const domNode = await render(); + expect(clearYields()).toEqual(['Count: 5']); + expect(domNode.tagName).toEqual('SPAN'); + expect(domNode.textContent).toEqual('Count: 5'); + }); }); describe('useImperativeMethods', () => { diff --git a/packages/react-dom/src/server/ReactPartialRendererHooks.js b/packages/react-dom/src/server/ReactPartialRendererHooks.js index 2860ee9bfb..2fe4dda9d0 100644 --- a/packages/react-dom/src/server/ReactPartialRendererHooks.js +++ b/packages/react-dom/src/server/ReactPartialRendererHooks.js @@ -341,6 +341,9 @@ function dispatchAction( } function noop(): void {} +function identity(fn: Function): Function { + return fn; +} export let currentThreadID: ThreadID = 0; @@ -357,10 +360,10 @@ export const Dispatcher = { useState, useMutationEffect, useLayoutEffect, + // Callbacks are passed as they are in the server environment. + useCallback: identity, // useImperativeMethods is not run in the server environment useImperativeMethods: noop, - // Callbacks are not run in the server environment. - useCallback: noop, // Effects are not run in the server environment. useEffect: noop, };