Skip to content

Commit 48746a3

Browse files
committed
Fix Tic-Tac-Toe tutorial MDX syntax
1 parent 7228eb8 commit 48746a3

1 file changed

Lines changed: 12 additions & 12 deletions

File tree

src/content/learn/tutorial-tic-tac-toe.md

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -318,7 +318,7 @@ export default function Square() {
318318
}
319319
```
320320

321-
Хоёр дахь мөр нь button буцааж өгдөг. return JavaScript түлхүүр үг нь функц руу дуудагдсаны дараа буцаах утгыг заадаг. <button> нь JSX элемент юм. JSX элемент гэдэг нь JavaScript код болон HTML тагийг хослуулж, юу харуулахыг тодорхойлдог. className="square" нь button-ийн шинж чанар буюу prop бөгөөд CSS-д хэрхэн загварлахыг хэлдэг.X нь товч дотор харуулж буй текст, харин </button> нь JSX элементийг хааж, дараагийн агуулгыг товч дотор оруулахгүй гэдгийг заана.
321+
Хоёр дахь мөр товч буцаана. JavaScript-ийн `return` түлхүүр үг нь араас нь бичсэн зүйлийг функц дуудсан талд утга болгон буцаахыг илэрхийлдэг. `<button>` бол JSX элемент юм. JSX элемент нь JavaScript код болон HTML tag-ийг хослуулан юу харуулахыг тодорхойлдог. `className="square"` нь товчны шинж чанар буюу prop бөгөөд товчийг CSS-ээр хэрхэн загварлахыг заана. `X` бол товч дотор харагдах текст, харин `</button>` нь JSX элементийг хааж, дараагийн агуулгыг товч дотор оруулахгүйг илэрхийлнэ.
322322

323323
#### `styles.css` {/*stylescss*/}
324324

@@ -510,7 +510,7 @@ body {
510510

511511
Дараагийн алхамд, хэрэглэгч дөрвөлжин дээр дарсан үед дөрвөлжний утгыг хоосноос "X" болгож өөрчлөх хэрэгтэй. Одоогоор самбарыг ингэж бүтээсэн бол дөрвөлжин бүрийг шинэчлэх кодыг 9 удаа хуулж наах шаардлагатай болно (есөн дөрвөлжин тутамд нэг удаа)! Харин хуулж наахын оронд, React-ийн компонентын архитектур нь дагаж ашиглах боломжтой компонент үүсгэж, дахин давтагдах, замбараагүй кодоос зайлсхийх боломжийг олгодог.
512512

513-
Юуны өмнө, Board компонент дахь анхны дөрвөлжинг тодорхойлсон мөрийг (<button className="square">1</button>) шинэ Square компонент руу хуулж орно:
513+
Юуны өмнө `Board` компонент дахь анхны дөрвөлжинг тодорхойлсон мөрийг (`<button className="square">1</button>`) шинэ `Square` компонент руу хуулна:
514514

515515
```js {1-3}
516516
function Square() {
@@ -578,7 +578,7 @@ function Square({ value }) {
578578

579579
![Дамжуулсан value-гаар дүүрсэн самбар](../images/tutorial/board-filled-with-value.png)
580580

581-
Чи компонентынхаа value нэртэй JavaScript хувьсагчийг дүрслэхийг хүсэж байна, "value" гэсэн текстийг биш. JSXJavaScript руу шилжихийн тулд тэгш бөгж ({}) хэрэгтэй. JSX-д value ингэж оруулна:
581+
Та `value` нэртэй JavaScript хувьсагчийг дүрслэхийг хүсэж байгаа болохоос "value" гэсэн текстийг биш. JSX дотор JavaScript руу шилжихийн тулд угалзан хаалт (`{}`) ашиглана. `value`-г JSX-д ингэж оруулна:
582582

583583
```js {2}
584584
function Square({ value }) {
@@ -1153,7 +1153,7 @@ export default function Board() {
11531153
}
11541154
```
11551155
1156-
Дараа нь, та тухайн 'i' аргументыг 'handleClick' рүү дамжуулах шаардлагатай болно. Та JSX дотор шууд 'onSquareClick={handleClick(0)}' гэж тохируулахыг оролдож болох ч, энэ нь ажиллахгүй:
1156+
Дараа нь `i` аргументыг `handleClick` рүү дамжуулах шаардлагатай. Та JSX дотор шууд `onSquareClick={handleClick(0)}` гэж тохируулахыг оролдож болох ч энэ нь ажиллахгүй:
11571157
11581158
```jsx
11591159
<Square value={squares[0]} onSquareClick={handleClick(0)} />
@@ -1169,9 +1169,9 @@ Too many re-renders. React limits the number of renders to prevent an infinite l
11691169
11701170
Яагаад энэ асуудал өмнө нь гараагүй вэ?
11711171
1172-
Та өмнө нь 'onSquareClick={handleClick}' гэж дамжуулахдаа 'handleClick' функцийг өөрийг нь 'prop' болгон дамжуулж байсан. Та түүнийг дуудаагүй байсан! Харин одоо та тухайн функцийг шууд дуудаж байна — 'handleClick(0)' доторх хаалтыг анзаараарай — тийм ч учраас энэ нь хэтэрхий эрт ажиллаад байгаа юм. Та хэрэглэгчийг дарах хүртэл 'handleClick'-ийг дуудахыг хүсэхгүй байгаа шүү дээ!
1172+
Та өмнө нь `onSquareClick={handleClick}` гэж дамжуулахдаа `handleClick` функцийг өөрийг нь prop болгон дамжуулсан. Та түүнийг дуудаагүй! Харин одоо функцийг шууд дуудаж байна`handleClick(0)` доторх хаалтыг анзаараарай. Тиймээс энэ нь хэтэрхий эрт ажиллаж байна. Хэрэглэгч дарах хүртэл `handleClick`-ийг дуудах хэрэггүй.
11731173
1174-
Та үүнийг 'handleClick(0)'-ийг дууддаг 'handleFirstSquareClick' гэх мэт функц, 'handleClick(1)'-ийг дууддаг 'handleSecondSquareClick' гэх мэт функцүүд үүсгэх замаар засч болох юм. Тэгээд эдгээр функцүүдээ 'onSquareClick={handleFirstSquareClick}' гэх мэтээр 'prop' болгон дамжуулна (дуудах биш). Энэ нь төгсгөлгүй давталтын асуудлыг шийдэх болно.
1174+
Үүнийг `handleClick(0)`-ийг дууддаг `handleFirstSquareClick`, `handleClick(1)`-ийг дууддаг `handleSecondSquareClick` зэрэг функц үүсгэх замаар засаж болно. Дараа нь эдгээр функцийг `onSquareClick={handleFirstSquareClick}` гэх мэтээр prop болгон дамжуулна (дуудахгүй). Ингэснээр төгсгөлгүй давталтын асуудал шийдэгдэнэ.
11751175
11761176
Гэвч есөн өөр функц тодорхойлж, тус бүрт нь нэр өгөх нь хэтэрхий нуршуу (verbose) хэрэг болно. Үүний оронд дараах байдлаар хийцгээе:
11771177
@@ -1327,7 +1327,7 @@ body {
13271327
13281328
<Note>
13291329
1330-
DOM '<button>' элементийн 'onClick' аттрибут нь React-ийн хувьд онцгой утгатай байдаг, учир нь энэ нь суулгагдсан компонент юм. 'Square' шиг өөрөө үүсгэсэн компонентуудын хувьд нэршил нь таны дур мэдлийн хэрэг. Та 'Square'-ийн 'onSquareClick' проп эсвэл 'Board'-ын 'handleClick' функцэд ямар ч нэр өгч болох бөгөөд код яг ижилхэн ажиллах болно. React-д үйл явдлыг илэрхийлж буй проп'onSomething' нэр ашиглах, харин тэдгээр үйл явдлыг боловсруулж буй функцийн тодорхойлолтод 'handleSomething' нэр ашиглах нь тогтсон хэвшил юм.
1330+
DOM-ийн `<button>` элементийн `onClick` атрибут нь суурилагдсан компонент учраас React-д тусгай утгатай. `Square` шиг өөрийн үүсгэсэн компонентийн нэршлийг та өөрөө сонгоно. `Square`-ийн `onSquareClick` prop эсвэл `Board`-ын `handleClick` функцэд өөр нэр өгсөн ч код адилхан ажиллана. React-д үйл явдлыг илэрхийлэх prop`onSomething`, харин үйл явдлыг боловсруулах функцэд `handleSomething` гэсэн нэр ашиглах нь тогтсон хэвшил юм.
13311331
13321332
</Note>
13331333
@@ -1771,7 +1771,7 @@ export default function Game() {
17711771
}
17721772
```
17731773
1774-
Та 'function Board() {' тодорхойлолтын өмнөх 'export default' түлхүүр үгсийг хасаж, 'function Game() {' тодорхойлолтын өмнө нэмж байгааг анхаарна уу. Энэ нь таны 'index.js' файлд 'Board' компонентын оронд 'Game' компонентыг дээд түвшний компонент болгон ашиглахыг зааж өгч байгаа юм. 'Game' компонентоос буцааж буй нэмэлт 'div' хэсгүүд нь дараа нь хөлөг дээр нэмэгдэх тоглоомын мэдээлэлд зориулж зай гаргаж байгаа хэрэг юм.
1774+
`function Board() {` тодорхойлолтын өмнөх `export default` түлхүүр үгсийг хасаж, `function Game() {` тодорхойлолтын өмнө нэмснийг анхаарна уу. Ингэснээр `index.js` файл `Board`-ын оронд `Game` компонентыг дээд түвшний компонент болгон ашиглана. `Game` компонентоос буцааж буй нэмэлт `div`-үүд нь дараа нь хөлөгт нэмэх тоглоомын мэдээллийн зайг гаргана.
17751775
17761776
Аль тоглогч дараагийнх болох болон нүүдлийн түүхийг хянахын тулд 'Game' компонентдоо зарим төлөвийг нэмнэ үү:
17771777
@@ -2020,7 +2020,7 @@ body {
20202020
20212021
Та тоглоомын түүхийг бүртгэж байгаа тул одоо тоглогчид өмнөх нүүдлүүдийн жагсаалтыг харуулах боломжтой.
20222022
2023-
React-ийн элементүүд (жишээ нь '<button>') нь жирийн JavaScript объектууд тул та тэдгээрийг аппликейшн дотроо дамжуулан ашиглаж болно. React-д олон тооны элементүүдийг дүрслэхийн тулд та React элементүүдээс бүрдсэн массивыг ашиглаж болно.
2023+
React-ийн элементүүд (`<button>` гэх мэт) нь жирийн JavaScript объект тул апп дотроо дамжуулан ашиглаж болно. React-д олон элемент дүрслэхийн тулд React элементүүдээс бүрдсэн массив ашиглаж болно.
20242024
20252025
Танд 'history' нүүдлүүдийн массив 'state'-д хэдийн байгаа тул одоо үүнийг React элементүүдийн массив болгон хувиргах хэрэгтэй. JavaScript-д нэг массивыг нөгөө массив руу хөрвүүлэхийн тулд та... [array `map` method:](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map)
20262026
@@ -2248,7 +2248,7 @@ body {
22482248
22492249
`map`-д дамжуулсан функц `history` массиваар давтах үед `squares` аргумент `history`-ийн элемент бүрээр, харин `move` аргумент массивын индекс бүрээр (`0`, `1`, `2`, …) дамжина. Ихэнх тохиолдолд массивын бодит элементүүд хэрэгтэй байдаг ч нүүдлийн жагсаалтыг дүрслэхэд зөвхөн индексүүд хэрэгтэй.
22502250
2251-
Тоглоомын түүхэн дэх нүүдэл бүрт та товчлуур '<button>' агуулсан жагсаалтын элемент '<li>'-ийг үүсгэнэ. Товчлуур нь 'jumpTo' (та хараахан хэрэгжүүлээгүй байгаа) нэртэй функцийг дууддаг 'onClick' боловсруулагчтай байна.
2251+
Тоглоомын түүхэн дэх нүүдэл бүрд `<button>` агуулсан `<li>` жагсаалтын элемент үүсгэнэ. Товч нь хараахан хэрэгжүүлээгүй байгаа `jumpTo` функцийг дууддаг `onClick` handler-тай байна.
22522252
22532253
Одоохондоо танд тоглоомонд хийгдсэн нүүдлүүдийн жагсаалт болон хөгжүүлэгчийн хэрэгслийн консол дээр алдаа харагдах ёстой. 'key' алдаа нь юу гэсэн үг болохыг хэлэлцэцгээе.
22542254
@@ -2286,15 +2286,15 @@ to
22862286
22872287
Динамик жагсаалт үүсгэх бүртээ тохирох түлхүүрүүдийг оноохыг хатуу зөвлөж байна. Хэрэв танд тохиромжтой түлхүүр байхгүй бол өгөгдлийн бүтцээ өөрчлөх талаар бодож үзээрэй.
22882288
2289-
Хэрэв ямар нэг түлхүүр зааж өгөөгүй бол React алдаа зааж, массивын индексийг анхдагч түлхүүр болгон ашиглах болно. Жагсаалтын элементүүдийг дахин эрэмбэлэх эсвэл элемент нэмэх/хасах үед массивын индексийг түлхүүр болгон ашиглах нь асуудал үүсгэдэг. Ил тодоор 'key={i}' гэж дамжуулах нь алдааны мэдээг арилгах боловч массивын индекстэй ижил асуудлуудыг дагуулдаг тул ихэнх тохиолдолд зөвлөдөггүй.
2289+
Хэрэв түлхүүр заагаагүй бол React алдаа мэдээлж, массивын индексийг анхдагч түлхүүр болгон ашиглана. Жагсаалтын элементүүдийг дахин эрэмбэлэх, нэмэх эсвэл хасах үед массивын индексийг түлхүүр болгох нь асуудал үүсгэдэг. `key={i}` гэж ил тод дамжуулах нь алдааг арилгах боловч массивын индекстэй ижил асуудалтай тул ихэнх тохиолдолд зөвлөдөггүй.
22902290
22912291
Түлхүүрүүд нь дэлхий даяар (globally) цор ганц байх албагүй; тэд зөвхөн тухайн компонент болон түүний ижил түвшний элементүүдийн (siblings) дунд цор ганц байхад хангалттай.
22922292
22932293
### Цаг хугацаагаар аялахыг хэрэгжүүлэх {/*implementing-time-travel*/}
22942294
22952295
'Tic-tac-toe' тоглоомын түүхэнд өнгөрсөн нүүдэл бүр өөртэйгөө холбогдсон дахин давтагдашгүй ID-тай байдаг: энэ нь нүүдлийн дарааллын дугаар юм. Нүүдлүүд хэзээ ч дахин эрэмбэлэгдэхгүй, устахгүй, эсвэл дундуур нь нэмэгдэхгүй тул нүүдлийн индексийг түлхүүр ('key') болгон ашиглахад аюулгүй.
22962296
2297-
'Game' функц дотор та түлхүүрийг '<li key={move}>' байдлаар нэмж болох бөгөөд хэрэв та дүрслэгдсэн тоглоомыг дахин ачаалбал React-ийн 'key' алдаа арилах ёстой:
2297+
`Game` функц дотор түлхүүрийг `<li key={move}>` байдлаар нэмнэ. Дүрслэгдсэн тоглоомыг дахин ачаалахад React-ийн `key` алдаа арилах ёстой:
22982298
22992299
```js {4}
23002300
const moves = history.map((squares, move) => {

0 commit comments

Comments
 (0)