Яка мета подвійних фігурних дужок у синтаксисі JSX React?


111

З підручника reakct.js ми бачимо таке використання подвійних фігурних брекетів:

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

А потім у другому навчальному посібнику "Мислення реагую" :

 <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.
Саян

Відповіді:


116

Це просто об'єкт, буквально вбудований у значення опори. Це те саме, що

var obj = {__html: rawMarkup};

<span dangerouslySetInnerHTML={obj} />

@BenAlpert Я був би радий, коли отримаю мить. Дивно, що мені дуже подобається редагувати документацію (була редактором юридичного журналу в попередньому втіленні), і там може бути ще кілька вдосконалень. PS, як і раніше живуть у Боулдері? Давайте коли-небудь захопимо каву чи обід ... було б добре знати когось із совок всередині React, оскільки ми тільки починаємо з ним великий проект.
Бен Робертс

1
@BenRoberts Чудово, дякую! На жаль, я сьогодні не в Каліфорнії, але не соромтесь зайти до кімнати IRC #reactjs на фрінеоде, і я з радістю відповім на питання.
Софі Алперт

@BenAlpert, чи знаєш ти, за що мислення стоїть dangerouslySetInnerHTML={__html: rawMarkup}замість цього dangerouslySetInnerHTML={rawMarkup}? Це тому, що об'єкт {__html: rawMarkup}є змінним, а рядок - ні?
Брайан Кунг


55

Кучеряві брекети мають 2 використання тут: -

  1. {..} оцінює вираз у JSX.
  2. {key: value} передбачає об’єкт javascript.

Подивимось простий приклад.

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

Якщо ви спостерігаєте pic, оточений брекетами. Це JSX спосіб вбудовування змінної. picможе бути будь-яким виразом / змінною / об'єктом Javascript. Ви також можете зробити щось на зразок {2 + 3}, і це оцінюється до {5}

Давайте тут розчленуємо стиль. {width: 193}є об'єктом Javascript. А для вбудовування цього об’єкта в JSX потрібні фігурні дужки, отже,{ {width: 193} }

Примітка. Для вбудовування будь-якого виразу / змінної / об’єкта Javascript у JSX потрібні фігурні дужки.


5
Я вважаю цю відповідь більш поясненою порівняно з відповіддю, позначеною як прийнята.
Rohit Mandiwal

@RohitMandiwal Дякую, сер. Я знаю, що це трохи заплутано, коли ти отримав одну фігурну підтяжку всередині іншої.
Mav55


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

Я досі не розумію
Ендрю Лам,

@AndrewLam - Просто відредагував. Ви можете це зрозуміти зараз?
Есан

1

Моя інтерпретація подвійних фігурних дужок полягає в тому, що об’єкт стилю приймає лише об’єкт JavaScript, тому об'єкт повинен бути всередині окремих фігурних дужок.

style={jsObj}

Об'єкт артефактів типу має ключ: значення пари (Словник по порівнянні з масивом) і цей об'єкт виражається як, наприклад, {color:'#ffffff'}.

Отже, у вас є:

style = { jsObj }

і

jsObj = {color:'#ffffff'}

Так само, як і в алгебрі, коли ви замінюєте, випливає, що:

style = { {color:'#ffffff'} }
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.