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/adding-interactivity.md
+31-31Lines changed: 31 additions & 31 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -4,27 +4,27 @@ title: إضافة التفاعلية
4
4
5
5
<Intro>
6
6
7
-
بعض الاشياء على الشاشة يتم تحديثها للاستجابة لمدخلات (inputs) المستخدم. على سبيل المثال، النقر على معرض صور يغير الصورة المعروضة. فى React، البيانات التي تتغير على مر الزمن تسمى *حالة (state)*. يمكنك إضافة state الى اي مكون (component)، وتحديثها على حسب احتياجك. فى هذا الفصل، سوف تتعلم كيفية كتابة مكونات يمكنها أن تتعامل مع تفاعلات المستخدم، وتحديث حالتها (state)، وعرض مخرجات (outputs) مختلفة على مر الزمن.
7
+
بعض الاشياء على الشاشة يتم تحديثها للاستجابة لمدخلات المستخدم. على سبيل المثال، النقر على معرض صور يغير الصورة المعروضة. فى React، البيانات التي تتغير على مر الزمن تسمى *حالة (state)*. يمكنك إضافة حالة إلى أي مكون، وتحديثها على حسب احتياجك. فى هذا الفصل، سوف تتعلم كيفية كتابة مكونات يمكنها أن تتعامل مع تفاعلات المستخدم، وتحديث حالتها، وعرض مخرجات مختلفة باختلاف المدخلات.
8
8
9
9
</Intro>
10
10
11
11
<YouWillLearnisChapter={true}>
12
12
13
-
*[كيفية التعامل مع الأحداث (events) التي يبدأها المستخدم](/learn/responding-to-events)
14
-
*[كيفية جعل المكونات تتذكر المعلومات باستخدام الحالة (state)](/learn/state-a-components-memory)
13
+
*[كيفية التعامل مع الأحداث التي يبدأها المستخدم](/learn/responding-to-events)
14
+
*[كيفية جعل المكونات تتذكر المعلومات باستخدام الحالة](/learn/state-a-components-memory)
15
15
*[كيفية تحديث واجهة المستخدم في React في مرحلتين](/learn/render-and-commit)
16
-
*[لماذا لا تتحدث الحالة (state) مباشرة بعد تغييرها](/learn/state-as-a-snapshot)
17
-
*[كيفية صف تحديثات عديدة للحالة (state)](/learn/queueing-a-series-of-state-updates)
18
-
*[كيفية تحديث كائن (object) فى حالة (state)](/learn/updating-objects-in-state)
19
-
*[كيفية تحديث مصفوفة (array) فى حالة (state)](/learn/updating-arrays-in-state)
16
+
*[لماذا لا تتحدث الحالة مباشرة بعد تغييرها](/learn/state-as-a-snapshot)
17
+
*[كيفية جدولة تحديثات عديدة للحالة](/learn/queueing-a-series-of-state-updates)
18
+
*[كيفية تحديث كائن فى حالة](/learn/updating-objects-in-state)
19
+
*[كيفية تحديث مصفوفة فى حالة](/learn/updating-arrays-in-state)
20
20
21
21
</YouWillLearn>
22
22
23
23
## الاستجابة الى الأحداث {/*responding-to-events*/}
24
24
25
-
تتيح لك React إضافة *معالجي الأحداث (event handlers)* إلى JSX الخاص بك. معالجة الأحداث (event handlers) هم الدوال (functions) الخاصة التي سيتم تنشيطها استجابةً لتفاعلات المستخدم مثل النقر، والتحويم، والتركيز على مدخلات النموذج (form)، وما إلى ذلك.
25
+
تتيح لك React إضافة *معالجي الأحداث (event handlers)* إلى JSX الخاص بك. معالجة الأحداث هم الدوال الخاصة التي سيتم تنشيطها استجابةً لتفاعلات المستخدم مثل النقر، والتمرير، والتركيز على مدخلات النموذج، وما إلى ذلك.
26
26
27
-
المكونات المدمجة (built-in) مثل `<button>` تدعم الأحداث (events) المتاحة فى المتصفح (browser) مثل `onClick`. ومع ذلك، يمكنك أيضًا إنشاء مكوناتك الخاصة وتعطي خصائص معالجة الأحداث (event handler props) الخاصة بها اى اسماء مخصصة للتطبيق على حسب رغبتك.
27
+
المكونات المدمجة مثل `<button>` تدعم الأحداث المتاحة فى المتصفح مثل `onClick`. ومع ذلك، يمكنك أيضًا إنشاء مكوناتك الخاصة وتعطي خصائص معالجة الأحداث الخاصة بها أى اسماء مخصصة للتطبيق على حسب رغبتك.
غالبًا تحتاج المكونات إلى تغيير محتوى الشاشة نتيجةً لتفاعل المستخدم. الكتابة فى نموذج (form) يجب أن يحدث حقل الإدخال، النقر على "التالي" على دائرة الصور يجب ان يغير الصورة المعروضة، الضغط على "شراء" يضع المنتج فى سلة المشتريات. المكونات تحتاج أن تتذكر اشياء: القيمة الحالية لحقل الإدخال، الصورة الحالية، سلة المشتريات. فى React، هذا النوع من الذاكرة الخاصة بالمكون يسمى "حالة (state)"
77
+
غالبًا تحتاج المكونات إلى تغيير محتوى الشاشة نتيجةً لتفاعل المستخدم. مثلا، الكتابة فى نموذج يجب أن يحدث حقل الإدخال، والنقر على "التالي" على دائرة الصور يجب ان يغير الصورة المعروضة، والضغط على "شراء" يضع المنتج فى سلة المشتريات، وهكذا. المكونات تحتاج أن تتذكر اشياء مثل: القيمة الحالية لحقل الإدخال، الصورة الحالية، سلة المشتريات. فى React، هذا النوع من الذاكرة الخاصة بالمكون يسمى "حالة"
78
78
79
-
يمكنك إضافة حالة (state) الى مكون عن طريق استخدام خطاف (hook) [`useState`](/reference/react/useState). *الخطاطيف (hooks)* هي دوال خاصة تتيح لك أن تستخدم مميزات React (الحالة واحدة من هذه المميزات). خطاف `useState`يتح لك أن تعرف متغير حالة (state variable). هذا الخطاف يأخذ الحالة بدائية (initial state) ويرجع قيمتين: الحالة الحالية، ودالة معين الحالة (state setter) التي تتيح لك أن تغير الحالة.
79
+
يمكنك إضافة حالة إلى مكون عن طريق استخدام خطاف [`useState`](/reference/react/useState). *الخطاطيف (hooks)* هي دوال خاصة تتيح لك أن تستخدم مميزات React (الحالة واحدة من هذه المميزات). خطاف `useState`يتيح لك أن تعرف متغير حالة. هذا الخطاف يأخذ الحالة المبدأية ويرجع قيمتين: الحالة الحالية، ودالة معين الحالة التي تتيح لك أن تغير الحالة.
80
80
81
81
```js
82
82
const [index, setIndex] =useState(0);
@@ -233,15 +233,15 @@ button {
233
233
234
234
</LearnMore>
235
235
236
-
## التصيير وإيداع {/*render-and-commit*/}
236
+
## التصيير والإيداع {/*render-and-commit*/}
237
237
238
-
قبل أن يتم عرض مكوناتك على الشاشة، يجب أن تُصير بواسطة React. سيساعدك فهم الخطوات في هذه العملية على التفكير في كيفية تنفيذ التعليمات البرمجية الخاصة بك وشرح سلوكها.
238
+
قبل أن يتم عرض مكوناتك على الشاشة، يجب أن تُصير بواسطة React. سيساعدك فهم الخطوات في هذه العملية على التفكير في كيفية تنفيذ التعليمات البرمجية الخاصة بك وشرح سلوكها.
239
239
240
-
تخيل مكوناتك هي طهاة فى مطبخ، يقومون بتجميع وجبات شهية من مكونات. فى هذا السيناريو، React هى النادل الذي ياخذ الطلبات من العملاء ويقوم باحضارها لهم. هذا العميلة من طلب وعرض وجهة المستخدم تطلب ثلاث خطوات:
240
+
تخيل أن مكوناتك هي طهاة فى مطبخ، يقومون بتجميع وجبات شهية من مكونات. فى هذا السيناريو، React هى النادل الذي ياخذ الطلبات من العملاء ويقوم باحضارها لهم. هذا العميلة من طلب وعرض واجهة المستخدم تطلب ثلاث خطوات:
241
241
242
242
1.**تحفيز** المُصير (توصيل طلب العشاء الى المطبخ)
243
243
2.**تصيير** المكون (تحضير الطلب فى المطبخ)
244
-
3.**إيداع**الى الـ DOM (وضع الطلب على الطاولة)
244
+
3.**إيداع**إلى الـ DOM (وضع الطلب على الطاولة)
245
245
246
246
<IllustrationBlocksequential>
247
247
<Illustrationcaption="تحفيز"alt="React كما لو كانت نادل فى مطعم يقوم باخذ الطلبات من المستخدمين ويقوم باحضارها الى مطبخ المكونات"src="/images/docs/illustrations/i_render-and-commit1.png" />
@@ -255,17 +255,17 @@ button {
255
255
256
256
</LearnMore>
257
257
258
-
## الحالة كأنها لقطة {/*state-as-a-snapshot*/}
258
+
## الحالة كأنها نسخة {/*state-as-a-snapshot*/}
259
259
260
-
على عكس متغيرات JavaScript العادية، تتصرف حالة React مثل لقطة. لا يؤدي تعيينها إلى تغيير متغير الحالة الذي لديك بالفعل، ولكنه يؤدي بدلاً من ذلك إلى إعادة تصيير. قد يكون هذا مفاجئًا في البداية!
260
+
على عكس متغيرات JavaScript العادية، تتصرف حالة React مثل نسخة. لا يؤدي تعيينها إلى تغيير متغير الحالة الذي لديك بالفعل، ولكنه يؤدي بدلاً من ذلك إلى إعادة تصيير. قد يكون هذا مفاجئًا في البداية!
261
261
262
262
```js
263
263
console.log(count); // 0
264
264
setCount(count +1); // Request a re-render with 1
265
265
console.log(count); // Still 0!
266
266
```
267
267
268
-
يساعدك هذا السلوك على تجنب الثغرات. هنا تطبيق دردشة صغير. حاول تخمين ما يحدث إذا ضغطت على "إرسال" أولاً *ثم* غير المستلم إلى بوب.من سيظهر اسمه في "التنبيه" بعد خمس ثوانٍ؟
268
+
يساعدك هذا السلوك على تجنب الثغرات. هنا تطبيق دردشة صغير. حاول تخمين ما يحدث إذا ضغطت على "إرسال" أولاً *ثم* غير المستلم إلى بوب.من سيظهر اسمه في "التنبيه" بعد خمس ثوانٍ؟
[الحالة كأنها لقطة](/learn/state-as-a-snapshot) يشرح لماذا يحدث ذلك. تعيين الحالة يطلب اعادة تصيير جديدة، لكن لا يغير القيمة فى الكود الذى يعمل بالفعل. لذلك تظل النتيجة "1" بعد استدعاء "setScore(score + 1)".
356
+
[الحالة كأنها لقطة](/learn/state-as-a-snapshot) يشرح لماذا يحدث ذلك. تعيين الحالة يطلب إعادة تصيير جديدة، لكن لا يغير القيمة فى الكود الذى يعمل بالفعل. لذلك تظل النتيجة "1" بعد استدعاء "setScore(score + 1)".
يمكنك ان تصلح ذلك عن طريق تمرير *دالة تحديث* عند تعين الحالة. لاحظ انه عند تغير `setScore(score + 1)` بـ `setScore(s => s + 1)` يصلح زرار الـ "+3". هذا يمنحك ان تصف اكثر من تحديث حالة.
368
+
يمكنك ان تصلح ذلك عن طريق تمرير *دالة تحديث* عند تعين الحالة. لاحظ انه عند تغير `setScore(score + 1)` بـ `setScore(s => s + 1)` يصلح زرار الـ "+3". هذا يمنحك أن تجدول أكثر من تحديث حالة.
اقرأ **[صف سلسلة من تحديثات الحالة](/learn/queueing-a-series-of-state-updates)** لتتعلم كيفية صف لسلسلة من تحديثات الحالة.
404
+
اقرأ **[جدولة سلسلة من تحديثات الحالة](/learn/queueing-a-series-of-state-updates)** لتتعلم كيفية جدولة سلسلة من تحديثات الحالة.
405
405
406
406
</LearnMore>
407
407
408
408
## تحديث الكائنات فى الحالة {/*updating-objects-in-state*/}
409
409
410
-
يمكن ان تحتوى الحالة على اى نوع من قيم JavaScript، وتضمن الكائنات (objects). لكن يجب ان لا تغير الكائنات (objects) والمصفوفات (arrays) التى تحتوى عليها حالة React مباشراً. بدلاً من ذلك عندما تحدث كائن (object) او مصفوفة (array)، تحتاج ان تنشأ نسخة جديدة (او تقوم بعمل نسخة من نسخة موجودة)، بعد ذلك حدث الحالة استخدام النسخة.
410
+
يمكن ان تحتوى الحالة على أى نوع من قيم JavaScript، يشمل ذلك الكائنات. لكن يجب أن لا تغير الكائنات والمصفوفات التى تحتوى عليها حالة React مباشراً. بدلاً من ذلك عندما تحدث كائن أو مصفوفة، تحتاج أن تنشئ نسخة جديدة (أو تقوم بعمل نسخة من نسخة موجودة)، بعد ذلك حدث الحالة باستخدام النسخة.
411
411
412
-
فى الغالب، سوف تستخدم تركيب النحوى للبسط `...` لعمل نسخة من الكائنات والمصفوفات التى تريد ان تغيرها. على سبيل المثال، تحديث كائن متداخل يمكن أن تكون مثل ذلك:
412
+
فى الغالب، سوف تستخدم معامل البسط (spread operator)`...` لعمل نسخة من الكائنات والمصفوفات التى تريد أن تغيرها. على سبيل المثال، تحديث كائن متداخل يمكن أن تكون مثل ذلك:
413
413
414
414
<Sandpack>
415
415
@@ -466,7 +466,7 @@ export default function Form() {
## تحديث المصفوفات فى الحالة {/*updating-arrays-in-state*/}
640
640
641
-
المصفوفات هي نوع آخر من كائنات JavaScript القابلة للتغيير والتي يمكنك تخزينها في الحالة ويجب التعامل معها على أنها للقراءة فقط. تمامًا كما هو الحال مع الكائنات، عندما تريد تحديث مصفوفة مخزنة في الحالة، فأنت بحاجة إلى إنشاء مصفوفة جديدة (أو إنشاء نسخة من واحدة موجودة)، ثم تعيين الحالة لاستخدام المصفوفة الجديدة:
641
+
المصفوفات هي نوع آخر من كائنات JavaScript القابلة للتغيير والتي يمكنك تخزينها في الحالة ويجب التعامل معها على أنها للقراءة فقط. تمامًا كما هو الحال مع الكائنات، عندما تريد تحديث مصفوفة مخزنة في الحالة، فأنت بحاجة إلى إنشاء مصفوفة جديدة (أو إنشاء نسخة من واحدة موجودة)، ثم تعيين الحالة لاستخدام المصفوفة الجديدة:
642
642
643
643
<Sandpack>
644
644
@@ -705,7 +705,7 @@ function ItemList({ artworks, onToggle }) {
705
705
706
706
</Sandpack>
707
707
708
-
لو نسخ المصفوفات فى الكود اصبح ممل، يمكنك استخدام مكتبة مثل [Immer](https://github.com/immerjs/use-immer) لتقليل الكود المتكرر:
708
+
لو وجدت نسخ المصفوفات فى الكود مملًا، يمكنك استخدام مكتبة مثل [Immer](https://github.com/immerjs/use-immer) لتقليل الكود المتكرر:
709
709
710
710
<Sandpack>
711
711
@@ -798,4 +798,4 @@ function ItemList({ artworks, onToggle }) {
798
798
799
799
إذهب الى [الإستجابة الى الاحداث](/learn/responding-to-events) لتقرأ هذا الفصل صفحة بصفحة!
800
800
801
-
او، اذا كنت تغير هذه المواضيع بالفعل، لماذا لا تقرأ عن [التحكم فى الحالة](/learn/managing-state)؟
801
+
أو، إذا كنت تفهم هذه المواضيع بالفعل، لماذا لا تقرأ عن [التحكم فى الحالة](/learn/managing-state)؟
0 commit comments