react/jsx-curly-brace-presence 스타일
어떤 기능을 하나요
리터럴만으로 충분한 경우 불필요한 JSX 표현식을 금지하거나, JSX 자식 또는 속성 내 리터럴에 대해 반드시 JSX 표현식을 요구합니다.
이 규칙을 통해 JSX 속성과/또는 자식에서 중괄호 사용 여부를 강제하거나, 불필요한 중괄호 사용을 금지할 수 있습니다.
불필요한 JSX 표현식이 발생하는 상황의 경우, 리액트 문서와 이 페이지의 JSX 주의사항를 참조하세요.
왜 문제가 되나요?
JSX 코드에 다양한 스타일을 사용하면 코드가 읽기 어려워지고 일관성이 떨어집니다.
코드 일관성은 가독성을 향상시킵니다. 이 규칙을 통해 속성과/또는 자식에서 중괄호 사용 여부를 강제하거나 금지함으로써 애플리케이션 전체에서 일관된 패턴을 유지할 수 있습니다.
규칙 세부 사항
기본적으로 이 규칙은 속성과 자식 모두에서 불필요한 중괄호를 확인하고 경고합니다. 백워드 호환성을 위해, 기본적으로 속성 값이 JSX 요소인 경우는 제외됩니다.
중괄호 사용 여부를 강제하거나 불필요한 중괄호 사용을 금지하려면 다음 옵션 중 하나 이상을 지정할 수 있습니다:
- 속성에 대한 중괄호 사용 여부
- 자식에 대한 중괄호 사용 여부
- 속성 값이 JSX 요소인 경우의 중괄호 사용 여부
또한 이러한 옵션들은 불필요한 중괄호 사용을 금지하거나 체크를 무시할 때도 동일하게 사용할 수 있습니다.
참고: 이 규칙을 객체로 구성하는 것을 매우 추천하며, "propElementValues"를 "always"로 설정해야 합니다. 속성 값이 JSX 요소인 경우 중괄호 생략 기능은 모호하고, 의도적으로 문서화되지 않았으며, 의존해서는 안 됩니다.
예시 구성
{
"rules": {
"react/jsx-curly-brace-presence": ["error", { "props": <string>, "children": <string>, "propElementValues": <string> }]
}
}또는 다음과 같이 대체할 수 있습니다:
{
"rules": {
"react/jsx-curly-brace-presence": ["error", "always"], // 또는 "never" 또는 "ignore"
},
}수정 세부 사항
옵션을 전달하여 수정을 수행할 경우, 다음과 같이 스타일 위반 사항이 해결됩니다.
always: JSX 속성을 중괄호/JSX 표현식으로 감싸고, 자식도 동일하게 이중 따옴표 포함하여 감싸기never: JSX 속성과/또는 자식에서 중괄호 제거모든 수정 작업은 이중 따옴표를 사용합니다.
예시
{ props: "always", children: "always" }로 구성했을 때 잘못된 코드 예시:
<App>Hello world</App>;
<App prop="Hello world">{"Hello world"}</App>;이를 다음과 같이 수정할 수 있습니다:
<App>{"Hello world"}</App>;
<App prop={"Hello world"}>{"Hello world"}</App>;{ props: "never", children: "never" }로 구성했을 때 잘못된 코드 예시:
<App>{"Hello world"}</App>;
<App prop={"Hello world"} attr={"foo"} />;이를 다음과 같이 수정할 수 있습니다:
<App>Hello world</App>;
<App prop="Hello world" attr="foo" />;{ props: "always", children: "always", "propElementValues": "always" }로 구성했을 때 잘못된 코드 예시:
<App prop=<div /> />이를 다음과 같이 수정할 수 있습니다:
<App prop={<div />} />{ props: "never", children: "never", "propElementValues": "never" }로 구성했을 때 잘못된 코드 예시:
<App prop={<div />} />이를 다음과 같이 수정할 수 있습니다:
<App prop=<div /> />"always"로 구성했을 때 잘못된 코드 예시:
<App>Hello world</App>;
<App prop="Hello world" attr="foo">
Hello world
</App>;이를 다음과 같이 수정할 수 있습니다:
<App>{"Hello world"}</App>;
<App prop={"Hello world"} attr={"foo"}>
{"Hello world"}
</App>;"never"로 구성했을 때 잘못된 코드 예시:
<App prop={"foo"} attr={"bar"}>
{"Hello world"}
</App>이를 다음과 같이 수정할 수 있습니다:
<App prop="foo" attr="bar">
Hello world
</App>특이 케이스
수정 과정에서는 템플릿 리터럴, 따옴표로 둘러싸인 문자열, 이스케이프 문자를 포함한 문자열도 처리합니다.
- 규칙이 불필요한 중괄호를 제거하도록 설정되어 있고, JSX 표현식 내 템플릿 리터럴에 식이 없을 경우, 경고를 발생시키고 이중 따옴표로 수정합니다. 예를 들어:
<App prop={`Hello world`}>{`Hello world`}</App>는 다음과 같이 경고되고 수정됩니다:
<App prop="Hello world">Hello world</App>- 규칙이 중괄호 사용을 강제하도록 설정되어 있고, 문자열에 따옴표가 포함되어 있을 경우, 자식에는 이중 따옴표로 수정되며, 속성에는 일반적인 방식으로 수정됩니다. 또한 수정 시 이중 따옴표는 이스케이프 처리됩니다.
예를 들어:
<App prop='Hello "foo" world'>Hello 'foo' "bar" world</App>는 경고되고 다음과 같이 수정됩니다:
<App prop={'Hello "foo" world'}>{"Hello 'foo' \"bar\" world"}</App>- 규칙이 불필요한 중괄호(=JSX 표현식)를 제거하도록 설정되어 있고, 이를 변환해야 하는 특수 문자(예: 따옴표, 금지된 JSX 텍스트 문자, 이스케이프 문자, 또는 HTML 엔티티 이름처럼 보이는 문자 등)가 포함되어 있는 경우, 코드는 경고되지 않습니다. 왜냐하면 수정 후 코드의 가독성이 낮아질 수 있기 때문입니다.
"never"로 구성되어 있어도 올바른 코드 예시:
<Color text={"\u00a0"} />
<App>{"Hello \u00b7 world"}</App>;
<style type="text/css">{'.main { margin-top: 0; }'}</style>;
/**
* 컨테이너 없이 공백을 삽입하는 방법은 없으므로, 이 경우 항상 허용됨.
*/
<App>{' '}</App>
<App>{' '}</App>
<App>{/* 주석 */ <Bpp />}</App> // 주석 때문에 컨테이너 필요사용하지 않을 때
이 규칙을 사용하지 않는 경우는, 속성과/또는 자식 내 중괄호 사용 및 불필요한 JSX 표현식 사용에 대한 일관성 유지에 관심이 없을 때입니다.
구성
이 규칙은 다음 속성을 가진 구성 객체를 수락합니다:
children
타입: "always" | "never" | "ignore"
기본값: "never"
JSX 요소의 자식 콘텐츠에 대해 중괄호 사용 여부를 강제하거나 금지할지 여부.
never: 불필요한 중괄호를 금지합니다. 예:<Foo>I love oxlint</Foo>가 선호됨always: 모든 경우에 중괄호를 강제합니다. 예:<Foo>{'I love oxlint'}</Foo>ignore: 자식 콘텐츠에 대해 두 스타일 모두 허용
propElementValues
타입: "always" | "never" | "ignore"
기본값: "ignore"
ignore또는never로 설정 시, 다음 코드가 허용(또는 강제):<App prop=<div /> />;always로 설정 시, 속성 값이 JSX 요소인 경우 중괄호가 필요합니다:<App prop={<div />} />;
참고: propElementValues를 always로 설정하는 것이 매우 추천됩니다. 속성 값이 JSX 요소인 경우 중괄호 생략 기능은 모호하며, 의도적으로 문서화되지 않았으며, 의존해서는 안 됩니다.
props
타입: "always" | "never" | "ignore"
기본값: "never"
JSX 요소의 속성에 대해 중괄호 사용 여부를 강제하거나 금지할지 여부.
never: 불필요한 중괄호를 금지합니다. 예:<Foo foo="bar" />가 선호됨always: 모든 경우에 중괄호를 강제합니다. 예:<Foo foo={'bar'} />ignore: 속성 값에 대해 두 스타일 모두 허용
사용 방법
설정 파일이나 명령줄 인터페이스를 통해 이 규칙을 활성화하려면 다음을 사용하세요:
{
"plugins": ["react"],
"rules": {
"react/jsx-curly-brace-presence": "error"
}
}oxlint --deny react/jsx-curly-brace-presence --react-plugin