/
githubmr
/
facebook-react
Обзор
Документация
Войти
/
githubmr
/
facebook-react
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
main
packages/react-devtools-shell/src/app/InlineWarnings/index.js
207 строк
6 KB
Jan Kassens
[flow] enable enforce_local_inference_annotations (#25921)
09 янв 2023, 23:46
Не верифицирован
09 янв 2023, 23:46
0b4f443
Код
Авторство
О чём код?
/** @flow */ import * as React from 'react'; import {Fragment, useEffect, useRef, useState} from 'react'; // $FlowFixMe[missing-local-annot] function WarnDuringRender({children = null}) { console.warn('This warning fires during every render'); return children; } // $FlowFixMe[missing-local-annot] function WarnOnMount({children = null}) { useEffect(() => { console.warn('This warning fires on initial mount only'); }, []); return children; } // $FlowFixMe[missing-local-annot] function WarnOnUpdate({children = null}) { const didMountRef = useRef(false); useEffect(() => { if (didMountRef.current) { console.warn('This warning fires on every update'); } else { didMountRef.current = true; } }); return children; } // $FlowFixMe[missing-local-annot] function WarnOnUnmount({children = null}) { useEffect(() => { return () => { console.warn('This warning fires on unmount'); }; }, []); return children; } // $FlowFixMe[missing-local-annot] function ErrorDuringRender({children = null}) { console.error('This error fires during every render'); return children; } // $FlowFixMe[missing-local-annot] function ErrorOnMount({children = null}) { useEffect(() => { console.error('This error fires on initial mount only'); }, []); return children; } // $FlowFixMe[missing-local-annot] function ErrorOnUpdate({children = null}) { const didMountRef = useRef(false); useEffect(() => { if (didMountRef.current) { console.error('This error fires on every update'); } else { didMountRef.current = true; } }); return children; } // $FlowFixMe[missing-local-annot] function ErrorOnUnmount({children = null}) { useEffect(() => { return () => { console.error('This error fires on unmount'); }; }, []); return children; } // $FlowFixMe[missing-local-annot] function ErrorAndWarningDuringRender({children = null}) { console.warn('This warning fires during every render'); console.error('This error fires during every render'); return children; } // $FlowFixMe[missing-local-annot] function ErrorAndWarningOnMount({children = null}) { useEffect(() => { console.warn('This warning fires on initial mount only'); console.error('This error fires on initial mount only'); }, []); return children; } // $FlowFixMe[missing-local-annot] function ErrorAndWarningOnUpdate({children = null}) { const didMountRef = useRef(false); useEffect(() => { if (didMountRef.current) { console.warn('This warning fires on every update'); console.error('This error fires on every update'); } else { didMountRef.current = true; } }); return children; } // $FlowFixMe[missing-local-annot] function ErrorAndWarningOnUnmount({children = null}) { useEffect(() => { return () => { console.warn('This warning fires on unmount'); console.error('This error fires on unmount'); }; }, []); return children; } // $FlowFixMe[missing-local-annot] function ReallyLongErrorMessageThatWillCauseTextToBeTruncated({ children = null, }) { console.error( 'This error is a really long error message that should cause the text to be truncated in DevTools', ); return children; } // $FlowFixMe[missing-local-annot] function ErrorWithMultipleArgs({children = null}) { console.error('This error', 'passes console', 4, 'arguments'); return children; } // $FlowFixMe[missing-local-annot] function ErrorWithStringSubstitutions({children = null}) { console.error('This error uses "%s" substitutions', 'string'); return children; } // $FlowFixMe[missing-local-annot] function ReactErrorOnHostComponent({children = null}) { return <div data-camelCasedAttribute="should-lower-case">{children}</div>; } // $FlowFixMe[missing-local-annot] function DuplicateWarningsAndErrors({children = null}) { console.warn('this warning is logged twice per render'); console.warn('this warning is logged twice per render'); console.error('this error is logged twice per render'); console.error('this error is logged twice per render'); return <div data-camelCasedAttribute="should-lower-case">{children}</div>; } // $FlowFixMe[missing-local-annot] function MultipleWarningsAndErrors({children = null}) { console.warn('this is the first warning logged'); console.warn('this is the second warning logged'); console.error('this is the first error logged'); console.error('this is the second error logged'); return <div data-camelCasedAttribute="should-lower-case">{children}</div>; } // $FlowFixMe[missing-local-annot] function ComponentWithMissingKey({children}) { return [<div />]; } function ComponentWithSymbolWarning() { console.warn('this is a symbol', Symbol('foo')); console.error('this is a symbol', Symbol.for('bar')); return null; } export default function ErrorsAndWarnings(): React.Node { const [count, setCount] = useState(0); const handleClick = () => setCount(count + 1); return ( <Fragment> <h1>Inline warnings</h1> <button onClick={handleClick}>Update {count > 0 ? count : ''}</button> <ComponentWithMissingKey /> <WarnDuringRender /> <WarnOnMount /> <WarnOnUpdate /> {count === 0 ? <WarnOnUnmount /> : null} {count === 0 ? <WarnOnMount /> : null} <ErrorDuringRender /> <ErrorOnMount /> <ErrorOnUpdate /> {count === 0 ? <ErrorOnUnmount /> : null} <ErrorAndWarningDuringRender /> <ErrorAndWarningOnMount /> <ErrorAndWarningOnUpdate /> {count === 0 ? <ErrorAndWarningOnUnmount /> : null} <ErrorWithMultipleArgs /> <ErrorWithStringSubstitutions /> <ReactErrorOnHostComponent /> <ReallyLongErrorMessageThatWillCauseTextToBeTruncated /> <DuplicateWarningsAndErrors /> <MultipleWarningsAndErrors /> <ComponentWithSymbolWarning /> </Fragment> ); }