react-error-boundary の fallbackRender と FallbackComponent の違い
react-error-bounadry
React ErrorBoundary は Class Component で実装する必要がある。 react-error-bounadry は React の ErrorBoundary を Functional Component で実装するためのライブラリである。
fallbackRender
react-error-boundary の fallbackRender
を利用して、以下のように ErrorBoundary を実装できる。
上記の <SomeComponent>
で例外を throw すると fallbackRender
に渡された関数(type '(props: FallbackProps) => ReactNode'
)を実行する。
以下のように直接 Functional Component に Component を渡すと型定義エラーが発生する。
なお、<ErrorBoundary fallbackRender={<Fallback />}>
も同様に型定義エラーになる。
以下のように修正すると動作する。
FallbackComponent
react-error-boundary には、fallbackRender
とは別に FallbackComponent
という Props が存在する。
FallbackComponent
を利用して、以下のように ErrorBoundary を実装できる。
FallbackComponent
には Component を直接渡せるので React の Hook や Context を利用できる。
Props を渡すためには、以下のように実装する。
経緯
結局、fallbackRender
と FallbackComponent
で同じことが実現できるのに、なぜ react-error-boundary は 2 つの Props を定義したのだろうか。
Provide extra props to fallback component によると、FallbackComponent
は Props として最初から存在していたことが分かる。
詳細は分からないが、Component に独自の Props を渡す上で、より適切な命名の Props として fallbackRender
が実装されたという経緯のように解釈できた。
使い分け
react-error-boundary を使う上では以下のように使い分けることにしている。
- react-error-boundary 由来の Props だけを fallback の Component に渡す→
FallbackComponent
- その他の Props も渡したい→
fallbackRender