C.W.K.
Stream
Lesson 05 of 08 · published

Progressive Enhancement

~20 min · progressive enhancement, no-JS, forms

Level 0Curious
0 XP0/68 lessons0/11 achievements
0/120 XP to next level120 XP to go0% complete

JS 도착 전에 작동하는 form

action={serverAction} 가진 form 이 JavaScript 돌기 전에 native HTML POST 로 작동. JS hydrate 시 no-refresh submission 으로 enhance. JS 가 완전히 fail 해도 form 여전히 작동.

3 layer, top down

Layer동작
HTML 만Native POST → server process → rendered result 로 full reload.
+ JSFetch 통한 submission, reload 없음, layout state 보존.
+ ReactOptimistic UI, pending state, transition.

이게 진짜 win 인 이유

느린 network, 옛 browser, JS error, framework nuke 하는 ad-blocker — form 이 계속 작동. Server Action 이 traditional React + custom fetch() 한테 없던 progressive enhancement 줘.

Code

JS 없이 살아남는 form·tsx
import { redirect } from 'next/navigation';

export default function ContactForm() {
  async function submit(formData: FormData) {
    'use server';
    await saveMessage({
      name: formData.get('name') as string,
      email: formData.get('email') as string,
      message: formData.get('message') as string,
    });
    redirect('/thank-you');
  }

  return (
    <form action={submit} className="space-y-2">
      <input name="name" required />
      <input name="email" type="email" required />
      <textarea name="message" required />
      <button>Send</button>
    </form>
  );
}

External links

Exercise

Browser 에서 JavaScript 비활성화 후 Server Action form submit. Submission 도착, redirect 작동 확인. JS 다시 활성화 후 같은 form 이 매끈하게 작동하는지 봐.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.