Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | 1x 1x 1x 2x 2x 1x 1x 2x 1x 1x 1x 1x | import * as React from 'react';
import {useState, useCallback, ReactNode} from 'react';
const ErrorBoundary = ({
children,
onError,
}: {
children: ReactNode;
onError: (error: Error) => void;
}) => {
const [hasError, setHasError] = useState(false);
const errorBoundaryCallback = useCallback(
(error: Error) => {
setHasError(true);
onError(error);
},
[onError],
);
if (hasError) {
return null;
}
return (
<React.Fragment>
{React.Children.map(children, child =>
React.cloneElement(child as React.ReactElement, {
onError: errorBoundaryCallback,
}),
)}
</React.Fragment>
);
};
export default ErrorBoundary;
|