Next.js Server Actions "Functions cannot be passed directly to Client Components" 에러 해결법
3초 요약: 이렇게 고치세요 원인: 서버 컴포넌트의 일반 함수는 직렬화가 안 돼서, Client Component에 props로 그대로 넘기면 React가 전달 자체를 막음 해결: 넘길 함수 내부 최상단에 'use server' 를 선언해 진짜 Server Action으로 만들거나, 서버 로직이 필요 없다면 아예 클라이언트 컴포넌트 안으로 로직을 옮기기 주의: 인자를 미리 고정해서 넘기고 싶으면 .bind(null, id) 로 감싸야지, 클로저로 감싼 일반 함수를 새로 만들면 다시 같은 에러가 남 async function deletePost(id: string) { 'use server'; await db.post.delete({ where: { id } }); } ↓ 왜 이런 에러가 나는지 원리 보기 서버 컴포넌트에서 만든 핸들러 함수를 버튼 같은 클라이언트 컴포넌트에 그대로 props로 넘기면 "Functions cannot be passed directly to Client Components unless you explicitly expose it by marking it with \"use server\"" 에러가 뜨는 경우가 있습니다. 왜 함수는 그냥 넘길 수 없는지와, Server Action으로 바꿔서 해결하는 방법을 정리합니다. 왜 서버 컴포넌트의 함수를 클라이언트 컴포넌트에 그대로 못 넘길까 서버 컴포넌트는 브라우저로 그대로 전송되지 않습니다. 서버에서 렌더링된 결과가 RSC(React Server Components) 페이로드라는 직렬화된 데이터 형태로 변환되어 클라이언트로 넘어가고, 클라이언트는 이 데이터를 읽어서 화면을 조립합니다. 이때 문자열, 숫자, 객체, 배열처럼 JSON으로 표현 가능한 값...