Skip to content

Commit 807f71b

Browse files
authored
adjustments
1 parent e7a4aeb commit 807f71b

File tree

1 file changed

+31
-31
lines changed

1 file changed

+31
-31
lines changed

src/content/learn/adding-interactivity.md

Lines changed: 31 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -4,27 +4,27 @@ title: إضافة التفاعلية
44

55
<Intro>
66

7-
بعض الاشياء على الشاشة يتم تحديثها للاستجابة لمدخلات (inputs) المستخدم. على سبيل المثال، النقر على معرض صور يغير الصورة المعروضة. فى React، البيانات التي تتغير على مر الزمن تسمى *حالة (state)*. يمكنك إضافة state الى اي مكون (component)، وتحديثها على حسب احتياجك. فى هذا الفصل، سوف تتعلم كيفية كتابة مكونات يمكنها أن تتعامل مع تفاعلات المستخدم، وتحديث حالتها (state)، وعرض مخرجات (outputs) مختلفة على مر الزمن.
7+
بعض الاشياء على الشاشة يتم تحديثها للاستجابة لمدخلات المستخدم. على سبيل المثال، النقر على معرض صور يغير الصورة المعروضة. فى React، البيانات التي تتغير على مر الزمن تسمى *حالة (state)*. يمكنك إضافة حالة إلى أي مكون، وتحديثها على حسب احتياجك. فى هذا الفصل، سوف تتعلم كيفية كتابة مكونات يمكنها أن تتعامل مع تفاعلات المستخدم، وتحديث حالتها، وعرض مخرجات مختلفة باختلاف المدخلات.
88

99
</Intro>
1010

1111
<YouWillLearn isChapter={true}>
1212

13-
* [كيفية التعامل مع الأحداث (events) التي يبدأها المستخدم](/learn/responding-to-events)
14-
* [كيفية جعل المكونات تتذكر المعلومات باستخدام الحالة (state)](/learn/state-a-components-memory)
13+
* [كيفية التعامل مع الأحداث التي يبدأها المستخدم](/learn/responding-to-events)
14+
* [كيفية جعل المكونات تتذكر المعلومات باستخدام الحالة](/learn/state-a-components-memory)
1515
* [كيفية تحديث واجهة المستخدم في 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)
2020

2121
</YouWillLearn>
2222

2323
## الاستجابة الى الأحداث {/*responding-to-events*/}
2424

25-
تتيح لك React إضافة *معالجي الأحداث (event handlers)* إلى JSX الخاص بك. معالجة الأحداث (event handlers) هم الدوال (functions) الخاصة التي سيتم تنشيطها استجابةً لتفاعلات المستخدم مثل النقر، والتحويم، والتركيز على مدخلات النموذج (form)، وما إلى ذلك.
25+
تتيح لك React إضافة *معالجي الأحداث (event handlers)* إلى JSX الخاص بك. معالجة الأحداث هم الدوال الخاصة التي سيتم تنشيطها استجابةً لتفاعلات المستخدم مثل النقر، والتمرير، والتركيز على مدخلات النموذج، وما إلى ذلك.
2626

27-
المكونات المدمجة (built-in) مثل `<button>` تدعم الأحداث (events) المتاحة فى المتصفح (browser) مثل `onClick`. ومع ذلك، يمكنك أيضًا إنشاء مكوناتك الخاصة وتعطي خصائص معالجة الأحداث (event handler props) الخاصة بها اى اسماء مخصصة للتطبيق على حسب رغبتك.
27+
المكونات المدمجة مثل `<button>` تدعم الأحداث المتاحة فى المتصفح مثل `onClick`. ومع ذلك، يمكنك أيضًا إنشاء مكوناتك الخاصة وتعطي خصائص معالجة الأحداث الخاصة بها أى اسماء مخصصة للتطبيق على حسب رغبتك.
2828

2929
<Sandpack>
3030

@@ -68,15 +68,15 @@ button { margin-right: 10px; }
6868

6969
<LearnMore path="/learn/responding-to-events">
7070

71-
اقرأ **[الاستجابة إلى الأحداث](/learn/responding-to-events)** للتعلم كيفية اضافة معالجى الأحداث (event handlers).
71+
اقرأ **[الاستجابة إلى الأحداث](/learn/responding-to-events)** لتعلم كيفية إضافة معالجى الأحداث.
7272

7373
</LearnMore>
7474

7575
## الحالة: ذاكرة المكون {/*state-a-components-memory*/}
7676

