13.4 버전 이상부터는 서버 API 기능을 page.js 안에 클라이언트 컴포넌트와 함께 작성하여 처리할 수 있게 되었다.
글을 작성하는 기능을 구현한다고 할 때, 다음과 같이 코드를 작성할 수 있다.
import { connectDB } from "@/utils/database";
export default async function Write() {
async function handleSubmit(formData) {
"use server"
const db = (await connectDB).db('forum')
await db.collection('post_test').insertOne({title: formData.get('title')})
revalidatePath('/write2')
}
return (
<div>
<form action={handleSubmit}>
<input name="title"></input>
<button type="submit">완료</button>
</form>
</div>
);
}
- 이와 같이 클라이언트 컴포넌트가 작성된 파일에
"use server"
라는 키워드와 함께 함수를 추가해주면, 이 함수는 서버 API 기능을 하는 함수로서(=> 서버코드) 작동한다. - 해당 함수를 클라이언트 사이드에서 호출할 때는
action
속성에 넣어서 폼 전송 시 실행되도록 하면 된다. revalidatePath()
: 폼 전송 시 자동으로 새로고침이 되지 않기 때문에 사용router.refresh()
나 서버 컴포넌트일 경우revalidateTag()
를 사용할 수도 있지만, 이것들과 다르게 바뀐 부분만 SPA처럼 보여준다는 장점이 있다.
'Next.js' 카테고리의 다른 글
[Next.js] 게시물 삭제 기능 구현하기 - 서버에 요청 보내는 방식 (Ajax, query string, URL parameter) (0) | 2024.06.21 |
---|---|
[Next.js] Next.js Middleware / 미들웨어, 어떨 때 사용할까? (0) | 2024.05.28 |
[Next.js] 다크모드 기능 구현하기 (0) | 2024.05.28 |
[Next.js] Local Font 추가하여 전역 폰트 적용하기 (feat. TailwindCSS) (0) | 2024.05.24 |
Next.js로 웹서비스 만들기 4주차 - 게시판 만들기 (Dynamic Routes, 페이지 이동, MongoDB 데이터 수정) (0) | 2024.04.09 |