From e373190faf3b994707f09488c1a7832f4a91e15a Mon Sep 17 00:00:00 2001 From: Sebastian Silbermann Date: Mon, 25 Mar 2024 14:30:08 +0100 Subject: [PATCH] Guard against legacy context not being supported in DevTools fixture (#28596) --- .../src/app/InspectableElements/Contexts.js | 39 +++++++++++++++++-- 1 file changed, 35 insertions(+), 4 deletions(-) diff --git a/packages/react-devtools-shell/src/app/InspectableElements/Contexts.js b/packages/react-devtools-shell/src/app/InspectableElements/Contexts.js index 256cd908518f2..ace7af6d55d3b 100644 --- a/packages/react-devtools-shell/src/app/InspectableElements/Contexts.js +++ b/packages/react-devtools-shell/src/app/InspectableElements/Contexts.js @@ -273,15 +273,46 @@ class ModernClassContextConsumerWithUpdates extends Component { } } +type LegacyContextState = { + supportsLegacyContext: boolean, +}; +class LegacyContext extends React.Component { + state: LegacyContextState = {supportsLegacyContext: true}; + + static getDerivedStateFromError(error: any): LegacyContextState { + return {supportsLegacyContext: false}; + } + + componentDidCatch(error: any, info: any) { + console.info( + 'Assuming legacy context is not supported in this React version due to: ', + error, + info, + ); + } + + render(): React.Node { + if (!this.state.supportsLegacyContext) { + return

This version of React does not support legacy context.

; + } + + return ( + + + + + + + ); + } +} + export default function Contexts(): React.Node { return (

Contexts

    - - - - + {(value: $FlowFixMe) =>