Skip to content

Commit 739f949

Browse files
committed
docs(cn): learn/javascript-in-jsx-with-curly-braces
1 parent 390b6f9 commit 739f949

File tree

1 file changed

+56
-56
lines changed

1 file changed

+56
-56
lines changed

beta/src/pages/learn/javascript-in-jsx-with-curly-braces.md

+56-56
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,25 @@
11
---
2-
title: JavaScript in JSX with Curly Braces
2+
title: JSX 的花括号内使用 JavaScript
33
---
44

55
<Intro>
66

7-
JSX lets you write HTML-like markup inside a JavaScript file, keeping rendering logic and content in the same place. Sometimes you will want to add a little JavaScript logic or reference a dynamic property inside that markup. In this situation, you can use curly braces in your JSX to open a window to JavaScript.
7+
JSX 允许你在 JavaScript 中编写类似 HTML 的标记,让渲染逻辑和内容在同一处地方。有些情况下,你想在一处标记中添加一些 JavaScript 逻辑或者引用动态属性。这种情况下,你可以在 JSX 的花括号内来编写 JavaScript
88

99
</Intro>
1010

1111
<YouWillLearn>
1212

13-
* How to pass strings with quotes
14-
* How to reference a JavaScript variable inside JSX with curly braces
15-
* How to call a JavaScript function inside JSX with curly braces
16-
* How to use a JavaScript object inside JSX with curly braces
13+
* 如何使用引号传递字符串
14+
* 在 JSX 的花括号内引用 JavaScript 变量
15+
* 在 JSX 的花括号内调用 JavaScript 函数
16+
* 在 JSX 的花括号内使用 JavaScript 对象
1717

1818
</YouWillLearn>
1919

20-
## Passing strings with quotes {/*passing-strings-with-quotes*/}
20+
## 使用引号传递字符串 {/*passing-strings-with-quotes*/}
2121

22-
When you want to pass a string attribute to JSX, you put it in single or double quotes:
22+
当你想传递一个字符串属性给 JSX 时,把它放到单引号或双引号中:
2323

2424
<Sandpack>
2525

