Tip

ESLint react/display-name 해결하기

Kir93 2021. 9. 2. 12:11
728x90
반응형

해당 에러는 의외로 많은 곳에서 볼 수 있고 Google에서 코드를 참고하다 보면 자주 겪게 되는 에러입니다.

익명 함수를 사용해서 발생하는 에러로 주로 아래와 같은 경우 많이 발생한다.

{
 ...
 component: ({size, color}) => <AnyComponent size={size} color={color} />,
 ...
}

위와 같은 코드는 꽤나 자주 사용되는데 해당 코드를

const renderComponent = ({size, color}) => <AnyComponent size={size} color={color} />
{
 ...
 component: renderComponent,
 ...
}

아래와 같이 함수를 외부로 빼서 작성하게 되면 해결할 수 있다.

물론 TS를 적용하면 문제가 발생하는 경우가 있다.

 

위와 같은 경우에는

interface IProps {
 size: string;
 color: string;
}

const renderComponent = ({size, color}:IProps):React.ReactComponent => 
	<AnyComponent size={size} color={color} />
{
 ...
 component: renderComponent,
 ...
}

이 정도로 충분히 허용 괜찮은데 라고 생각할지 모르지만

styled-components의 서버사이드를 위해 사용하는 코드를 보면 조금 생각이 달라질지도 모른다.

// eslint react/display-name를 끄지 않기 위한 코드
const enhanceApp = (App: AppType) => {
  const styleCollect = (
  props: React.PropsWithChildren<AppPropsType<NextRouter, Record<string, unknown>>>,
  ) => sheet.collectStyles(<App {...props} />);
  return styleCollect;
};
    
ctx.renderPage = () =>
  originalRenderPage({
  	enhanceApp,
});

// 해당 줄만 끈 코드
ctx.renderPage = () =>
  originalRenderPage({
  	// eslint-disable-next-line react/display-name
  	enhanceApp: (App) => (props) => sheet.collectStyles(<App {...props} />),
});

위와 아래 어느게 좋아 보이는가?

개인적으로도 자주 사용하는 HOF 역시 익명 함수이기에 적용이 짧게 줄일 수 없고 풀어서 써줘야 한다.

타입의 길이 역시 무척이나 길다.

해당 ESLint의 정의는 조금 더 보기 편한 코드를 위한 것이라고 생각한다.

하지만 위와 같은 경우가 된다면 오히려 더욱 보기 불편해 보이는 코드가 된다.

 

그래서 나의 경우 기본적으로는 켠 채로 사용하다 위와 같은 코드가 발생할 경우에만 해당 줄에 설정을 꺼서 사용하고 있다.

반응형