useActionState는 form action 결과에 기반하여 상태를 업데이트할 수 있는 hook이다. useState처럼 상태를 관리하는데 form과 관련된 상태라고 생각하면 쉬울 것 같다.
const [state, formAction] = useActionState(fn, initialState, permalink?);
useActionState(action, initialState, permalink?)
form action이 호출될 때 업데이트 되는 컴포넌트 상태(state)를 생성하려면 컴포넌트의 최상위에서 useActionState를 호출한다. useActionState에 기존 form action 함수와 초기 상태(initial)를 전달하면 form에서 사용하는 새로운 action과 함께 최신 form state를 반환한다.
예시 코드
import { useActionState } from "react";
async function increment(previousState, formData) {
return previousState + 1;
}
function StatefulForm({}) {
const [state, formAction] = useActionState(increment, 0);
return (
<form>
{state}
<button formAction={formAction}>Increment</button>
</form>
)
}
위에 코드에서 state는 form이 마지막으로 제출되었을 때 action에 의해 반환된 값이다. form이 제출되지 않은 경우 초기의 state 값이다.
Server Action과 함께 사용하는 경우 use
ActionState를 사용하면 hydration이 완료 되기 전에도 서버의 form 제출 응답이 표시될 수 있다.
useActionState는 정확히 두 개의 값이 있는 배열을 반환한다.
초기 상태. 첫 번째 렌더링 중에는 전달한 초기 상태와 일치한다. action이 호출된 후에는 action에서 반환된 값과 일치한다.
form 컴포넌트에 action props을 전달하거나 form 내의 버튼 컴포넌트에 formAction prop을 전달 수 있는 새로운 action이다.
form action에서 반환된 정보 사용
import { useActionState } from 'react';
import { action } from './actions.js';
function MyComponent() {
const [state, formAction] = useActionState(action, null);
// ...
return (
<form action={formAction}>
{/* ... */}
</form>
);
}
useActionState는 정확히 두 개의 항목이 포함된 배열을 반환
form이 제출되면 제공한 action 함수가 호출된다. 반환 값은 form의 새로운 current state가 된다.