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,
};