77-
غالبًا تحتاج المكونات إلى تغيير محتوى الشاشة نتيجةً لتفاعل المستخدم. الكتابة فى نموذج (form) يجب أن يحدث حقل الإدخال، النقر على "التالي" على دائرة الصور يجب ان يغير الصورة المعروضة، الضغط على "شراء" يضع المنتج فى سلة المشتريات. المكونات تحتاج أن تتذكر اشياء: القيمة الحالية لحقل الإدخال، الصورة الحالية، سلة المشتريات. فى React، هذا النوع من الذاكرة الخاصة بالمكون يسمى "حالة (state)"
77+
غالبًا تحتاج المكونات إلى تغيير محتوى الشاشة نتيجةً لتفاعل المستخدم. مثلا، الكتابة فى نموذج يجب أن يحدث حقل الإدخال، والنقر على "التالي" على دائرة الصور يجب ان يغير الصورة المعروضة، والضغط على "شراء" يضع المنتج فى سلة المشتريات، وهكذا. المكونات تحتاج أن تتذكر اشياء مثل: القيمة الحالية لحقل الإدخال، الصورة الحالية، سلة المشتريات. فى React، هذا النوع من الذاكرة الخاصة بالمكون يسمى "حالة"
7878

79-
يمكنك إضافة حالة (state) الى مكون عن طريق استخدام خطاف (hook) [`useState`](/reference/react/useState). *الخطاطيف (hooks)* هي دوال خاصة تتيح لك أن تستخدم مميزات React (الحالة واحدة من هذه المميزات). خطاف `useState` يتح لك أن تعرف متغير حالة (state variable). هذا الخطاف يأخذ الحالة بدائية (initial state) ويرجع قيمتين: الحالة الحالية، ودالة معين الحالة (state setter) التي تتيح لك أن تغير الحالة.
79+
يمكنك إضافة حالة إلى مكون عن طريق استخدام خطاف [`useState`](/reference/react/useState). *الخطاطيف (hooks)* هي دوال خاصة تتيح لك أن تستخدم مميزات React (الحالة واحدة من هذه المميزات). خطاف `useState` يتيح لك أن تعرف متغير حالة. هذا الخطاف يأخذ الحالة المبدأية ويرجع قيمتين: الحالة الحالية، ودالة معين الحالة التي تتيح لك أن تغير الحالة.
8080