@@ -41,9 +41,9 @@ export default function Avatar() {
4141

4242
</Sandpack>
4343

44-
Here, `"https://i.imgur.com/7vQD0fPs.jpg"` and `"Gregorio Y. Zara"` are being passed as strings.
44+
在此处,`"https://i.imgur.com/7vQD0fPs.jpg"` `"Gregorio Y. Zara"` 作为字符串被传递。
4545

46-
But what if you want to dynamically specify the `src` or `alt` text? You could **use a value from JavaScript by replacing `"` and `"` with `{` and `}`**:
46+
但是如果你想动态指定 `src` `alt` 该怎么办?你可以**使用 `{``}` 替代 `"` `"` 来引用 JavaScript 的一个值**
4747

4848
<Sandpack>
4949

@@ -67,11 +67,11 @@ export default function Avatar() {
6767

6868
</Sandpack>
6969

70-
Notice the difference between `className="avatar"`, which specifies an `"avatar"` CSS class name that makes the image round, and `src={avatar}` that reads the value of the JavaScript variable called `avatar`. That's because curly braces let you work with JavaScript right there in your markup!
70+
注意 `className="avatar"``src={avatar}` 之间的区别,`className="avatar"` 声明了一个叫 `"avatar"` CSS 类名让图片变圆,而 `src={avatar}` 读取了 JavaScript 中一个叫做 `avatar` 的变量的值。正是因为花括号让 JavaScript 可以在你的标记中生效!
7171

72-
## Using curly braces: A window into the JavaScript world {/*using-curly-braces-a-window-into-the-javascript-world*/}
72+
## 使用花括号:一扇进入 JavaScript 世界的窗户 {/*using-curly-braces-a-window-into-the-javascript-world*/}
7373

74-
JSX is a special way of writing JavaScript. That means it’s possible to use JavaScript inside it—with curly braces `{ }`. The example below first declares a name for the scientist, `name`, then embeds it with curly braces inside the `<h1>`:
74+
JSX 是一种编写 JavaScript 的特殊方式。它意味着在花括号 `{ }` 中使用 JavaScript 成为可能。下面的例子中声明了科学家的名字,`name`,然后在 `<h1>` 后的花括号内嵌入它:
7575

7676
<Sandpack>
7777

@@ -86,9 +86,9 @@ export default function TodoList() {
8686
8787
</Sandpack>
8888
89-
Try changing `name`'s value from `'Gregorio Y. Zara'` to `'Hedy Lamarr'`. See how the To Do List title changes?
89+
尝试将 `name` 的值从 `'Gregorio Y. Zara'` 更改成 `'Hedy Lamarr'`。看看这个 To Do List 的标题如何变化?
9090
91-
Any JavaScript expression will work between curly braces, including function calls like `formatDate()`:
91+
任何花括号内的 JavaScript 表达式都会工作,包括 像 `formatDate()` 这样的函数调用:
9292
9393
<Sandpack>
9494
@@ -111,18 +111,18 @@ export default function TodoList() {
111111
112112
</Sandpack>
113113
114-
### Where to use curly braces {/*where-to-use-curly-braces*/}
114+
### 可以在哪使用花括号 {/*where-to-use-curly-braces*/}
115115
116-
You can only use curly braces in two ways inside JSX:
116+
JSX 中只能以下面两种方式使用花括号:
117117
118-
1. **As text** directly inside a JSX tag: `<h1>{name}'s To Do List</h1>` works, but `<{tag}>Gregorio Y. Zara's To Do List</{tag}>` will not.
119-
2. **As attributes** immediately following the `=` sign: `src={avatar}` will read the `avatar` variable, but `src="{avatar}"` will pass the string `{avatar}`.
118+
1. 用作 JSX 标签内的**文本**:`<h1>{name}'s To Do List</h1>` 是有效的,但是 `<{tag}>Gregorio Y. Zara's To Do List</{tag}>` 无效。
119+
2. 用作紧跟在 `=` 符号后的**属性**:`src={avatar}` 会读取 `avatar` 的值,但是 `src="{avatar}"` 会传一个叫做 `{avatar}` 的字符串的值。
120120
121-
## Using "double curlies": CSS and other objects in JSX {/*using-double-curlies-css-and-other-objects-in-jsx*/}
121+
## 使用 "双花括号":JSX 中的 CSS 和 对象 {/*using-double-curlies-css-and-other-objects-in-jsx*/}
122122
123-
In addition to strings, numbers, and other JavaScript expressions, you can even pass objects in JSX. Objects are also denoted with curly braces, like `{ name: "Hedy Lamarr", inventions: 5 }`. Therefore, to pass a JS object in JSX, you must wrap the object in another pair of curly braces: `person={{ name: "Hedy Lamarr", inventions: 5 }}`.
123+
除了字符串、数字和其它 JavaScript 表达式,你甚至可以在 JSX 中传递对象。对象也用花括号表示,例如 `{ name: "Hedy Lamarr", inventions: 5 }`。因此,为了在 JSX 中传递对象,你必须用另一对花括号包裹对象:`person={{ name: "Hedy Lamarr", inventions: 5 }}`
124124
125-
You may see this with inline CSS styles in JSX. React does not require you to use inline styles (CSS classes work great for most cases). But when you need an inline style, you pass an object to the `style` attribute:
125+
你也许看到了内联在 JSX 中的 CSS 样式。React 不强制你使用内联样式(CSS 类适用于大多数情况)。但是当你需要内联样式的时候,你可以传递一个对象给 `style` 属性:
126126
127127
<Sandpack>
128128
@@ -148,9 +148,9 @@ ul { padding: 20px 20px 20px 40px; margin: 0; }
148148
149149
</Sandpack>
150150
151-
Try changing the values of `backgroundColor` and `color`.
151+
尝试更改 `backgroundColor` `color` 的值。
152152
153-
You can really see the JavaScript object inside the curly braces when you write it like this:
153+
当你像下面的例子那样写时,你真的可以发现花括号内的对象:
154154
155155
```js {2-5}
156156
<ul style={
@@ -161,17 +161,17 @@ You can really see the JavaScript object inside the curly braces when you write
161161
}>
162162
```
163163
164-
The next time you see `{{` and `}}` in JSX, know that it's nothing more than an object inside the JSX curlies!
164+
当你下次在 JSX 中看到 `{{` `}}`,要知道它只不过是 JSX 花括号里的一个对象!
165165
166166
<Gotcha>
167167
168-
Inline `style` properties are written in camelCase. For example, HTML `<ul style="background-color: black"`> would be written as `<ul style={{ backgroundColor: 'black' }}>` in your component.
168+
内联 `style` 属性 使用驼峰命名法编写。例如,HTML `<ul style="background-color: black"`> 在你的组件里应该写成 `<ul style={{ backgroundColor: 'black' }}>`
169169
170170
</Gotcha>
171171
172-
## More fun with JavaScript objects and curly braces {/*more-fun-with-javascript-objects-and-curly-braces*/}
172+
## JavaScript 对象 和 花括号的更多可能 {/*more-fun-with-javascript-objects-and-curly-braces*/}
173173
174-
You can move several expressions into one object, and reference them in your JSX inside curly braces:
174+
你可以将多个表达式合并到一个对象中,在 JSX 内的花括号内引用它们:
175175
176176
<Sandpack>
177177
@@ -211,7 +211,7 @@ body > div > div { padding: 20px; }
211211

212212
</Sandpack>
213213

214-
In this example, the `person` JavaScript object contains a `name` string and a `theme` object:
214+
在这个例子中,`person` JavaScript 对象包含 `name` 字符串和 `theme` 对象:
215215

216216
```js
217217
const person = {
@@ -223,31 +223,31 @@ const person = {
223223
};
224224
```
225225

226-
The component can use these values from `person` like so:
226+
该组件可以这样使用来自 `person` 的值:
227227

228228
```js
229229
<div style={person.theme}>
230230
<h1>{person.name}'s Todos</h1>
231231
```
232232
233-
JSX is very minimal as a templating language because it lets you organize data and logic using JavaScript.
233+
JSX 是一个十分简洁的模板语言,因为它允许你使用 JavaScript 组织数据和逻辑。
234234
235235
<Recap>
236236
237-
Now you know almost everything about JSX:
237+
现在你几乎了解了 JSX 的一切:
238238
239-
* JSX attributes inside quotes are passed as strings.
240-
* Curly braces let you bring JavaScript logic and variables into your markup.
241-
* They work inside the JSX tag content or immediately after `=` in attributes.
242-
* `{{` and `}}` is not special syntax: it's a JavaScript object tucked inside JSX curly braces.
239+
* JSX 引号内的值作为字符串传递给属性。
240+
* 花括号让你可以将 JavaScript 的逻辑和变量带入你的标记中。
241+
* 它们在 JSX 标签中的内容或紧随属性后的 `=` 有效。
242+
* `{{` `}}` 不是特殊语法:它是在 JSX 花括号内的 JavaScript 对象。
243243
244244
</Recap>
245245
246246
<Challenges>
247247
248-
### Fix the mistake {/*fix-the-mistake*/}
248+
### 修复错误 {/*fix-the-mistake*/}
249249
250-
This code crashes with an error saying `Objects are not valid as a React child`:
250+
此代码崩溃并显示 `Objects are not valid as a React child`
251251
252252
<Sandpack>
253253
@@ -287,15 +287,15 @@ body > div > div { padding: 20px; }
287287

288288
</Sandpack>
289289

290-
Can you find the problem?
290+
你能找到问题吗?
291291

292-
<Hint>Look for what's inside the curly braces. Are we putting the right thing there?</Hint>
292+
<Hint>看看花括号内的内容。我们放那的东西对吗?</Hint>
293293

294294
<Solution>
295295

296-
This is happening because this example renders *an object itself* into the markup rather than a string: `<h1>{person}'s Todos</h1>` is trying to render the entire `person` object! Including raw objects as text content throws an error because React doesn't know how you want to display them.
296+
之所以发生这样的问题是因为例子尝试把*一个对象*渲染进标记内而不是一个字符串:`<h1>{person}'s Todos</h1>` 尝试渲染整个 `person` 对象!未经处理的对象作为文本内容将会抛出错误,因为 React 不知道你想如何显示它们。
297297

298-
To fix it, replace `<h1>{person}'s Todos</h1>` with `<h1>{person.name}'s Todos</h1>`:
298+
要修复它,请把 `<h1>{person}'s Todos</h1>` 替换成 `<h1>{person.name}'s Todos</h1>`
299299

300300
<Sandpack>
301301

@@ -337,9 +337,9 @@ body > div > div { padding: 20px; }
337337
338338
</Solution>
339339
340-
### Extract information into an object {/*extract-information-into-an-object*/}
340+
### 提取信息到对象中 {/*extract-information-into-an-object*/}
341341
342-
Extract the image URL into the `person` object.
342+
提取图片 URL 信息到 `person` 对象中。
343343
344344
<Sandpack>
345345
@@ -381,7 +381,7 @@ body > div > div { padding: 20px; }
381381

382382
<Solution>
383383

384-
Move the image URL into a property called `person.imageUrl` and read it from the `<img>` tag using the curlies:
384+
把图片 URL 移到一个叫做 `person.imageUrl` 的属性中并在 `<img>` 标签中的花括号中读取它:
385385

386386
<Sandpack>
387387

@@ -424,13 +424,13 @@ body > div > div { padding: 20px; }
424424
425425
</Solution>
426426
427-
### Write an expression inside JSX curly braces {/*write-an-expression-inside-jsx-curly-braces*/}
427+
### JSX 花括号内写一个表达式 {/*write-an-expression-inside-jsx-curly-braces*/}
428428
429-
In the object below, the full image URL is split into four parts: base URL, `imageId`, `imageSize`, and file extension.
429+
在下面的对象中,完整的图片 URL 分成四部分:base URL`imageId` `imageSize` 和文件拓展名。
430430
431-
We want the image URL to combine these attributes together: base URL (always `'https://i.imgur.com/'`), `imageId` (`'7vQD0fP'`), `imageSize` (`'s'`), and file extension (always `'.jpg'`). However, something is wrong with how the `<img>` tag specifies its `src`.
431+
我们希望这些属性组合成图片的 URLbase URL(一直是 `'https://i.imgur.com/'`)、`imageId``'7vQD0fP'`)、`imageSize``'s'`)和文件拓展(总是 `'.jpg'`)。但是,`<img>` 标签 `src` 指明的方式是有问题的。
432432

433-
Can you fix it?
433+
你能修复它吗?
434434

435435
<Sandpack>
436436

@@ -474,15 +474,15 @@ body > div > div { padding: 20px; }
474474

475475
</Sandpack>
476476

477-
To check that your fix worked, try changing the value of `imageSize` to `'b'`. The image should resize after your edit.
477+
要检查你的修复是否成功,尝试吧 `imageSize` 的值改成 `'b'`。在你编辑后图像应该会调整大小。
478478

479479
<Solution>
480480

481-
You can write it as `src={baseUrl + person.imageId + person.imageSize + '.jpg'}`.
481+
你可以这样写 `src={baseUrl + person.imageId + person.imageSize + '.jpg'}`
482482

483-
1. `{` opens the JavaScript expression
484-
2. `baseUrl + person.imageId + person.imageSize + '.jpg'` produces the correct URL string
485-
3. `}` closes the JavaScript expression
483+
1. `{` 开启 JavaScript 表达式
484+
2. `baseUrl + person.imageId + person.imageSize + '.jpg'` 提供正确的 URL 字符串
485+
3. `}` 结束 JavaScript 表达式
486486

487487
<Sandpack>
488488

@@ -525,7 +525,7 @@ body > div > div { padding: 20px; }
525525

526526
</Sandpack>
527527

528-
You can also move this expression into a separate function like `getImageUrl` below:
528+
你还可以将此表达式封装成一个单独的函数,例如下面的 `getImageUrl`
529529

530530
<Sandpack>
531531

@@ -580,7 +580,7 @@ body > div > div { padding: 20px; }
580580

581581
</Sandpack>
582582

583-
Variables and functions can help you keep the markup simple!
583+
变量和函数可以帮助你保持标记文本的简洁!
584584

585585
</Solution>
586586

0 commit comments

Comments
 (0)