From 9f34eb79a3f7df71cd89b247de2e12b41b98f55a Mon Sep 17 00:00:00 2001 From: Alex Taylor Date: Thu, 11 Oct 2018 10:17:39 -0700 Subject: [PATCH] Add readContext to ReactPartialRendererHooks --- ...actDOMServerIntegrationHooks-test.internal.js | 16 ++++++++++++++++ .../src/server/ReactPartialRendererHooks.js | 10 +++++++++- 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/packages/react-dom/src/__tests__/ReactDOMServerIntegrationHooks-test.internal.js b/packages/react-dom/src/__tests__/ReactDOMServerIntegrationHooks-test.internal.js index 8c991c9ebe..a616ff395f 100644 --- a/packages/react-dom/src/__tests__/ReactDOMServerIntegrationHooks-test.internal.js +++ b/packages/react-dom/src/__tests__/ReactDOMServerIntegrationHooks-test.internal.js @@ -646,5 +646,21 @@ describe('ReactDOMServerHooks', () => { expect(domNode.lastChild.textContent).toEqual('Baz: 5'); }, ); + + itThrowsWhenRendering( + 'if used inside a class component', + async render => { + const Context = React.createContext({}, () => {}); + class Counter extends React.Component { + render() { + let [count] = useContext(Context); + return ; + } + } + + return render(); + }, + 'Hooks can only be called inside the body of a function component.', + ); }); }); diff --git a/packages/react-dom/src/server/ReactPartialRendererHooks.js b/packages/react-dom/src/server/ReactPartialRendererHooks.js index bec21679c1..1bebbc7444 100644 --- a/packages/react-dom/src/server/ReactPartialRendererHooks.js +++ b/packages/react-dom/src/server/ReactPartialRendererHooks.js @@ -138,10 +138,18 @@ export function finishHooks( return children; } +function readContext( + context: ReactContext, + observedBits: void | number | boolean, +): T { + return context._currentValue; +} + function useContext( context: ReactContext, observedBits: void | number | boolean, ): T { + resolveCurrentlyRenderingComponent(); return context._currentValue; } @@ -349,7 +357,7 @@ function inputsAreEqual(arr1, arr2) { function noop(): void {} export const Dispatcher = { - readContext: useContext, + readContext, useContext, useMemo, useReducer,