8181
```js
8282
const [index, setIndex] = useState(0);
@@ -233,15 +233,15 @@ button {
233233

234234
</LearnMore>
235235

236-
## التصيير وإيداع {/*render-and-commit*/}
236+
## التصيير والإيداع {/*render-and-commit*/}
237237

238-
قبل أن يتم عرض مكوناتك على الشاشة ، يجب أن تُصير بواسطة React. سيساعدك فهم الخطوات في هذه العملية على التفكير في كيفية تنفيذ التعليمات البرمجية الخاصة بك وشرح سلوكها.
238+
قبل أن يتم عرض مكوناتك على الشاشة، يجب أن تُصير بواسطة React. سيساعدك فهم الخطوات في هذه العملية على التفكير في كيفية تنفيذ التعليمات البرمجية الخاصة بك وشرح سلوكها.
239239

240-
تخيل مكوناتك هي طهاة فى مطبخ، يقومون بتجميع وجبات شهية من مكونات. فى هذا السيناريو، React هى النادل الذي ياخذ الطلبات من العملاء ويقوم باحضارها لهم. هذا العميلة من طلب وعرض وجهة المستخدم تطلب ثلاث خطوات:
240+
تخيل أن مكوناتك هي طهاة فى مطبخ، يقومون بتجميع وجبات شهية من مكونات. فى هذا السيناريو، React هى النادل الذي ياخذ الطلبات من العملاء ويقوم باحضارها لهم. هذا العميلة من طلب وعرض واجهة المستخدم تطلب ثلاث خطوات:
241241

242242
1. **تحفيز** المُصير (توصيل طلب العشاء الى المطبخ)
243243
2. **تصيير** المكون (تحضير الطلب فى المطبخ)
244-
3. **إيداع** الى الـ DOM (وضع الطلب على الطاولة)
244+
3. **إيداع** إلى الـ DOM (وضع الطلب على الطاولة)
245245

246246
<IllustrationBlock sequential>
247247
<Illustration caption="تحفيز" alt="React كما لو كانت نادل فى مطعم يقوم باخذ الطلبات من المستخدمين ويقوم باحضارها الى مطبخ المكونات" src="/images/docs/illustrations/i_render-and-commit1.png" />
@@ -255,17 +255,17 @@ button {
255255

256256
</LearnMore>
257257

258-
## الحالة كأنها لقطة {/*state-as-a-snapshot*/}
258+
## الحالة كأنها نسخة {/*state-as-a-snapshot*/}
259259

260-
على عكس متغيرات JavaScript العادية ، تتصرف حالة React مثل لقطة. لا يؤدي تعيينها إلى تغيير متغير الحالة الذي لديك بالفعل، ولكنه يؤدي بدلاً من ذلك إلى إعادة تصيير. قد يكون هذا مفاجئًا في البداية!
260+
على عكس متغيرات JavaScript العادية، تتصرف حالة React مثل نسخة. لا يؤدي تعيينها إلى تغيير متغير الحالة الذي لديك بالفعل، ولكنه يؤدي بدلاً من ذلك إلى إعادة تصيير. قد يكون هذا مفاجئًا في البداية!
261261

262262
```js
263263
console.log(count); // 0
264264
setCount(count + 1); // Request a re-render with 1
265265
console.log(count); // Still 0!
266266
```
267267

268-
يساعدك هذا السلوك على تجنب الثغرات. هنا تطبيق دردشة صغير. حاول تخمين ما يحدث إذا ضغطت على "إرسال" أولاً *ثم* غير المستلم إلى بوب.من سيظهر اسمه في "التنبيه" بعد خمس ثوانٍ؟
268+
يساعدك هذا السلوك على تجنب الثغرات. هنا تطبيق دردشة صغير. حاول تخمين ما يحدث إذا ضغطت على "إرسال" أولاً *ثم* غير المستلم إلى بوب. من سيظهر اسمه في "التنبيه" بعد خمس ثوانٍ؟
269269

270270
<Sandpack>
271271

@@ -313,11 +313,11 @@ label, textarea { margin-bottom: 10px; display: block; }
313313

314314
<LearnMore path="/learn/state-as-a-snapshot">
315315

316-
اقرأ **[الحالة كأنها لقطة](/learn/state-as-a-snapshot)** لتتعلم لما تظهر الحالة وكأنها *ثابتة* و لا تتغير داخل معالجي الأحداث.
316+
اقرأ **[الحالة كأنها نسخة](/learn/state-as-a-snapshot)** لتتعلم لماذا تظهر الحالة وكأنها *ثابتة* و لا تتغير داخل معالجي الأحداث.
317317

318318
</LearnMore>
319319

320-
## صف سلسلة من تحديثات الحالة {/*queueing-a-series-of-state-updates*/}
320+
## جدولة سلسلة من تحديثات الحالة {/*queueing-a-series-of-state-updates*/}
321321

322322
هذا المكون فيه ثغرة: النقر على "+3" يزيد النتيجة مرة واحدة فقط.
323323

@@ -353,7 +353,7 @@ button { display: inline-block; margin: 10px; font-size: 20px; }
353353

354354
</Sandpack>
355355

356-
[الحالة كأنها لقطة](/learn/state-as-a-snapshot) يشرح لماذا يحدث ذلك. تعيين الحالة يطلب اعادة تصيير جديدة، لكن لا يغير القيمة فى الكود الذى يعمل بالفعل. لذلك تظل النتيجة "1" بعد استدعاء "setScore(score + 1)".
356+
[الحالة كأنها لقطة](/learn/state-as-a-snapshot) يشرح لماذا يحدث ذلك. تعيين الحالة يطلب إعادة تصيير جديدة، لكن لا يغير القيمة فى الكود الذى يعمل بالفعل. لذلك تظل النتيجة "1" بعد استدعاء "setScore(score + 1)".
357357

358358
```js
359359
console.log(score); // 0
@@ -365,7 +365,7 @@ setScore(score + 1); // setScore(0 + 1);
365365
console.log(score); // 0
366366
```
367367

368-
يمكنك ان تصلح ذلك عن طريق تمرير *دالة تحديث* عند تعين الحالة. لاحظ انه عند تغير `setScore(score + 1)` بـ `setScore(s => s + 1)` يصلح زرار الـ "+3". هذا يمنحك ان تصف اكثر من تحديث حالة.
368+
يمكنك ان تصلح ذلك عن طريق تمرير *دالة تحديث* عند تعين الحالة. لاحظ انه عند تغير `setScore(score + 1)` بـ `setScore(s => s + 1)` يصلح زرار الـ "+3". هذا يمنحك أن تجدول أكثر من تحديث حالة.
369369

370370
<Sandpack>
371371

@@ -401,15 +401,15 @@ button { display: inline-block; margin: 10px; font-size: 20px; }
401401

402402
<LearnMore path="/learn/queueing-a-series-of-state-updates">
403403

404-
اقرأ **[صف سلسلة من تحديثات الحالة](/learn/queueing-a-series-of-state-updates)** لتتعلم كيفية صف لسلسلة من تحديثات الحالة.
404+
اقرأ **[جدولة سلسلة من تحديثات الحالة](/learn/queueing-a-series-of-state-updates)** لتتعلم كيفية جدولة سلسلة من تحديثات الحالة.
405405

406406
</LearnMore>
407407

408408
## تحديث الكائنات فى الحالة {/*updating-objects-in-state*/}
409409

410-
يمكن ان تحتوى الحالة على اى نوع من قيم JavaScript، وتضمن الكائنات (objects). لكن يجب ان لا تغير الكائنات (objects) والمصفوفات (arrays) التى تحتوى عليها حالة React مباشراً. بدلاً من ذلك عندما تحدث كائن (object) او مصفوفة (array)، تحتاج ان تنشأ نسخة جديدة (او تقوم بعمل نسخة من نسخة موجودة)، بعد ذلك حدث الحالة استخدام النسخة.
410+
يمكن ان تحتوى الحالة على أى نوع من قيم JavaScript، يشمل ذلك الكائنات. لكن يجب أن لا تغير الكائنات والمصفوفات التى تحتوى عليها حالة React مباشراً. بدلاً من ذلك عندما تحدث كائن أو مصفوفة، تحتاج أن تنشئ نسخة جديدة (أو تقوم بعمل نسخة من نسخة موجودة)، بعد ذلك حدث الحالة باستخدام النسخة.
411411

412-
فى الغالب، سوف تستخدم تركيب النحوى للبسط `...` لعمل نسخة من الكائنات والمصفوفات التى تريد ان تغيرها. على سبيل المثال، تحديث كائن متداخل يمكن أن تكون مثل ذلك:
412+
فى الغالب، سوف تستخدم معامل البسط (spread operator) `...` لعمل نسخة من الكائنات والمصفوفات التى تريد أن تغيرها. على سبيل المثال، تحديث كائن متداخل يمكن أن تكون مثل ذلك:
413413

414414
<Sandpack>
415415

@@ -466,7 +466,7 @@ export default function Form() {
466466
return (
467467
<>
468468
<label>
469-
الأسم:
469+
الاسم:
470470
<input
471471
value={person.name}
472472
onChange={handleNameChange}
@@ -517,7 +517,7 @@ img { width: 200px; height: 200px; }
517517

518518
</Sandpack>
519519

520-
لو نسخ الكائنات فى الكود اصبح ممل، يمكنك استخدام مكتبة مثل [Immer](https://github.com/immerjs/use-immer) لتقليل الكود المتكرر:
520+
لو وجدت نسخ الكائنات فى الكود مملًا، يمكنك استخدام مكتبة مثل [Immer](https://github.com/immerjs/use-immer) لتقليل الكود المتكرر:
521521

522522
<Sandpack>
523523

@@ -638,7 +638,7 @@ img { width: 200px; height: 200px; }
638638

639639
## تحديث المصفوفات فى الحالة {/*updating-arrays-in-state*/}
640640

641-
المصفوفات هي نوع آخر من كائنات JavaScript القابلة للتغيير والتي يمكنك تخزينها في الحالة ويجب التعامل معها على أنها للقراءة فقط. تمامًا كما هو الحال مع الكائنات ، عندما تريد تحديث مصفوفة مخزنة في الحالة ، فأنت بحاجة إلى إنشاء مصفوفة جديدة (أو إنشاء نسخة من واحدة موجودة) ، ثم تعيين الحالة لاستخدام المصفوفة الجديدة:
641+
المصفوفات هي نوع آخر من كائنات JavaScript القابلة للتغيير والتي يمكنك تخزينها في الحالة ويجب التعامل معها على أنها للقراءة فقط. تمامًا كما هو الحال مع الكائنات، عندما تريد تحديث مصفوفة مخزنة في الحالة، فأنت بحاجة إلى إنشاء مصفوفة جديدة (أو إنشاء نسخة من واحدة موجودة)، ثم تعيين الحالة لاستخدام المصفوفة الجديدة:
642642

643643
<Sandpack>
644644

@@ -705,7 +705,7 @@ function ItemList({ artworks, onToggle }) {
705705

706706
</Sandpack>
707707

708-
لو نسخ المصفوفات فى الكود اصبح ممل، يمكنك استخدام مكتبة مثل [Immer](https://github.com/immerjs/use-immer) لتقليل الكود المتكرر:
708+
لو وجدت نسخ المصفوفات فى الكود مملًا، يمكنك استخدام مكتبة مثل [Immer](https://github.com/immerjs/use-immer) لتقليل الكود المتكرر:
709709

710710
<Sandpack>
711711

@@ -798,4 +798,4 @@ function ItemList({ artworks, onToggle }) {
798798

799799
إذهب الى [الإستجابة الى الاحداث](/learn/responding-to-events) لتقرأ هذا الفصل صفحة بصفحة!
800800

801-
او، اذا كنت تغير هذه المواضيع بالفعل، لماذا لا تقرأ عن [التحكم فى الحالة](/learn/managing-state)؟
801+
أو، إذا كنت تفهم هذه المواضيع بالفعل، لماذا لا تقرأ عن [التحكم فى الحالة](/learn/managing-state)؟

0 commit comments

Comments
 (0)