액션으로 전송되는 폼데이터를 알면 비동기 작업이 아직 보류 중이더라도 사용 중 표시기를 건너뛰고 다음 상태의 UI 를 즉시 렌더링할 수 있는 경우가 많습니다.

이를 "낙관적 UI"라고 합니다.

function LikeButton({ tweet }) {
  const fetcher = useFetcher();

  // if there is `formData` then it is posting to the action
  const liked = fetcher.formData
    ? // check the formData to be optimistic
      fetcher.formData.get("liked") === "yes"
    : // if its not posting to the action, use the record's value
      tweet.liked;

  return (
    <fetcher.Form method="post" action="toggle-liked">
      <button
        type="submit"
        name="liked"
        value={liked ? "yes" : "no"}
      />
    </fetcher.Form>
  );
}

(예, HTML 버튼은 namevalue 를 가질 수 있습니다).

fetcher 를 사용하여 낙관적인 UI 를 만드는 것이 더 일반적이지만, navigation.formData 를 사용하여 일반 양식에서도 동일한 작업을 수행할 수 있습니다.