react/rules-of-hooks Pedantic
작동 방식
리액트 훅의 규칙을 적용하여, 리액트 훅이 유효한 컨텍스트에서만 호출되고, 올바른 순서로 호출되도록 보장합니다.
왜 문제가 되는가?
리액트 훅은 정확히 작동하기 위해 특정 규칙을 따라야 합니다:
- 훅은 항상 최상위 레벨에서만 호출해야 합니다 (반복문, 조건문 또는 중첩된 함수 내부에서는 절대 호출하면 안 됩니다)
- 훅은 리액트 함수 컴포넌트 또는 사용자 정의 훅에서만 호출해야 합니다
- 컴포넌트가 렌더링될 때마다 훅은 동일한 순서로 호출되어야 합니다
이 규칙을 위반하면 상태가 손상되거나 컴포넌트의 동작이 예측 불가능해지는 버그가 발생할 수 있습니다.
예시
이 규칙에 부적절한 코드 예시:
javascript
// 반복문, 조건문 또는 중첩 함수 내부에서 훅을 호출하지 마세요
function BadComponent() {
if (condition) {
const [state, setState] = useState(); // ❌ 조건 내 훅 호출
}
for (let i = 0; i < 10; i++) {
useEffect(() => {}); // ❌ 반복문 내 훅 호출
}
}
// 일반 자바스크립트 함수에서 훅을 호출하지 마세요
function regularFunction() {
const [state, setState] = useState(); // ❌ 일반 함수 내 훅 호출
}이 규칙에 적절한 코드 예시:
javascript
// ✅ 리액트 컴포넌트의 최상위 레벨에서 훅을 호출하세요
function GoodComponent() {
const [state, setState] = useState();
useEffect(() => {
// 효과 로직 여기에 작성
});
return <div>{state}</div>;
}
// ✅ 사용자 정의 훅에서 훅을 호출하세요
function useCustomHook() {
const [state, setState] = useState();
return state;
}사용 방법
이 규칙을 구성 파일이나 명령줄 인터페이스를 통해 활성화하려면 다음을 사용하세요:
json
{
"plugins": ["react"],
"rules": {
"react/rules-of-hooks": "error"
}
}bash
oxlint --deny react/rules-of-hooks --react-plugin