JSX에 공백을 추가 할 때 모범 사례


91

JSX에 공백을 추가하는 방법 (및 이유 )을 이해 하지만 모범 사례가 무엇인지 또는 실제 차이가 있는지 궁금합니다.

두 요소를 범위로 래핑

<div className="top-element-formatting">
  <span>Hello </span>
  <span className="second-word-formatting">World!</span>
</div>

한 줄에 추가

  <div className="top-element-formatting">
    Hello <span className="second-word-formatting">World!</span>
  </div>

JS로 공간 추가

<div className="top-element-formatting">
    Hello {" "}
    <span className="second-word-formatting">World!</span>
</div>

1
여분의 스팬이 필요하지 않습니다. React는 텍스트 노드로 오래 지속되는 문제를 해결했으며 두 번째 예제는 괜찮습니다
Dominic

1
정의 된 "모범 사례"가 있는지 모르겠습니다. 모든 것을 <span>태그 로 래핑 할 필요는 없지만 일반적으로 공백에 대해 걱정할 때 일반적인 HTML 사례를 따릅니다.
arthurakay 16.

답변:


104

끊기지 &nbsp않는 공백이 생기기 때문에 필요한 경우에만 사용해야합니다. 대부분의 경우 이것은 의도하지 않은 부작용이 있습니다.

이전 버전의 React, v14 이전의 모든 버전은 <span> </span>태그 안에 개행 문자가있을 때 자동으로 삽입 될 것이라고 생각합니다 .

더 이상이 작업을 수행하지 않지만 자신의 코드에서이를 처리하는 안전한 방법입니다. 특별히 목표로하는 스타일링이 없다면 span(일반적으로 나쁜 습관), 이것이 가장 안전한 경로입니다.

귀하의 예에 따라 매우 짧기 때문에 한 줄에 함께 넣을 수 있습니다. 더 긴 시나리오에서는 다음과 같이해야합니다.

  <div className="top-element-formatting">
    Hello <span className="second-word-formatting">World!</span>
    <span> </span>
    So much more text in this box that it really needs to be on another line.
  </div>

이 방법은 텍스트 편집기 자동 트리밍에도 안전합니다.

다른 방법은 {' '}임의의 HTML 태그를 삽입하지 않는 사용 입니다. 이것은 스타일을 지정하고, 요소를 강조 표시하고, DOM에서 혼란을 제거 할 때 더 유용 할 수 있습니다. React v14 또는 이전 버전과의 하위 호환성이 필요하지 않은 경우 선호하는 방법입니다.

  <div className="top-element-formatting">
    Hello <span className="second-word-formatting">World!</span>
    {' '}
    So much more text in this box that it really needs to be on another line.
  </div>

10

css 속성 공백을 사용하고 둘러싸는 div 요소에 미리 래핑하도록 설정할 수 있습니다.

div {
     white-space: pre-wrap;
}

컨테이너가 플렉스라면이 솔루션이 필요합니다.
Curtis

이것은 유일한 비 & nbsp; 나를 위해 일한 솔루션!
Magnus

@Magnus 천만에요, 친구. 이 답변에 대한 해결책은 실제로 내 특별한 경우에 효과가 없었습니다.
i_code

10

따옴표로 간단한 공백을 추가 할 수 있습니다. {" "}

또한 삽입 된 표현식 (중괄호 안의 코드)을 삽입 할 수있는 템플릿 리터럴을 사용할 수 있습니다 .

`${2 * a + b}.?!=-` // Notice this sign " ` ",its not normal quotes.

어떤 버전의 React에서 이것이 당신을 위해 작동합니까? 15.6.2는 이것을 무시하는 것 같습니다.
smhg

1
@smhg 요. 반응 버전에 의존하지 않습니다. ecmascript, typescript의 특징입니다. Chrome 콘솔에 템플릿을 입력하여 템플릿이 정상인지 테스트 할 수 있습니다. 바벨 설정에서도 문제가 발생할 수 있습니다.
Vasyl Gutnyk

1
템플릿 리터럴과 JSX 표현식을 혼동하고 있습니다. JSX를 통해 공백을 추가하려면 JSX 표현식 에 하나의 공백 문자로 구성된 문자열을 넣으면 됩니다. 이를 수행하는 가장 간단한 방법은 {' '}. 작동하지만 템플릿 리터럴은 필요하지 않습니다 {" "}.
Dan Dascalescu

