Skip to main content

# ErrorBoundary

React error boundary component that catches JavaScript errors in child components. Logs errors and displays a fallback UI instead of crashing the app.

## Example​

    import { ErrorBoundary } from '@elliemae/pui-app-sdk';

    function App() {
      return (
        <ErrorBoundary>
          <MyApp />
        </ErrorBoundary>
      );
    }

    // With custom error template
    <ErrorBoundary errorTemplate={CustomErrorPage}>
      <MyApp />
    </ErrorBoundary>

## Extends​

- `Component`<`ErrorBoundaryProps`>

## Constructors​

### Constructor​

    new ErrorBoundary(props: ErrorBoundaryProps): ErrorBoundary;

#### Parameters​

##### props​

`ErrorBoundaryProps`

#### Returns​

`ErrorBoundary`

#### Overrides​

    React.Component<ErrorBoundaryProps>.constructor

## Methods​

### componentDidCatch()​

    componentDidCatch(error: Error, errorInfo: {
      componentStack: string;
    }): void;

Catches exceptions generated in descendant components. Unhandled exceptions will cause the entire component tree to unmount.

#### Parameters​

##### error​

`Error`

##### errorInfo​

###### componentStack​

`string`

#### Returns​

`void`

#### Overrides​

    React.Component.componentDidCatch

### componentDidMount()?​

    optional componentDidMount(): void;

Called immediately after a component is mounted. Setting state here will trigger re-rendering.

#### Returns​

`void`

#### Inherited from​

    React.Component.componentDidMount

### componentDidUpdate()?​

    optional componentDidUpdate(
       prevProps: Readonly<P>,
       prevState: Readonly<S>,
       snapshot?: any): void;

Called immediately after updating occurs. Not called for the initial render.

The snapshot is only present if getSnapshotBeforeUpdate is present and returns non-null.

#### Parameters​

##### prevProps​

`Readonly`<`P`>

##### prevState​

`Readonly`<`S`>

##### snapshot?​

`any`

#### Returns​

`void`

#### Inherited from​

    React.Component.componentDidUpdate

### componentWillMount()?​

    optional componentWillMount(): void;

Called immediately before mounting occurs, and before Component.render. Avoid introducing any side-effects or subscriptions in this method.

Note: the presence of NewLifecycle.getSnapshotBeforeUpdate getSnapshotBeforeUpdate or StaticLifecycle.getDerivedStateFromProps getDerivedStateFromProps prevents this from being invoked.

#### Returns​

`void`

#### Deprecated​

16.3, use ComponentLifecycle.componentDidMount componentDidMount or the constructor instead; will stop working in React 17

#### See​

- https://legacy.reactjs.org/blog/2018/03/27/update-on-async-rendering.html#initializing-state
- https://legacy.reactjs.org/blog/2018/03/27/update-on-async-rendering.html#gradual-migration-path

#### Inherited from​

    React.Component.componentWillMount

### componentWillReceiveProps()?​

    optional componentWillReceiveProps(nextProps: Readonly<P>, nextContext: any): void;

Called when the component may be receiving new props. React may call this even if props have not changed, so be sure to compare new and existing props if you only want to handle changes.

Calling Component.setState generally does not trigger this method.

Note: the presence of NewLifecycle.getSnapshotBeforeUpdate getSnapshotBeforeUpdate or StaticLifecycle.getDerivedStateFromProps getDerivedStateFromProps prevents this from being invoked.

#### Parameters​

##### nextProps​

`Readonly`<`P`>

##### nextContext​

`any`

#### Returns​

`void`

#### Deprecated​

16.3, use static StaticLifecycle.getDerivedStateFromProps getDerivedStateFromProps instead; will stop working in React 17

#### See​

- https://legacy.reactjs.org/blog/2018/03/27/update-on-async-rendering.html#updating-state-based-on-props
- https://legacy.reactjs.org/blog/2018/03/27/update-on-async-rendering.html#gradual-migration-path

#### Inherited from​

    React.Component.componentWillReceiveProps

### componentWillUnmount()?​

    optional componentWillUnmount(): void;

Called immediately before a component is destroyed. Perform any necessary cleanup in this method, such as cancelled network requests, or cleaning up any DOM elements created in `componentDidMount`.

