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 메서드로 추가하세요.