네, 약간 혼란스러운 오타가 수정되었습니다. 어쨌든, 나는 확실히 여기 99,9 %의 사람들은 : 템플릿 리터럴을 찾고 있어요
Vasyl Gutnyk

6

나는 사용하는 경향이 있습니다 &nbsp;

예쁘지는 않지만 내가 찾은 공백을 추가하는 가장 혼란스러운 방법이며 추가하는 공백의 양을 절대적으로 제어 할 수 있습니다.

5 개의 공백을 추가하려면 :

Hello&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span className="second-word-formatting">World!</span>

몇 주 후에 코드로 돌아 오면 여기서 수행하려는 작업을 정확하게 식별하기 쉽습니다.


6
나는 실제로 타이포그래피 적으로 의미가있는 5 개의 깨지지 않는 공백을 사용하는 것이 무엇인지 상상할 수 없지만 그러한 경우를 제외하고는 실제로 사용하는 것이 잘못되었습니다. 레이아웃에 이것을 사용하는 경우 대신 CSS를 사용해야하며 공백을 추가해야하지만 깨지지 않는 것을 요구하지 않는 경우 더 많은 인쇄 학적 의미를 갖는 다른 공백이 많이 있습니다. 예를 들어,이 질문을 참조하십시오 stackoverflow.com/questions/8515365/...
guioconnor

1
@guioconnor는 상상력을 넓히고 편집기 응용 프로그램 (예 : vscode)을 생각하면 완전한 인쇄상의 의미가 있음을 알 수 있습니다. : D.
Dan

5

당신은 삽입 할 필요가 없습니다 &nbsp;또는 사용하여 여분의 공간을 포장 <span/>. 공간에 HTML 엔티티 코드를 사용하십시오.&#32;

HTML 엔티티로 일반 공간 삽입

<form>
  <div>Full name:</span>&#32;
  <span>{this.props.fullName}</span>
</form>

참고 : 오늘 나는 공간 엔티티를 형식화하여 코드를 깨는 것이 더 예쁘기 때문에 이것을 발견했습니다 . { ""}를 사용하면 한 줄에서 단독으로 작동하며 끊어지지 않습니다.
gorhawk

나는 이것을 내 대답에 추가하기 위해 들어왔다. 대신 당신을 찬성했습니다.
정의되지 않음

5

다른 줄의 구성 요소 옆에 텍스트를 배치 할 때 사용할 좋은 규칙을 생각하고 몇 가지 좋은 옵션을 찾았습니다.

<p>
    Hello {
        <span>World</span>
    }!
</p>

또는

<p>
    Hello {}
    <span>World</span>
    {} again!
</p>

이들 각각은 추가 &nbsp;또는 기타 관련없는 마크 업 없이 깨끗한 html을 생성합니다 . 사용하는 것보다 적은 수의 텍스트 노드를 생성 {' '}하고 {' hello &amp; goodbye '}그렇지 않은 경우 html 엔티티를 사용할 수 있습니다 .


3

공백에 대해 큰 따옴표와 작은 따옴표가 모두있는 expression과 같은 중괄호를 사용할 수 있습니다.

{" "} or {' '}

ES6 템플릿 리터럴을 사용할 수도 있습니다.

`   <li></li>` or `  ${value}`

아래처럼 & nbsp를 사용할 수도 있습니다 (범위 내).

<span>sample text &nbsp; </span>

HTML 콘텐츠를 인쇄 할 때 dangerouslySetInnerHTML에서 & nbsp를 사용할 수도 있습니다.

<div dangerouslySetInnerHTML={{__html: 'sample html text: &nbsp;'}} />

2

용도 {} 또는 {} 또는`&nbsp; 스팬 엘리먼트와 콘텐츠 사이의 공간을 만들기 위해.

<b> {notif.name} </b> <span id="value"> &nbsp;{ notif.count }{``} </span>

1
nbsp = 일반 공백과 다른 유니 코드 문자이며 줄 바꿈을 제한하는 구분할 수없는 공백. 때로는 다른 옵션과 동일하지 않다는 점을 지적하는 것이 바람직합니다.
Beni Cherniavsky-Paskin

1

두 요소를 분리하는 것이 목표 인 경우 아래와 같이 CSS를 사용할 수 있습니다.

A<span style={{paddingLeft: '20px'}}>B</span>
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.