#### Returns​

`void`

#### Inherited from​

    React.Component.componentWillUnmount

### componentWillUpdate()?​

    optional componentWillUpdate(
       nextProps: Readonly<P>,
       nextState: Readonly<S>,
       nextContext: any): void;

Called immediately before rendering when new props or state is received. Not called for the initial render.

Note: You cannot call Component.setState here.

Note: the presence of NewLifecycle.getSnapshotBeforeUpdate getSnapshotBeforeUpdate or StaticLifecycle.getDerivedStateFromProps getDerivedStateFromProps prevents this from being invoked.

#### Parameters​

##### nextProps​

`Readonly`<`P`>

##### nextState​

`Readonly`<`S`>

##### nextContext​

`any`

#### Returns​

`void`

#### Deprecated​

16.3, use getSnapshotBeforeUpdate instead; will stop working in React 17

#### See​

- https://legacy.reactjs.org/blog/2018/03/27/update-on-async-rendering.html#reading-dom-properties-before-an-update
- https://legacy.reactjs.org/blog/2018/03/27/update-on-async-rendering.html#gradual-migration-path

#### Inherited from​

    React.Component.componentWillUpdate

### forceUpdate()​

    forceUpdate(callback?: () => void): void;

#### Parameters​

##### callback?​

() => `void`

#### Returns​

`void`

#### Inherited from​

    React.Component.forceUpdate

### getSnapshotBeforeUpdate()?​

    optional getSnapshotBeforeUpdate(prevProps: Readonly<P>, prevState: Readonly<S>): any;

Runs before React applies the result of Component.render render to the document, and returns an object to be given to componentDidUpdate. Useful for saving things such as scroll position before Component.render render causes changes to it.

Note: the presence of this method prevents any of the deprecated lifecycle events from running.

#### Parameters​

##### prevProps​

`Readonly`<`P`>

##### prevState​

`Readonly`<`S`>

#### Returns​

`any`

#### Inherited from​

    React.Component.getSnapshotBeforeUpdate

### render()​

    render():
      | string
      | number
      | boolean
      | Iterable<ReactNode, any, any>
      | Element
      | null
      | undefined;

#### Returns​

| `string` | `number` | `boolean` | `Iterable`<`ReactNode`, `any`, `any`> | `Element` | `null` | `undefined`

#### Overrides​

    React.Component.render

### setState()​

    setState<K>(state:
      | {
    }
      | (prevState: Readonly<S>, props: Readonly<P>) =>
      | {
    }
      | Pick<{
    }, K>
      | null
      | Pick<{
    }, K>
      | null, callback?: () => void): void;

#### Type Parameters​

##### K​

`K` extends `never`

#### Parameters​

##### state​

{ } | (`prevState`: `Readonly`<`S`>, `props`: `Readonly`<`P`>) => | { } | `Pick`<{ }, `K`> | `null` | `Pick`<{ }, `K`> | `null`

##### callback?​

() => `void`

#### Returns​

`void`

#### Inherited from​

    React.Component.setState

### shouldComponentUpdate()?​

    optional shouldComponentUpdate(
       nextProps: Readonly<P>,
       nextState: Readonly<S>,
       nextContext: any): boolean;

Called to determine whether the change in props and state should trigger a re-render.

`Component` always returns true. `PureComponent` implements a shallow comparison on props and state and returns true if any props or states have changed.

If false is returned, Component.render, `componentWillUpdate` and `componentDidUpdate` will not be called.

#### Parameters​

##### nextProps​

`Readonly`<`P`>

##### nextState​

`Readonly`<`S`>

##### nextContext​

`any`

#### Returns​

`boolean`

#### Inherited from​

    React.Component.shouldComponentUpdate

### UNSAFE_componentWillMount()?​

    optional UNSAFE_componentWillMount(): void;

Called immediately before mounting occurs, and before Component.render. Avoid introducing any side-effects or subscriptions in this method.

This method will not stop working in React 17.

Note: the presence of NewLifecycle.getSnapshotBeforeUpdate getSnapshotBeforeUpdate or StaticLifecycle.getDerivedStateFromProps getDerivedStateFromProps prevents this from being invoked.

