nextjs/no-async-client-component 정확성
작동 방식
Next.js 애플리케이션에서 클라이언트 컴포넌트에 비동기 함수 사용을 방지합니다.
이 규칙은 다음 조건을 모두 만족하는 모든 비동기 함수를 확인합니다:
"use client"지시문으로 표시됨- 대문자로 시작하는 이름을 가짐 (컴포넌트임을 나타냄)
- 기본 내보내기 또는 변수에 할당됨
왜 문제인가요?
클라이언트 컴포넌트에 비동기 함수를 사용하면 서버와 클라이언트 간의 하이드레이션 일치 문제가 발생할 수 있으며,
컴포넌트 렌더링 라이프사이클이 깨질 수 있고, 리액트의 동시 기능과 함께 예기치 않은 동작을 유발할 수 있습니다.
예시
이 규칙에 부적절한 코드 예시:
javascript
"use client"
// 기본 내보내기를 가진 비동기 컴포넌트
export default async function MyComponent() {
return <></>
}
// 이름 붙인 내보내기를 가진 비동기 컴포넌트
async function MyComponent() {
return <></>
}
export default MyComponent
// 비동기 화살표 함수 컴포넌트
const MyComponent = async () => {
return <></>
}
export default MyComponent이 규칙에 적절한 코드 예시:
javascript
"use client"
// 정규 동기 컴포넌트
export default function MyComponent() {
return <></>
}
// 효과 내에서 비동기 작업 처리
export default function MyComponent() {
useEffect(() => {
async function fetchData() {
// 비동기 작업 여기에 작성
}
fetchData();
}, []);
return <></>
}
// 이벤트 핸들러 내에서 비동기 작업 처리
export default function MyComponent() {
const handleClick = async () => {
// 비동기 작업 여기에 작성
}
return <button onClick={handleClick}>클릭하세요</button>
}사용 방법
이 규칙을 설정 파일이나 명령줄 인터페이스를 통해 활성화하려면 다음과 같이 사용할 수 있습니다:
json
{
"plugins": ["nextjs"],
"rules": {
"nextjs/no-async-client-component": "error"
}
}bash
oxlint --deny nextjs/no-async-client-component --nextjs-plugin