Skip to content

Commit bf6197b

Browse files
authored
Merge pull request #467 from ltmylinh/javascript-in-jsx-with-curly-braces-translation
Translate the javascript in jsx with curly braces page
2 parents e1c6ee2 + d7f5a76 commit bf6197b

File tree

2 files changed

+59
-59
lines changed

2 files changed

+59
-59
lines changed

src/components/MDX/Challenges/Challenge.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -63,14 +63,14 @@ export function Challenge({
6363
<div>
6464
<Button className="me-2" onClick={toggleHint} active={showHint}>
6565
<IconHint className="me-1.5" />{' '}
66-
{showHint ? 'Hide hint' : 'Show hint'}
66+
{showHint ? 'Ẩn gợi ý' : 'Hiển thị gợi ý'}
6767
</Button>
6868
<Button
6969
className="me-2"
7070
onClick={toggleSolution}
7171
active={showSolution}>
7272
<IconSolution className="me-1.5" />{' '}
73-
{showSolution ? 'Hide solution' : 'Show solution'}
73+
{showSolution ? 'Ẩn giải pháp' : 'Hiển thị giải pháp'}
7474
</Button>
7575
</div>
7676
) : (
@@ -80,7 +80,7 @@ export function Challenge({
8080
onClick={toggleSolution}
8181
active={showSolution}>
8282
<IconSolution className="me-1.5" />{' '}
83-
{showSolution ? 'Hide solution' : 'Show solution'}
83+
{showSolution ? 'Ẩn giải pháp' : 'Hiển thị giải pháp'}
8484
</Button>
8585
)
8686
)}

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

Lines changed: 56 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,25 @@
11
---
2-
title: JavaScript in JSX with Curly Braces
2+
title: JavaScript trong JSX với dấu ngoặc nhọn
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 cho phép bạn viết mã đánh dấu giống như HTML bên trong một tệp JavaScript, giúp giữ logic hiển thị và nội dung ở cùng một nơi. Đôi khi, bạn sẽ muốn thêm một chút logic JavaScript hoặc tham chiếu đến một thuộc tính động bên trong đoạn mã đánh dấu đó. Trong trường hợp này, bạn có thể sử dụng dấu ngoặc nhọn trong JSX để mở ra một “cửa sổ” tới 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+
* Cách truyền chuỗi với dấu ngoặc kép hoặc dấu nháy
14+
* Cách tham chiếu biến JavaScript bên trong JSX bằng dấu ngoặc nhọn
15+
* Cách gọi hàm JavaScript bên trong JSX bằng dấu ngoặc nhọn
16+
* Cách sử dụng đối tượng JavaScript bên trong JSX bằng dấu ngoặc nhọn
1717

1818
</YouWillLearn>
1919

20-
## Passing strings with quotes {/*passing-strings-with-quotes*/}
20+
## Truyền chuỗi với dấu ngoặc kép hoặc dấu nháy {/*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+
Khi bạn muốn truyền một thuộc tính chuỗi vào JSX, bạn đặt nó trong dấu nháy đơn hoặc dấu nháy kép:
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+
Ở đây, `"https://i.imgur.com/7vQD0fPs.jpg"` `"Gregorio Y. Zara"` đang được truyền như các chuỗi.
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+
Nhưng nếu bạn muốn chỉ định thuộc tính `src` hoặc văn bản `alt` một cách linh động thì sao? Bạn có thể **sử dụng một giá trị từ JavaScript bằng cách thay thế `"` `"` bằng dấu `{` `}`**:
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+
Chú ý sự khác biệt giữa `className="avatar"`, chỉ định tên lớp CSS `"avatar"` để làm tròn hình ảnh, và `src={avatar}` đọc giá trị của biến JavaScript có tên là `avatar`. Đó là vì dấu ngoặc nhọn cho phép bạn làm việc với JavaScript ngay trong mã đánh dấu của mình!
7171

72-
## Using curly braces: A window into the JavaScript world {/*using-curly-braces-a-window-into-the-javascript-world*/}
72+
## Sử dụng dấu ngoặc nhọn: Một cửa sổ vào thế giới 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 là một cách đặc biệt để viết JavaScript. Điều đó có nghĩa là bạn có thể sử dụng JavaScript bên trong nó—với dấu ngoặc nhọn `{ }`. Ví dụ dưới đây đầu tiên khai báo một tên cho nhà khoa học, `name`, sau đó nhúng nó vào bên trong dấu ngoặc nhọn trong thẻ `<h1>`:
7575

7676
<Sandpack>
7777

@@ -86,9 +86,9 @@ export default function TodoList() {
8686
8787
</Sandpack>
8888
89-
Try changing the `name`'s value from `'Gregorio Y. Zara'` to `'Hedy Lamarr'`. See how the list title changes?
89+
Thử thay đổi giá trị của biến `name` từ `'Gregorio Y. Zara'` thành `'Hedy Lamarr'`. Hãy xem cách tiêu đề danh sách thay đổi?
9090
91-
Any JavaScript expression will work between curly braces, including function calls like `formatDate()`:
91+
Bất kỳ biểu thức JavaScript nào cũng sẽ hoạt động giữa dấu ngoặc nhọn, bao gồm cả các lời gọi hàm như `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+
### Nơi để sử dụng dấu ngoặc nhọn {/*where-to-use-curly-braces*/}
115115
116-
You can only use curly braces in two ways inside JSX:
116+
Bạn chỉ có thể sử dụng dấu ngoặc nhọn theo hai cách trong 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. **Dưới dạng văn bản** trực tiếp bên trong một thẻ JSX: `<h1>{name}'s To Do List</h1>` hoạt động, nhưng `<{tag}>Gregorio Y. Zara's To Do List</{tag}>` sẽ không hoạt động.
119+
2. **Dưới dạng các thuộc tính** ngay sau dấu `=`: `src={avatar}` sẽ đọc giá trị của biến `avatar`, nhưng `src="{avatar}"` sẽ truyền chuỗi `"{avatar}"`.
120120
121-
## Using "double curlies": CSS and other objects in JSX {/*using-double-curlies-css-and-other-objects-in-jsx*/}
121+
## Sử dụng "hai dấu ngoặc nhọn": CSS và các đối tượng khác trong JSX {/*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+
Ngoài chuỗi, số và các biểu thức JavaScript khác, bạn thậm chí có thể truyền các đối tượng trong JSX. Các đối tượng cũng được biểu thị bằng dấu ngoặc nhọn, như `{ name: "Hedy Lamarr", inventions: 5 }`. Do đó, để truyền một đối tượng JavaScript trong JSX, bạn phải bao đối tượng đó trong một cặp dấu ngoặc nhọn khác: `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+
Bạn có thể thấy điều này khi sử dụng kiểu CSS nội tuyến (inline) trong JSX. React không bắt buộc bạn phải sử dụng kiểu nội tuyến (các lớp CSS hoạt động rất tốt trong hầu hết các trường hợp). Nhưng khi bạn cần kiểu nội tuyến, bạn truyền một đối tượng vào thuộc tính `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+
Thử thay đổi giá trị của `backgroundColor` `color`.
152152
153-
You can really see the JavaScript object inside the curly braces when you write it like this:
153+
Bạn có thể thật sự thấy đối tượng JavaScript bên trong dấu ngoặc nhọn khi bạn viết nó như thế này:
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+
Lần kế tiếp bạn thấy `{{` `}}` trong JSX, hãy biết rằng đó chỉ đơn giản là một đối tượng bên trong dấu ngoặc nhọn của JSX!
165165
166166
<Pitfall>
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+
Các thuộc tính `style` nội tuyến (inline) được viết theo kiểu camelCase. Ví dụ, HTML `<ul style="background-color: black">` sẽ được viết là `<ul style={{ backgroundColor: 'black' }}>` trong component của bạn.
169169
170170
</Pitfall>
171171
172-
## More fun with JavaScript objects and curly braces {/*more-fun-with-javascript-objects-and-curly-braces*/}
172+
## Thêm nhiều điều thú vị với các đối tượng JavaScript và dấu ngoặc nhọn {/*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+
Bạn có thể gom nhiều biểu thức vào một đối tượng và tham chiếu chúng trong JSX bằng dấu ngoặc nhọn:
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+
Trong ví dụ này, đối tượng JavaScript `person` chứa một chuỗi `name` và một đối tượng (object) `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+
Component có thể sử dụng những giá trị này từ `person` như sau:
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 là một ngôn ngữ mẫu (templating language) rất tối giản vì nó cho phép bạn tổ chức dữ liệu và logic bằng JavaScript.
234234
235235
<Recap>
236236
237-
Now you know almost everything about JSX:
237+
Bây giờ bạn đã biết gần như mọi thứ về 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+
* Các thuộc tính JSX đặt trong dấu ngoặc kép sẽ được truyền dưới dạng chuỗi.
240+
* Dấu ngoặc nhọn cho phép bạn đưa logic JavaScript và các biến vào trong mã đánh dấu của mình.
241+
* Chúng hoạt động bên trong nội dung thẻ JSX hoặc ngay sau dấu `=` trong các thuộc tính.
242+
* Dấu `{{` `}}` không phải là cú pháp đặc biệt: Đó là một đối tượng JavaScript được đặt bên trong dấu ngoặc nhọn JSX.
243243
244244
</Recap>
245245
246246
<Challenges>
247247
248-
#### Fix the mistake {/*fix-the-mistake*/}
248+
#### Sửa lỗi {/*fix-the-mistake*/}
249249
250-
This code crashes with an error saying `Objects are not valid as a React child`:
250+
Mã này gặp sự cố với lỗi nói rằng `Objects are not valid as a React child` (Đối tượng không hợp lệ khi làm con của React.):
251251
252252
<Sandpack>
253253
@@ -287,15 +287,15 @@ body > div > div { padding: 20px; }
287287

288288
</Sandpack>
289289

290-
Can you find the problem?
290+
Bạn có thể tìm ra vấn đề?
291291

292-
<Hint>Look for what's inside the curly braces. Are we putting the right thing there?</Hint>
292+
<Hint>Hãy nhìn vào những gì bên trong dấu ngoặc nhọn. Chúng ta có đang đặt đúng thứ vào đó không?</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+
Điều này xảy ra vì ví dụ này đang cố gắng render *toàn bộ đối tượng (object)* vào trong mã đánh dấu thay vì một chuỗi: `<h1>{person}'s Todos</h1>` đang cố gắng render toàn bộ đối tượng `person`! Việc đưa các đối tượng thô vào nội dung văn bản sẽ gây ra lỗi vì React không biết bạn muốn hiển thị chúng như thế nào.
297297

298-
To fix it, replace `<h1>{person}'s Todos</h1>` with `<h1>{person.name}'s Todos</h1>`:
298+
Để sửa nó, hãy thay thế `<h1>{person}'s Todos</h1>` với `<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+
#### Trích xuất thông tin vào một đối tượng {/*extract-information-into-an-object*/}
341341
342-
Extract the image URL into the `person` object.
342+
Trích xuất URL hình ảnh vào đối tượng `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+
Di chuyển URL hình ảnh vào một thuộc tính gọi là `person.imageUrl` và đọc nó từ thẻ `<img>` sử dụng dấu ngoặc nhọn:
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+
#### Viết một biểu thức trong dấu ngoặc nhọn 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+
Trong đối tượng dưới đây, URL hình ảnh đầy đủ được chia thành bốn phần: URL cơ sở, `imageId`, `imageSize`, và phần mở rộng tệp (file).
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+
Chúng ta muốn URL hình ảnh kết hợp các thuộc tính này lại với nhau: URL cơ sở (luôn luôn là `'https://i.imgur.com/'`), `imageId` (`'7vQD0fP'`), `imageSize` (`'s'`), và phần mở rộng tệp (file) (luôn luôn là `'.jpg'`). Có gì đó sai với cách thẻ `<img>` xác định thuộc tính `src` của nó.
432432

433-
Can you fix it?
433+
Bạn có thể sửa nó?
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+
Để kiểm tra phần bạn sửa có hoạt động không, thử thay đổi giá trị của `imageSize` thành `'b'`. Hình ảnh nên thay đổi kích thước sau khi bạn chỉnh sửa.
478478

479479
<Solution>
480480

481-
You can write it as `src={baseUrl + person.imageId + person.imageSize + '.jpg'}`.
481+
Bạn có thể viết nó dạng `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. `{` mở biểu thức JavaScript
484+
2. `baseUrl + person.imageId + person.imageSize + '.jpg'` cung cấp chuỗi URL chính xác
485+
3. `}` đóng biểu thức 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+
Bạn cũng có thể di chuyển biểu thức này vào một hàm `getImageUrl` tách biệt như bên dưới:
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+
Biến và hàm có thể giúp bạn giữ mã đánh dấu đơn giản!
584584

585585
</Solution>
586586

0 commit comments

Comments
 (0)