あるコンポーネントで例外が出たら、ページ全体が真っ白になりました。どうしますか。
error.tsx を置きます。エラーバウンダリとして配下の例外を受け止め、代わりのUIを出します。置く位置で影響範囲が変わり、ルート直下に1枚だけだと全体が差し替わります。
面接官が見ているのはerror.tsx の存在と境界の考え方。
よくある答えと、面談でどう見られるか
- error.tsx を置く。置く位置で影響範囲が変わるので、壊れやすい箇所の近くに置く
境界の位置まで意識できています。ルート直下に1枚だけだと、どこで落ちても全画面が差し替わります。 - error.tsx を置く
正解です。React のエラーバウンダリとして働きます。面談ではこの後「どこに置くか」「layout のエラーは拾えるか」と続きます。 - 各コンポーネントで try-catch する
想定内のエラーはむしろその方が扱いやすいです。ただし想定外の例外を全箇所で捕まえるのは現実的でないので、境界を置く発想は必要です。 - 例外が出ないようにコードを直す
根本対処として正しいのですが、既知の1件を直しても次が出ます。「落ちても全画面が真っ白にならない」構造を作る話と、両方必要です。
面接官は何を見ているか
- error.tsx を置くことを挙げた
- 境界の位置で影響範囲が変わると理解している
- 想定内のエラーと想定外の例外を区別できた
模範解答
error.tsx を置きます。React のエラーバウンダリとして働き、その配下で投げられた例外を受け止めて、代わりの UI を出します。
置く位置で影響範囲が変わります。ルート直下に1枚だけ置くと、どこで落ちてもページ全体が差し替わります。壊れやすい部分の近くに置けば、そこだけがエラー表示になり、ほかは生きたままになります。
その手前の話として、想定内のエラーは例外にしない方が扱いやすいです。「入力が不正」「見つからない」のように起こると分かっているものは、戻り値として返して普通に画面に出します。error.tsx で受けるのは、想定していなかった例外です。
ここからどう深掘りされるか
この問いに答えられた場合、面談は次の質問に進みます。
観点をすべて押さえられた場合
error.tsx を置いたのに、レイアウトで起きたエラーが拾えませんでした。なぜですか。一部しか触れられなかった場合
「見つからない」ときの表示は、どう作りますか。触れられなかった場合
「見つからない」ときの表示は、どう作りますか。