React의 JSX 구문에서 이중 중괄호의 목적은 무엇입니까?


111

로부터 튜토리얼 react.js 우리는 이중 중괄호의 사용을 참조하십시오

<span dangerouslySetInnerHTML={{ __html: rawMarkup }} />

그리고 두 번째 튜토리얼 "Thinking in react"에서 :

 <span style={{ color: 'red' }}>
     {this.props.product.name}
 </span>;

그러나 React JSX 문서 는 이중 중괄호를 설명하거나 언급하지 않습니다. 이 구문 (이중 컬리)은 무엇을위한 것입니까? 그리고 jsx에서 동일한 것을 표현하는 다른 방법이 있습니까? 아니면 문서에서 누락 된 것입니까?


9
문서에서The exterior set of curly braces are letting JSX know you want a JS expression. The interior set of curly braces represent a JavaScript object, meaning you’re passing in a object to the style attribute.
Sayan

답변:


116

prop 값에 인라인 된 객체 리터럴 일뿐입니다. 그것은

var obj = {__html: rawMarkup};

<span dangerouslySetInnerHTML={obj} />

@BenAlpert 잠시 시간을 내면 기뻐할 것입니다. 이상하게도 저는 실제로 문서 편집을 즐깁니다 (이전의 법률 저널 편집자였습니다). 거기에 몇 가지 다른 개선 사항이있을 수 있습니다. 추신, 아직 볼더에 살고 있습니까? 언젠가 커피 나 점심을 먹자 ... 우리가 막 큰 프로젝트를 시작하고 있기 때문에 React에 대한 내부 정보를 가진 사람을 아는 것이 좋을 것입니다.
Ben Roberts

1
@BenRoberts 좋아요, 감사합니다! 불행히도 저는 요즘 캘리포니아에 있지만 freenode의 #reactjs IRC 룸에 들러 주시기 바랍니다. 질문에 답해 드리겠습니다.
Sophie Alpert 2014 년

@ BenAlpert dangerouslySetInnerHTML={__html: rawMarkup}대신에 그것을 만드는 생각이 무엇인지 알고 dangerouslySetInnerHTML={rawMarkup}있습니까? 객체 {__html: rawMarkup}가 변경 가능하고 문자열이 아니기 때문입니까?
Brian Kung


55

중괄호는 여기에 두 가지 용도가 있습니다.

  1. {..}은 JSX의 표현식으로 평가됩니다.
  2. {key : value}는 자바 스크립트 객체를 의미합니다.

간단한 예를 보겠습니다.

<Image source={pic} style={{width: 193}}/>

관찰하면 pic중괄호로 둘러싸여 있습니다. 그것이 변수를 포함하는 JSX 방식입니다. pic자바 스크립트 표현식 / 변수 / 객체가 될 수 있습니다. {2 + 3}과 같은 작업을 수행 할 수도 있으며 {5}로 평가됩니다.

여기서 스타일을 분석해 봅시다. {width: 193}Javascript 객체입니다. 이 객체를 JSX에 포함하려면 중괄호가 필요합니다.{ {width: 193} }

참고 : JSX에 모든 종류의 자바 스크립트 표현식 / 변수 / 객체를 포함하려면 중괄호가 필요합니다.


5
나는이 답변이 수락 된 것으로 표시된 답변에 비해 더 설명 적이라고 생각합니다.
Rohit Mandiwal

@RohitMandiwal 감사합니다. 중괄호가 다른 안에 있으면 약간 혼란 스러워요.
Mav55

14

모르는 경우 태그에 {{color: 'red'}}사용되는 이유style

<span style={{color: 'red'}}>
    {this.props.product.name}
</span>;

React 공식 문서 에 따르면 style 속성은 CSS 문자열이 아닌 JavaScript 객체를 허용 합니다.


6

React는 JSX를 사용하고, JSX에서는 모든 변수, 상태 객체, 표현식 등을 {}로 묶어야합니다.

JSX에서 인라인 스타일을 제공하는 동안 객체로 지정해야하므로 다시 중괄호 안에 있어야합니다. {}.

이것이 두 쌍의 중괄호가있는 이유입니다.


3

이는 의도 한 스타일 속성의 개체로 설정된 스타일 변수를 선언하는 대신 개체에서 스타일 속성을 설정할 수 있음을 의미합니다. 더 많은 스타일이 필요한 요소는 스타일 변수를 선언하는 것이 더 깔끔합니다.

예를 들어 스타일 속성이 적은 요소의 경우 다음을 수행하십시오.

<span style={{color: 'red'}}>
  {this.props.product.name}
</span>

더 많은 스타일 속성을 가진 HTML 요소의 경우 다음을 수행하십시오.

const spanStyle = {
   backgroundColor: 'red',
   color: 'grey',
   margin: '-25px'
}

그런 다음 jsx 구문으로 호출합니다.

<span style={spanStyle}>
  {this.props.product.name}
</span>

1

모든 사람이 이해할 수 있도록 간단한 말로 말하려고합니다. 아래 코드 :

<span dangerouslySetInnerHTML={{__html: rawMarkup}} />

동일하다

<span 
     dangerouslySetInnerHTML={ {__html: rawMarkup} } 
/>

따라서 리터럴 객체 를 속성 에 할당하려면 React 표현식을 사용해야 합니다.

주로 AngularJs에서 ReactJs로 이동하는 일부 사람들에게는 AngularJs의 표현식 바인딩 연산자 {{}} 와 혼동 될 수 있습니다. 따라서 ReactJs에서 다르게 살펴보십시오.


7
두 코드 조각은 서식을 제외하고 정확히 동일한 것 같습니다.
jcollum

4
@jcollum-그게 바로 그의 요점입니다. 이중 중괄호 "연산자"는 그가 보여주는 연산자가 아닙니다. HTML 템플릿 엔진에서는 너무 흔해서 반응이 이상해 보입니다.
aaaaaa dec.

나는 아직도 그것을 얻을하지 않습니다
앤드류 램을

@AndrewLam-방금 편집했습니다. 이제 이해할 수 있습니까?
Ehsan

1

이중 중괄호에 대한 나의 해석은 스타일 개체가 JavaScript 개체 만 허용하므로 개체가 단일 중괄호 안에 있어야한다는 것입니다.

style={jsObj}

스타일 아티팩트의 객체는 키 : 값 쌍 (사전 대 배열)이며 해당 객체는 예를 들어 {color:'#ffffff'}.

그래서 당신은 :

style = { jsObj }

jsObj = {color:'#ffffff'}

대수에서와 마찬가지로 대체 할 때 다음을 의미합니다.

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