You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: src/content/learn/conditional-rendering.md
+21-23Lines changed: 21 additions & 23 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -3,9 +3,10 @@ title: رندرکردن شرطی
3
3
---
4
4
5
5
<Intro>
6
+
6
7
<divdir="rtl">
7
8
8
-
کامپوننتهای شما معمولا بسته به شرایط مختلف نیاز به نمایش چیزهای مختلفی دارند. در ریاکت، میتوانید JSX را با سینتکس جاوااسکریپت با استفاده از دستوراتی مانند `if`، `&&`،و`? :` به صورت شرطی رندر کنید.
9
+
کامپوننتهای شما معمولا بسته به شرایط مختلف نیاز به نمایش چیزهای مختلفی دارند. در ریاکت، میتوانید JSX را با سینتکس جاوااسکریپت با استفاده از دستوراتی مانند `if`، `&&`، و`? :` به صورت شرطی رندر کنید.
9
10
10
11
</div>
11
12
</Intro>
@@ -14,7 +15,7 @@ title: رندرکردن شرطی
14
15
<YouWillLearn>
15
16
16
17
* نحوه برگرداندن JSX های مختلف بسته به یک شرط
17
-
* نحوه گنجاندن یا حذف مشروط یک قطعه از JSX
18
+
* نحوه گنجاندن یا حذف کردن شرطی یک قطعه از JSX
18
19
* میانبرهای سینتکسی شرطی رایج که در کدهای ریاکت با آنها مواجه خواهید شد
19
20
20
21
</YouWillLearn>
@@ -64,7 +65,7 @@ export default function PackingList() {
64
65
65
66
توجه داشته باشید که برای برخی از کامپوننتهای props ،`isPacked` آن ها به جای true ،false داده شده است. شما میخواهید اگر `isPacked={true}` باشد، یک علامت (✔) به موارد بستهبندی شده اضافه کنید.
66
67
67
-
می توانید این را به عنوان یک عبارت [`if`/`else` statement](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/if...else) بنویسید:
68
+
می توانید این را به عنوان یک عبارت <span dir="ltr">[`if`/`else` statement](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/if...else)</span> بنویسید:
اگرچه این تکرار مضر نیست، اما میتواند نگهداری کد شما را سختتر کند. اگر بخواهید `className` را تغییر دهید چه؟ شما باید این کار را در دو مکان از کد خود انجام دهید! در چنین شرایطی، میتوانید به صورت شرطی، کمی JSX اضافه کنید تا کدتان بیشتر [DRY](https://en.wikipedia.org/wiki/Don%27t_repeat_yourself) شود.
221
+
اگرچه این تکرار مضر نیست، اما میتواند نگهداری کد شما را سختتر کند. اگر بخواهید `className` را تغییر دهید چه؟ شما باید این کار را در دو جا از کد خود انجام دهید! در چنین شرایطی، میتوانید به صورت شرطی، کمی JSX اضافه کنید تا کدتان بیشتر [DRY](https://en.wikipedia.org/wiki/Don%27t_repeat_yourself) شود.
221
222
222
223
</div>
223
224
<div dir="rtl">
@@ -252,23 +253,23 @@ return (
252
253
</li>
253
254
);
254
255
```
256
+
255
257
<div dir="rtl">
256
258
257
-
شما می توانید آن را به صورت *"اگر `isPacked` (`?`)درست است، سپس `name + ' ✔'` را رندر کنید، در غیر این صورت (`:`) `name` را اجرا کنید "* بخوانید.
259
+
شما می توانید آن را به صورت *"اگر `isPacked` درست است، سپس (`?`) `name + ' ✔'` را رندر کنید، در غیر این صورت (`:`) `name` را اجرا کنید "* بخوانید.
258
260
259
261
</div>
260
-
<DeepDive>
261
262
262
-
<div dir="rtl">
263
+
<DeepDive>
263
264
264
265
#### آیا این دو مثال کاملاً معادل هستند؟ {/*are-these-two-examples-fully-equivalent*/}
265
266
266
-
</div>
267
267
<div dir="rtl">
268
268
269
-
اگر از یک پسزمینه برنامهنویسی شیگرا میآیید، ممکن است فرض کنید که دو مثال بالا به طور ظاهری متفاوت هستند، زیرا یکی از آنها ممکن است دو "نمونه" متفاوت از `<li>` ایجاد کند. اما المنتهای JSX "نمونه" نیستند زیرا هیچ حالت داخلی ندارند و نودهای واقعی DOM نیستند. آنها توصیف های سبک وزن هستند، مانند blueprintها. بنابراین، این دو مثال، در واقع کاملاً معادل *هستند*. [نگهداری و بازنشانی وضعیت](/learn/preserving-and-resetting-state) به تفصیل درباره اینکه چگونه این کار میکند توضیح میدهد.
269
+
اگر از یک پسزمینه برنامهنویسی شیگرا میآیید، ممکن است فرض کنید که دو مثال بالا به طور ظاهری متفاوت هستند، زیرا یکی از آنها ممکن است دو "نمونه" متفاوت از `<li>` ایجاد کند. اما المنتهای JSX "نمونه" نیستند زیرا هیچ حالت داخلی ندارند و نودهای واقعی DOM نیستند. آنها توصیف های سبک وزن هستند، مانند blueprintها. بنابراین، این دو مثال، در واقع کاملاً معادل *هستند*. [نگهداری و بازنشانی وضعیت](/learn/preserving-and-resetting-state) به تفصیل درباره اینکه چگونه این، کار میکند توضیح میدهد.
270
270
271
271
</div>
272
+
272
273
</DeepDive>
273
274
274
275
<div dir="rtl">
@@ -330,7 +331,7 @@ export default function PackingList() {
330
331
</div>
331
332
<divdir="rtl">
332
333
333
-
یکی دیگر از میانبرهای رایجی که با آن مواجه خواهید شد، [عملگر منطقی جاوا اسکریپت AND (`&&`) است.](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Logical_AND#:~:text=The%20logical%20AND%20(%20%26%26%20)%20operator,it%20returns%20a%20Boolean%20value.) در داخل کامپوننت های ریاکت، اغلب زمانی میآید که می خواهید مقداری JSX را وقتی شرطی درست است، رندر کنید، **یا هیچ چیزی را رندر نکنید.** با `&&`، فقط در صورتی می توانید علامت را به صورت شرطی ارائه دهید که `true` ،`isPacked` باشد:
334
+
یکی دیگر از میانبرهای رایجی که با آن مواجه خواهید شد، [عملگر منطقی AND (`&&`) جاوا اسکریپت است.](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Logical_AND#:~:text=The%20logical%20AND%20(%20%26%26%20)%20operator,it%20returns%20a%20Boolean%20value.) در داخل کامپوننت های ریاکت، اغلب زمانی میآید که می خواهید مقداری JSX را وقتی شرطی درست است، رندر کنید، **یا هیچ چیزی را رندر نکنید.** با `&&`، فقط در صورتی می توانید علامت را به صورت شرطی ارائه دهید که `true` ،`isPacked` باشد:
334
335
335
336
</div>
336
337
@@ -345,7 +346,7 @@ return (
345
346
346
347
می توانید این را به صورت *"اگر `isPacked`، آنگاه (`&&`) علامت چکمارک را ارائه دهید، در غیر این صورت، هیچ چیزی را رندر نکنید"*، بخوانید.
347
348
348
-
اینجا در عمل است:
349
+
اینجا در عمل داریم:
349
350
350
351
</div>
351
352
@@ -386,7 +387,7 @@ export default function PackingList() {
386
387
</Sandpack>
387
388
<div dir="rtl">
388
389
389
-
یک [JavaScript && expression](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Logical_AND) اگر سمت چپ (شرط ما) `true` است، مقدار سمت راست خود (در مورد ما، علامت چکمارک) را برمی گرداند. اما اگر شرط `false` باشد، کل عبارت `false` می شود. ریاکت 'false' را به عنوان "سوراخ" در درخت JSX، درست مانند `null` یا `undefined` در نظر میگیرد و هیچ چیزی را در جای آن ارائه نمیکند.
390
+
یک [عبارت && جاوااسکریپت](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Logical_AND) اگر سمت چپ (شرط ما) `true` است، مقدار سمت راست خود (در مورد ما، علامت چکمارک) را برمی گرداند. اما اگر شرط `false` باشد، کل عبارت `false` می شود. ریاکت `false` را به عنوان "سوراخ" در درخت JSX، درست مانند `null` یا `undefined` در نظر میگیرد و هیچ چیزی را در جای آن ارائه نمیکند.
390
391
391
392
</div>
392
393
@@ -549,13 +550,13 @@ export default function PackingList() {
549
550
550
551
</Recap>
551
552
552
-
553
-
554
553
<Challenges>
555
-
<div dir="rtl">
554
+
556
555
557
556
#### نمادی برای مواردی که کاملنشده با `? :` نشان بده {/*show-an-icon-for-incomplete-items-with--*/}
558
557
558
+
<div dir="rtl">
559
+
559
560
اگر `true` ،`isPacked` نباشد، از عملگر شرطی (`cond ? a : b`) برای رندرکردن ❌ استفاده کن.
560
561
561
562
</div>
@@ -635,10 +636,11 @@ export default function PackingList() {
635
636
</Sandpack>
636
637
637
638
</Solution>
638
-
<div dir="rtl">
639
639
640
640
#### اهمیت مورد را با `&&` نشان بده {/*show-the-item-importance-with-*/}
641
641
642
+
<div dir="rtl">
643
+
642
644
در این مثال، هر `Item` یک `importance` عددی دریافت میکند. از عملگر `&&` برای نمایش "_(Importance: X)_" به صورت italics استفاده کنید، اما فقط برای مواردی که اهمیت غیر صفر دارند. لیست اقلام شما باید به این شکل باشد:
643
645
644
646
* Space suit _(Importance: 9)_
@@ -735,22 +737,18 @@ export default function PackingList() {
735
737
736
738
<div dir="rtl">
737
739
738
-
<<<<<<< HEAD
739
-
توجه داشته باشید که باید به جای `importance > 0 && ...` بنویسید `importance && ...` تا اگر `importance` برابر با `0` باشد، `0` به عنوان نتیجه رندر نشود!
740
+
توجه داشته باشید که باید به جای `importance && ...` بنویسید `importance > 0 && ...` تا اگر `importance` برابر با `0` باشد، `0` به عنوان نتیجه رندر نشود!
740
741
741
742
در این راه حل، از دو شرط مجزا برای درج فاصله بین نام و label اهمیت استفاده می شود. همچنین، میتوانید از یک fragment با یک فاصله در ابتدا استفاده کنید: `importance > 0 && <> <i>...</i></>` یا بلافاصله یک فاصله در داخل `<i>` اضافه کنید: `importance > 0 && <i> ...</i>`.
742
743
743
744
</div>
744
-
=======
745
-
In this solution, two separate conditions are used to insert a space between the name and the importance label. Alternatively, you could use a fragment with a leading space: `importance > 0 && <> <i>...</i></>` or add a space immediately inside the `<i>`: `importance > 0 && <i> ...</i>`.
746
-
>>>>>>> 819e4e26cc44adbb78921c0d540b1fad539ebfca
747
745
748
746
</Solution>
749
747
750
-
<div dir="rtl">
751
-
752
748
#### ریفکتور یک سری از `? :` به `if` و متغیرها {/*refactor-a-series-of---to-if-and-variables*/}
753
749
750
+
<div dir="rtl">
751
+
754
752
این کامپوننت `Drink` از یک سری شرطهای `? :` برای نشان دادن اطلاعات مختلف بسته به اینکه prop `name` برابر با `"tea"` باشد یا `"coffee"` ، استفاده میکند. مشکل این است که اطلاعات مربوط به هر نوشیدنی در شرطهای مختلف پخش می شود. این کد را برای استفاده از یک عبارت `if` به جای سه شرط `? :` ریفکتور کنید
0 commit comments