はじめに
この実験では、React の useError フックを使用してエラーディスパッチャーを作成する方法を学びます。このフックを使うと、エラーを保持する状態変数を作成し、その値が真の場合にエラーをスローすることができます。また、useCallback フックを使用して状態を更新し、キャッシュされた関数を返します。この実験の最後まで進めると、React アプリケーションでエラーを効果的に処理できるようになります。
React の useError フック
index.htmlとscript.jsはすでに仮想マシン(VM)に用意されています。一般的には、script.jsとstyle.cssにコードを追加するだけです。
このコードはエラーディスパッチャーを作成します。エラー状態を管理し、それをユーザーインターフェイスにディスパッチするために、3 つの React フックを使用しています。
コードの動作原理は以下の通りです。
useState()フックは、エラーオブジェクトを保持するerrorという状態変数を作成します。このフックには、引数として渡されるerrを初期値として設定します。useEffect()フックは、errorが真の値を持つ場合にエラーを「スロー」するために使用されます。このフックは関数と依存配列を引数として受け取ります。この場合、関数はerror状態変数が真(つまり、null、undefined、0、false、または空文字列ではない)かどうかをチェックし、真の場合はエラーをスローします。依存配列は[error]であり、これはerror変数が変更されるたびに副作用が再実行されることを意味します。useCallback()フックは、dispatchErrorというキャッシュされた関数を作成するために使用されます。この関数はerror状態変数を更新し、新しい関数を返します。このフックは関数と依存配列を引数として受け取ります。この場合、関数は引数errを受け取り、これはディスパッチする新しいエラーオブジェクトです。依存配列は[]であり、これはコンポーネントが再レンダリングされた場合にのみキャッシュされた関数が再作成されることを意味します。
コンポーネントで useError() フックを使用する例を以下に示します。
ErrorButtonという新しいコンポーネントを作成します。コンポーネント内で
useError()フックを呼び出し、dispatchError関数を取得します。新しいエラーオブジェクトを引数に
dispatchErrorを呼び出すclickHandlerというクリックハンドラー関数を作成します。クリックされたときに
clickHandlerを呼び出すボタンをレンダリングします。
コードは以下の通りです。
const useError = (err = null) => {
const [error, setError] = React.useState(err);
React.useEffect(() => {
if (error) {
throw error;
}
}, [error]);
const dispatchError = React.useCallback((err) => {
setError(err);
}, []);
return dispatchError;
};
const ErrorButton = () => {
const dispatchError = useError();
const clickHandler = () => {
dispatchError(new Error("Error!"));
};
return <button error</button>;
};
ReactDOM.createRoot(document.getElementById("root")).render(<ErrorButton />);
右下隅にある「Go Live」をクリックして、ポート 8080 で Web サービスを実行してください。その後、Web 8080 タブを更新すると、Web ページをプレビューできます。
まとめ
おめでとうございます!React の useError フックの実験を完了しました。LabEx でさらに多くの実験を行い、スキルを向上させることができます。