Skip to content

Commit c68ea62

Browse files
final touchup
1 parent 7dfc21f commit c68ea62

File tree

1 file changed

+34
-34
lines changed

1 file changed

+34
-34
lines changed

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

Lines changed: 34 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -57,9 +57,9 @@ function Board({ xIsNext, squares, onPlay }) {
5757
const winner = calculateWinner(squares);
5858
let status;
5959
if (winner) {
60-
status = 'Winner: ' + winner;
60+
status = 'విజేత: ' + winner;
6161
} else {
62-
status = 'Next player: ' + (xIsNext ? 'X' : 'O');
62+
status = 'నెక్స్ట్ ప్లేయర్: ' + (xIsNext ? 'X' : 'O');
6363
}
6464

6565
return (
@@ -103,9 +103,9 @@ export default function Game() {
103103
const moves = history.map((squares, move) => {
104104
let description;
105105
if (move > 0) {
106-
description = 'Go to move #' + move;
106+
description = '#' + move + ' కదలికకు వెళ్లండి';
107107
} else {
108-
description = 'Go to game start';
108+
description = 'ఆట ప్రారంభానికి వెళ్లండి';
109109
}
110110
return (
111111
<li key={move}>
@@ -1342,22 +1342,22 @@ DOM `<button>` ఎలిమెంట్ యొక్క `onClick` అట్ర
13421342
```jsx
13431343
const squares = [null, null, null, null, null, null, null, null, null];
13441344
squares[0] = 'X';
1345-
// ఇప్పుడు `స్క్వేర్స్` ["X", null, null, null, null, null, null, null, null];
1345+
// ఇప్పుడు `squares` ["X", null, null, null, null, null, null, null, null];
13461346
```
13471347
13481348
మీరు `squares` array ని మ్యుటేట్ చేయకుండా డేటాను చేంజ్ చేసినట్లయితే అది ఎలా ఉంటుందో ఇక్కడ ఉంది:
13491349
13501350
```jsx
13511351
const squares = [null, null, null, null, null, null, null, null, null];
13521352
const nextSquares = ['X', null, null, null, null, null, null, null, null];
1353-
// ఇప్పుడు `squares` మారలేదు, కానీ `nextSquares` మొదటి ఎలిమెంట్ `null` కాకుండా 'X'
1353+
// ఇప్పుడు `squares` మారలేదు, కానీ `nextSquares` మొదటి ఎలిమెంట్ `null` కాకుండా 'X' అయ్యింది
13541354
```
13551355
13561356
ఫలితం ఒకే విధంగా ఉంటుంది కానీ డైరెక్ట్ గా మ్యుటేట్ చేయకుండా ఉండటం (లోపల ఉన్న డేటాను మార్చడం) ద్వారా, మీరు అనేక ప్రయోజనాలను పొందుతారు.
13571357
13581358
ఇమ్ముటబిలిటీ కాంప్లెక్స్ ఫీచర్లను ఇంప్లిమెంట్ చేయడం చాలా సులభం చేస్తుంది. ఈ ట్యుటోరియల్‌లో తర్వాత, మీరు గేమ్ చరిత్రను రివ్యూ చేయడానికి మరియు గత కదలికలకు "జంప్ బ్యాక్" అవ్వడానికి మిమ్మల్ని అనుమతించే "టైమ్ ట్రావెల్" ఫీచర్‌ను అమలు చేస్తారు. ఈ ఫంక్షనాలిటీ గేమ్‌లకు ప్రత్యేకమైనది కాదు--నిర్దిష్ట చర్యలను అన్డు మరియు రీడు చేయడం అనేది యాప్‌లకు సాధారణ అవసరం. డైరెక్ట్ డేటా మ్యుటేషన్‌ను నివారించడం వలన డేటా యొక్క మునుపటి వెర్షన్‌లను అలాగే ఉంచడానికి మరియు వాటిని తర్వాత మళ్లీ ఉపయోగించుకోవడానికి మిమ్మల్ని అనుమతిస్తుంది.
13591359
1360-
ఇమ్ముటబిలిటీ వల్ల మరో ప్రయోజనం కూడా ఉంది. డిఫాల్ట్‌గా, పేరెంట్ కాంపోనెంట్ స్థితి మారినప్పుడు అన్ని చైల్డ్ కాంపోనెంట్‌లు ఆటోమేటిక్‌గా రీ-రెండర్ అవుతాయి. మార్పు వల్ల ప్రభావితం కాని చైల్డ్ కాంపోనెంట్‌లు కూడా ఇందులో ఉన్నాయి. రీ-రెండరింగ్ అనేది యూసర్ నోటీస్ చేయనప్పటికీ (మీరు దానిని అవొఇద్ చేయడానికి యాక్టివ్ గా ట్రై చేయకూడదు!), మీరు పెర్ఫార్మన్స్ ఇస్సుఎస్ వల్ల ట్రీ లో క్లియర్గా అఫక్ట్ అవ్వని కొంత భాగాన్ని రీ-రెండరింగ్ చేయడం స్కిప్ చేయవచ్చు. ఇమ్యుటబిలిటీ వారి డేటా మారినదా లేదా అనేదానిని పోల్చడానికి కాంపోనెంట్లను చాలా చౌకగా చేస్తుంది. మీరు [`memo` API రిఫరెన్స్](/reference/react/memo) లో కాంపోనెంట్‌ను ఎప్పుడు రీ-రెండర్ చేయాలో React ఎలా ఎంచుకుంటుంది అనే దాని గురించి మరింత తెలుసుకోవచ్చు.
1360+
ఇమ్ముటబిలిటీ వల్ల మరో ప్రయోజనం కూడా ఉంది. డిఫాల్ట్‌గా, పేరెంట్ కాంపోనెంట్ state మారినప్పుడు అన్ని చైల్డ్ కాంపోనెంట్‌లు ఆటోమేటిక్‌గా రీ-రెండర్ అవుతాయి. మార్పు వల్ల ప్రభావితం కాని చైల్డ్ కాంపోనెంట్‌లు కూడా ఇందులో ఉన్నాయి. రీ-రెండరింగ్ అనేది యూసర్ నోటీస్ చేయనప్పటికీ (మీరు దానిని అవొఇద్ చేయడానికి యాక్టివ్ గా ట్రై చేయకూడదు!), మీరు పెర్ఫార్మన్స్ ఇస్సుఎస్ వల్ల ట్రీ లో క్లియర్గా అఫక్ట్ అవ్వని కొంత భాగాన్ని రీ-రెండరింగ్ చేయడం స్కిప్ చేయవచ్చు. ఇమ్యుటబిలిటీ వారి డేటా మారినదా లేదా అనేదానిని పోల్చడానికి కాంపోనెంట్లను చాలా చౌకగా చేస్తుంది. మీరు [`memo` API రిఫరెన్స్](/reference/react/memo) లో కాంపోనెంట్‌ను ఎప్పుడు రీ-రెండర్ చేయాలో React ఎలా ఎంచుకుంటుంది అనే దాని గురించి మరింత తెలుసుకోవచ్చు.
13611361
13621362
### టర్న్స్ తీసుకోవడం {/*taking-turns*/}
13631363
@@ -1406,7 +1406,7 @@ export default function Board() {
14061406
14071407
`X` ఒక `O` ద్వారా ఒవెర్రైట్ చేయబడింది! ఇది గేమ్‌కు చాలా ఆసక్తికరమైన ట్విస్ట్‌ని జోడిస్తుంది, మనం ప్రస్తుతానికి ఒరిజినల్ రూల్స్ కు కట్టుబడి ఉందాము.
14081408
1409-
మీరు స్క్వేర్‌ను `X` లేదా `O`తో మార్క్ చేసినప్పుడు, స్క్వేర్‌లో ఇప్పటికే `X` లేదా `O` వేల్యూ ఉందో లేదో తనిఖీ చేయడం లేదు. మీరు *ఎర్లీగా రిటర్న్ చేయడం* ద్వారా దీన్ని పరిష్కరించవచ్చు. స్క్వేర్‌లో ఇప్పటికే `X` లేదా `O` ఉందో లేదో మీరు తనిఖీ చేస్తారు. స్క్వేర్ ఇప్పటికే ఫిల్ అయి ఉంటే, మీరు ముందుగా `handleClick` ఫంక్షన్‌లో `return` అవుతారు--ఇది బోర్డ్ state ని అప్డేట్ చేయడానికి ప్రయత్నించే ముందు.
1409+
మీరు స్క్వేర్‌ను `X` లేదా `O` తో మార్క్ చేసినప్పుడు, స్క్వేర్‌లో ఇప్పటికే `X` లేదా `O` వేల్యూ ఉందో లేదో తనిఖీ చేయడం లేదు. మీరు *ఎర్లీగా రిటర్న్ చేయడం* ద్వారా దీన్ని పరిష్కరించవచ్చు. స్క్వేర్‌లో ఇప్పటికే `X` లేదా `O` ఉందో లేదో మీరు తనిఖీ చేస్తారు. స్క్వేర్ ఇప్పటికే ఫిల్ అయి ఉంటే, మీరు ముందుగా `handleClick` ఫంక్షన్‌లో `return` అవుతారు--ఇది బోర్డ్ state ని అప్డేట్ చేయడానికి ప్రయత్నించే ముందు.
14101410
14111411
```js {2,3,4}
14121412
function handleClick(i) {
@@ -1568,17 +1568,17 @@ function handleClick(i) {
15681568
}
15691569
```
15701570
1571-
ఆట ముగిసినప్పుడు ప్లేయర్స్కు తెలియజేయడానికి, మీరు "Winner: X" లేదా "Winner: O" వంటి టెక్స్ట్ ని డిస్ప్లే చేయవచ్చు. అలా చేయడానికి మీరు `Board` కాంపోనెంట్‌కి `status` సెక్షన్ ని జోడిస్తారు. గేమ్ ముగిసినట్లయితే స్టేటస్ విజేతను డిస్ప్లే చేస్తుంది మరియు గేమ్ కొనసాగుతున్నట్లయితే, నెక్స్ట్ ఏ ప్లేయర్ టర్న్ ఉందో మీరు డిస్ప్లే చేస్తారు:
1571+
ఆట ముగిసినప్పుడు ప్లేయర్స్కు తెలియజేయడానికి, మీరు "విజేత: X" లేదా "విజేత: O" వంటి టెక్స్ట్ ని డిస్ప్లే చేయవచ్చు. అలా చేయడానికి మీరు `Board` కాంపోనెంట్‌కి `status` సెక్షన్ ని జోడిస్తారు. గేమ్ ముగిసినట్లయితే స్టేటస్ విజేతను డిస్ప్లే చేస్తుంది మరియు గేమ్ కొనసాగుతున్నట్లయితే, నెక్స్ట్ ఏ ప్లేయర్ టర్న్ ఉందో మీరు డిస్ప్లే చేస్తారు:
15721572
15731573
```js {3-9,13}
15741574
export default function Board() {
15751575
// ...
15761576
const winner = calculateWinner(squares);
15771577
let status;
15781578
if (winner) {
1579-
status = "Winner: " + winner;
1579+
status = "విజేత: " + winner;
15801580
} else {
1581-
status = "Next player: " + (xIsNext ? "X" : "O");
1581+
status = "నెక్స్ట్ ప్లేయర్: " + (xIsNext ? "X" : "O");
15821582
}
15831583

15841584
return (
@@ -1626,9 +1626,9 @@ export default function Board() {
16261626
const winner = calculateWinner(squares);
16271627
let status;
16281628
if (winner) {
1629-
status = 'Winner: ' + winner;
1629+
status = "విజేత: " + winner;
16301630
} else {
1631-
status = 'Next player: ' + (xIsNext ? 'X' : 'O');
1631+
status = "నెక్స్ట్ ప్లేయర్: " + (xIsNext ? "X" : "O");
16321632
}
16331633

16341634
return (
@@ -1851,7 +1851,7 @@ function Board({ xIsNext, squares, onPlay }) {
18511851
18521852
కాల్ చేసినప్పుడు `handlePlay` ఏమి చేయాలి? Board అప్‌డేట్ చేయబడిన array తో `setSquares` ని కాల్ చేస్తుంది అని గుర్తుంచుకోండి, ఇప్పుడు అది అప్డేట్ చేయబడిన `squares` array ని `onPlay` కి పాస్ చేస్తుంది.
18531853
1854-
రీ-రెండర్‌ ని ట్రిగ్గర్ చేయడానికి `handlePlay` ఫంక్షన్‌ `Game`యొక్క state ని అప్‌డేట్ చేయాలి, కానీ మీరు ఇకపై కాల్ చేయగల `setSquares` ఫంక్షన్‌ను కలిగి లేరు--మీరు ఇప్పుడు ఈ ఇన్ఫర్మేషన్ని స్టోర్ చేయడానికి `history` state వేరియబుల్ ని ఉపయోగిస్తున్నారు. మీరు అప్డేట్ చేయబడిన `squares` array ని కొత్త చరిత్ర ఎంట్రీగా జోడించడం ద్వారా `history` ని అప్డేట్ చేయాలి. Board ఉపయోగించిన విధంగానే మీరు కూడా `xIsNext` ని టోగుల్ చేయాలనుకుంటున్నారు:
1854+
రీ-రెండర్‌ ని ట్రిగ్గర్ చేయడానికి `handlePlay` ఫంక్షన్‌ `Game` యొక్క state ని అప్‌డేట్ చేయాలి, కానీ మీరు ఇకపై కాల్ చేయగల `setSquares` ఫంక్షన్‌ను కలిగి లేరు--మీరు ఇప్పుడు ఈ ఇన్ఫర్మేషన్ని స్టోర్ చేయడానికి `history` state వేరియబుల్ ని ఉపయోగిస్తున్నారు. మీరు అప్డేట్ చేయబడిన `squares` array ని కొత్త చరిత్ర ఎంట్రీగా జోడించడం ద్వారా `history` ని అప్డేట్ చేయాలి. Board ఉపయోగించిన విధంగానే మీరు కూడా `xIsNext` ని టోగుల్ చేయాలనుకుంటున్నారు:
18551855
18561856
```js {4-5}
18571857
export default function Game() {
@@ -1900,9 +1900,9 @@ function Board({ xIsNext, squares, onPlay }) {
19001900
const winner = calculateWinner(squares);
19011901
let status;
19021902
if (winner) {
1903-
status = 'Winner: ' + winner;
1903+
status = "విజేత: " + winner;
19041904
} else {
1905-
status = 'Next player: ' + (xIsNext ? 'X' : 'O');
1905+
status = "నెక్స్ట్ ప్లేయర్: " + (xIsNext ? "X" : "O");
19061906
}
19071907

19081908
return (
@@ -2049,9 +2049,9 @@ export default function Game() {
20492049
const moves = history.map((squares, move) => {
20502050
let description;
20512051
if (move > 0) {
2052-
description = 'Go to move #' + move;
2052+
description = '#' + move + ' కదలికకు వెళ్లండి';
20532053
} else {
2054-
description = 'Go to game start';
2054+
description = 'ఆట ప్రారంభానికి వెళ్లండి';
20552055
}
20562056
return (
20572057
<li>
@@ -2111,9 +2111,9 @@ function Board({ xIsNext, squares, onPlay }) {
21112111
const winner = calculateWinner(squares);
21122112
let status;
21132113
if (winner) {
2114-
status = 'Winner: ' + winner;
2114+
status = "విజేత: " + winner;
21152115
} else {
2116-
status = 'Next player: ' + (xIsNext ? 'X' : 'O');
2116+
status = "నెక్స్ట్ ప్లేయర్: " + (xIsNext ? "X" : "O");
21172117
}
21182118

21192119
return (
@@ -2155,9 +2155,9 @@ export default function Game() {
21552155
const moves = history.map((squares, move) => {
21562156
let description;
21572157
if (move > 0) {
2158-
description = 'Go to move #' + move;
2158+
description = '#' + move + ' కదలికకు వెళ్లండి';
21592159
} else {
2160-
description = 'Go to game start';
2160+
description = 'ఆట ప్రారంభానికి వెళ్లండి';
21612161
}
21622162
return (
21632163
<li>
@@ -2339,9 +2339,9 @@ function Board({ xIsNext, squares, onPlay }) {
23392339
const winner = calculateWinner(squares);
23402340
let status;
23412341
if (winner) {
2342-
status = 'Winner: ' + winner;
2342+
status = "విజేత: " + winner;
23432343
} else {
2344-
status = 'Next player: ' + (xIsNext ? 'X' : 'O');
2344+
status = "నెక్స్ట్ ప్లేయర్: " + (xIsNext ? "X" : "O");
23452345
}
23462346

23472347
return (
@@ -2383,9 +2383,9 @@ export default function Game() {
23832383
const moves = history.map((squares, move) => {
23842384
let description;
23852385
if (move > 0) {
2386-
description = 'Go to move #' + move;
2386+
description = '#' + move + ' కదలికకు వెళ్లండి';
23872387
} else {
2388-
description = 'Go to game start';
2388+
description = 'ఆట ప్రారంభానికి వెళ్లండి';
23892389
}
23902390
return (
23912391
<li key={move}>
@@ -2560,9 +2560,9 @@ function Board({ xIsNext, squares, onPlay }) {
25602560
const winner = calculateWinner(squares);
25612561
let status;
25622562
if (winner) {
2563-
status = 'Winner: ' + winner;
2563+
status = "విజేత: " + winner;
25642564
} else {
2565-
status = 'Next player: ' + (xIsNext ? 'X' : 'O');
2565+
status = "నెక్స్ట్ ప్లేయర్: " + (xIsNext ? "X" : "O");
25662566
}
25672567

25682568
return (
@@ -2608,9 +2608,9 @@ export default function Game() {
26082608
const moves = history.map((squares, move) => {
26092609
let description;
26102610
if (move > 0) {
2611-
description = 'Go to move #' + move;
2611+
description = '#' + move + ' కదలికకు వెళ్లండి';
26122612
} else {
2613-
description = 'Go to game start';
2613+
description = 'ఆట ప్రారంభానికి వెళ్లండి';
26142614
}
26152615
return (
26162616
<li key={move}>
@@ -2770,9 +2770,9 @@ function Board({ xIsNext, squares, onPlay }) {
27702770
const winner = calculateWinner(squares);
27712771
let status;
27722772
if (winner) {
2773-
status = 'Winner: ' + winner;
2773+
status = "విజేత: " + winner;
27742774
} else {
2775-
status = 'Next player: ' + (xIsNext ? 'X' : 'O');
2775+
status = "నెక్స్ట్ ప్లేయర్: " + (xIsNext ? "X" : "O");
27762776
}
27772777

27782778
return (
@@ -2816,9 +2816,9 @@ export default function Game() {
28162816
const moves = history.map((squares, move) => {
28172817
let description;
28182818
if (move > 0) {
2819-
description = 'Go to move #' + move;
2819+
description = '#' + move + ' కదలికకు వెళ్లండి';
28202820
} else {
2821-
description = 'Go to game start';
2821+
description = 'ఆట ప్రారంభానికి వెళ్లండి';
28222822
}
28232823
return (
28242824
<li key={move}>

0 commit comments

Comments
 (0)