#### Returns​

`void`

#### Deprecated​

16.3, use ComponentLifecycle.componentDidMount componentDidMount or the constructor instead

#### See​

- https://legacy.reactjs.org/blog/2018/03/27/update-on-async-rendering.html#initializing-state
- https://legacy.reactjs.org/blog/2018/03/27/update-on-async-rendering.html#gradual-migration-path

#### Inherited from​

    React.Component.UNSAFE_componentWillMount

### UNSAFE_componentWillReceiveProps()?​

    optional UNSAFE_componentWillReceiveProps(nextProps: Readonly<P>, nextContext: any): void;

Called when the component may be receiving new props. React may call this even if props have not changed, so be sure to compare new and existing props if you only want to handle changes.

Calling Component.setState generally does not trigger this method.

This method will not stop working in React 17.

Note: the presence of NewLifecycle.getSnapshotBeforeUpdate getSnapshotBeforeUpdate or StaticLifecycle.getDerivedStateFromProps getDerivedStateFromProps prevents this from being invoked.

#### Parameters​

##### nextProps​

`Readonly`<`P`>

##### nextContext​

`any`

#### Returns​

`void`

#### Deprecated​

16.3, use static StaticLifecycle.getDerivedStateFromProps getDerivedStateFromProps instead

#### See​

- https://legacy.reactjs.org/blog/2018/03/27/update-on-async-rendering.html#updating-state-based-on-props
- https://legacy.reactjs.org/blog/2018/03/27/update-on-async-rendering.html#gradual-migration-path

#### Inherited from​

    React.Component.UNSAFE_componentWillReceiveProps

### UNSAFE_componentWillUpdate()?​

    optional UNSAFE_componentWillUpdate(
       nextProps: Readonly<P>,
       nextState: Readonly<S>,
       nextContext: any): void;

Called immediately before rendering when new props or state is received. Not called for the initial render.

Note: You cannot call Component.setState here.

This method will not stop working in React 17.

Note: the presence of NewLifecycle.getSnapshotBeforeUpdate getSnapshotBeforeUpdate or StaticLifecycle.getDerivedStateFromProps getDerivedStateFromProps prevents this from being invoked.

#### Parameters​

##### nextProps​

`Readonly`<`P`>

##### nextState​

`Readonly`<`S`>

##### nextContext​

`any`

#### Returns​

`void`

#### Deprecated​

16.3, use getSnapshotBeforeUpdate instead

#### See​

- https://legacy.reactjs.org/blog/2018/03/27/update-on-async-rendering.html#reading-dom-properties-before-an-update
- https://legacy.reactjs.org/blog/2018/03/27/update-on-async-rendering.html#gradual-migration-path

#### Inherited from​

    React.Component.UNSAFE_componentWillUpdate

## Properties​

### context​

    context: unknown;

If using the new style context, re-declare this in your class to be the `React.ContextType` of your `static contextType`. Should be used with type annotation or static contextType.

#### Example​

    static contextType = MyContext
    // For TS pre-3.7:
    context!: React.ContextType<typeof MyContext>
    // For TS 3.7 and above:
    declare context: React.ContextType<typeof MyContext>

#### See​

React Docs

#### Inherited from​

    React.Component.context

### props​

    readonly props: Readonly<P>;

#### Inherited from​

    React.Component.props

### refs​

    refs: {
    [key: string]: ReactInstance;
    };

#### Index Signature​

    [key: string]: ReactInstance

#### Deprecated​

#### See​

Legacy React Docs

#### Inherited from​

    React.Component.refs

### state​

    state: Readonly<S>;

#### Inherited from​

    React.Component.state

### contextType?​

    static optional contextType: Context<any>;

If set, `this.context` will be set at runtime to the current value of the given Context.

#### Example​

    type MyContext = number
    const Ctx = React.createContext<MyContext>(0)

    class Foo extends React.Component {
      static contextType = Ctx
      context!: React.ContextType<typeof Ctx>
      render () {
        return <>My context's value: {this.context}</>;
      }
    }

#### See​

https://react.dev/reference/react/Component#static-contexttype

#### Inherited from​

    React.Component.contextType