
Client Component에서 Server Action 사용하기
- Server Component 처럼 그대로 쓰되 server action 부분을 별도의 ts파일로 분리해 작성하고, client component 내에서 import해 사용하면 됨
/_lib/signup.ts
"use server"
const submit = async(formData: FormData) => {
"use server"
if(!formData.get('id')){
return { message : 'no_id'};
}
if(!formData.get('name')){
return { message : 'no_name'};
}
if(!formData.get('password')){
return { message : 'no_password'};
}
if(!formData.get('image')){
return { message : 'no_image'};
}
const response = await fetch(`${NEXT_PUBLIC_BASE_URL}/api/users`, {
method: 'post',
body : formData,
credentials: 'include',
})
console.log(response.status);
if(response.status === 403)
{
return {message: 'user_exists'}
}
console.log(await response.json())
redirect('home')
import onSubmit from '/_lib/signup'
const submit = onSubmit;
import {useFormState, useFormStatus} from 'react-dom';
const [state,formAction] = useFormState(onSubmit, {message: null});
const {pending} = useFormStatus();
useFormState를 쓰게 되면 action을 formAction을 넣어주면 됨
const submit = async(prevState: {message : string | null}, formData: FormData) => {
<div>{state?.message}</div>