React Routerにおけるactionメソッドを使ったデータの追加
このレッスンでは、ルートオブジェクトの
actionメソッドについて紹介します。この
メソッドは、アプリケーションが
HTTPリクエストの
POST、PUT、PATCH、またはDELETEタイプ(GET以外)を
あなたのルートに送信したときに呼び出されます。
まず、前回のレッスンで作成した
商品作成関数をroot.jsxに
インポートしましょう:
import { createProduct } from '../forStorage';
次に、商品追加ボタンがクリックされたときに
React Routerが呼び出すaction関数を
作成する必要があります。これを
loader関数の後に配置しましょう:
export async function action() {
const product = await createProduct();
return { product };
}
それでは、main.jsxを開いて
actionをインポートしましょう:
import Root, {
loader as rootLoader,
action as rootAction
} from './routes/root';
そして、ルートオブジェクトの
actionメソッドの値として設定します。
Formコンポーネントは、
ボタンが押されたときにブラウザがサーバーに
リクエストを送信するのを防ぎ、代わりに
ルートのactionメソッドにアクセスします。
これが、React Routerを使った
クライアントサイドルーティングの興味深い
仕組みです:
const router = createBrowserRouter([
{
path: '/',
element: <Root />,
errorElement: <ErrorPage404 />,
loader: rootLoader,
action: rootAction,
children: [
{
path: 'products/:productId',
element: <Product />,
},
],
},
]);
アプリケーションを起動しましょう。
開発者パネルの'アプリケーション'タブ
(Chromeの場合はApplication)を開き、
様々な種類のストレージの中からindexedDBを
クリックし、ここではlocalforageに注目します。
さて、アプリケーション内の商品追加ボタンを
クリックし、クリック後にlocalforageストレージを
更新すると、keyvaluepairs内の
products配列に異なるidを持つ
オブジェクトが追加されているのが確認できます。
成功です!!! これで、ストレージに
レコードが作成されていることがわかりました!
もちろん、アプリケーション内のリストも
更新されます。
ヒント:後で、Applicationタブの
'Storage'でこのページの保存データを
クリーンアップすることを忘れないでください。
過去のレッスンの課題で作成した
アプリケーションを使用してください。
レッスンの資料を参考に、action関数を
作成し、ルートルートオブジェクトの
actionメソッドとして追加してください。