الفرق بين المراجعتين لصفحة: «React/rendering elements»

من موسوعة حسوب
أنشأ الصفحة ب'<noinclude>{{DISPLAYTITLE:تصيير العناصر (Rendering Elements)}}</noinclude>'
 
لا ملخص تعديل
سطر 1: سطر 1:
<noinclude>{{DISPLAYTITLE:تصيير العناصر (Rendering Elements)}}</noinclude>
<noinclude>{{DISPLAYTITLE:تصيير العناصر (Rendering Elements)}}</noinclude>
تُشكِّل العناصر أصغر بنية لتطبيقات React.
يصف العنصر ما الذي تود رؤيته على الشّاشة:<syntaxhighlight lang="javascript">
const element = <h1>أهلًا بالعالم</h1>;
</syntaxhighlight>على عكس عناصر DOM الخاصّة بالمتصفّح، تكون عناصر React عبارة عن كائنات مُجرّدة سهلة الإنشاء، ويعتني React DOM بتحديث DOM لمُطابقة عناصر React.
'''ملاحظة:''' قد يخلط المرء العناصر مع مفهوم أكثر انتشارًا وهو المُكوِّنات (components)، سنتحدّث عن المُكوِّنات بالتفصيل في [[React/components and props|القسم الخاص بها]]. إنّ العناصر هي الشيء الذي تُصنَع منه المُكوِّنات، ومن المُفضَّل أن تقرأ ذلك القسم قبل المتابعة.
== تصيير العنصر إلى DOM ==
فلنفترض وجود عنصر [[HTML/div|<div‎>]] التالي في مكان من ملف HTML لدينا:<syntaxhighlight lang="html">
<div id="root"></div>
</syntaxhighlight>ندعو هذا بعقدة DOM الجذريّة (root) لأنّ كل شيء بداخلها يُدار عن طريق React DOM.
تمتلك التطبيقات المبنيّة بواسطة React عقدة DOM جذريّة واحدة فقط عادةً، أمّا إن كنت تدمج React مع تطبيق موجود مسبقًا فقد يكون لديك عقد DOM جذريّة معزولة كما تريد.
لتصيير عنصر React إلى عقدة DOM جذريّة، مرِّر العنصر والعقدة إلى التّابع <code>ReactDOM.render()</code>‎:<syntaxhighlight lang="javascript">
const element = <h1>أهلًا بالعالم</h1>;
ReactDOM.render(element, document.getElementById('root'));
</syntaxhighlight>[https://reactjs.org/redirect-to-codepen/rendering-elements/render-an-element جرِّب المثال على موقع CodePen].
يعرض هذا المثال عبارة <code>"أهلًا بالعالم"</code> في الصّفحة.
== تحديث العنصر بعد تصييره ==
تكون عناصر React غير قابلة للتغيير (immutable)، فحالما تُنشِئ العنصر لا يُمكنِك تغيير عناصره الأبناء أو خاصيّاته، فهو يُشبِه بذلك لقطة من فيلم حيث يُمثِّل واجهة المستخدم في نقطة زمنيّة مُحدِّدة.
على حد علمنا حتى الآن، الطريقة الوحيدة لتحديث واجهة المستخدم هي إنشاء عنصر جديد وتمريره إلى التّابع <code>ReactDOM.render()</code>‎.
فلنأخذ مثال عن السّاعة الموقوتة:<syntaxhighlight lang="javascript">
function tick() {
  const element = (
    <div>
      <h1>أهلًا بالعالم</h1>
      <h2>السّاعة الآن {new Date().toLocaleTimeString()}.</h2>
    </div>
  );
  ReactDOM.render(element, document.getElementById('root'));
}
setInterval(tick, 1000);
</syntaxhighlight>[https://reactjs.org/redirect-to-codepen/rendering-elements/update-rendered-element جرِّب المثال على موقع CodePen].
يستدعي هذا المثال التّابع <code>ReactDOM.render()‎</code> في كل ثانية عن طريق استدعاء التّابع [[JavaScript/setInterval|setInterval()]]‎.
'''ملاحظة:''' تستدعي معظم تطبيقات React عمليًّا التّابع <code>ReactDOM.render()</code>‎ مرّة واحدة. سنتعلّم في الأقسام التاليّة كيفيّة تغليف هذه الشيفرة ضمن [[React/state and lifecycle|حالة المُكوِّنات]].
نوصي بعدم تجاوز هذه المواضيع بسبب اعتمادها على بعضها الآخر.
== تُحدِّث React فقط ما هو ضروري ==
تُقارِن React DOM العنصر وعناصره الأبناء مع العناصر السّابقة وتُطبِّق تحديثات DOM الضروريّة لجعلها بالحالة المرغوبة.
بإمكانك التحقّق من ذلك عن طريق تفحّص المثال الأخير باستخدام أدوات المتصفّح:

مراجعة 14:51، 11 يوليو 2018

تُشكِّل العناصر أصغر بنية لتطبيقات React.

يصف العنصر ما الذي تود رؤيته على الشّاشة:

const element = <h1>أهلًا بالعالم</h1>;

على عكس عناصر DOM الخاصّة بالمتصفّح، تكون عناصر React عبارة عن كائنات مُجرّدة سهلة الإنشاء، ويعتني React DOM بتحديث DOM لمُطابقة عناصر React.

ملاحظة: قد يخلط المرء العناصر مع مفهوم أكثر انتشارًا وهو المُكوِّنات (components)، سنتحدّث عن المُكوِّنات بالتفصيل في القسم الخاص بها. إنّ العناصر هي الشيء الذي تُصنَع منه المُكوِّنات، ومن المُفضَّل أن تقرأ ذلك القسم قبل المتابعة.

تصيير العنصر إلى DOM

فلنفترض وجود عنصر <div‎> التالي في مكان من ملف HTML لدينا:

<div id="root"></div>

ندعو هذا بعقدة DOM الجذريّة (root) لأنّ كل شيء بداخلها يُدار عن طريق React DOM.

تمتلك التطبيقات المبنيّة بواسطة React عقدة DOM جذريّة واحدة فقط عادةً، أمّا إن كنت تدمج React مع تطبيق موجود مسبقًا فقد يكون لديك عقد DOM جذريّة معزولة كما تريد.

لتصيير عنصر React إلى عقدة DOM جذريّة، مرِّر العنصر والعقدة إلى التّابع ReactDOM.render()‎:

const element = <h1>أهلًا بالعالم</h1>;
ReactDOM.render(element, document.getElementById('root'));

جرِّب المثال على موقع CodePen.

يعرض هذا المثال عبارة "أهلًا بالعالم" في الصّفحة.

تحديث العنصر بعد تصييره

تكون عناصر React غير قابلة للتغيير (immutable)، فحالما تُنشِئ العنصر لا يُمكنِك تغيير عناصره الأبناء أو خاصيّاته، فهو يُشبِه بذلك لقطة من فيلم حيث يُمثِّل واجهة المستخدم في نقطة زمنيّة مُحدِّدة.

على حد علمنا حتى الآن، الطريقة الوحيدة لتحديث واجهة المستخدم هي إنشاء عنصر جديد وتمريره إلى التّابع ReactDOM.render()‎.

فلنأخذ مثال عن السّاعة الموقوتة:

function tick() {
  const element = (
    <div>
      <h1>أهلًا بالعالم</h1>
      <h2>السّاعة الآن {new Date().toLocaleTimeString()}.</h2>
    </div>
  );
  ReactDOM.render(element, document.getElementById('root'));
}

setInterval(tick, 1000);

جرِّب المثال على موقع CodePen.

يستدعي هذا المثال التّابع ReactDOM.render()‎ في كل ثانية عن طريق استدعاء التّابع setInterval()‎.

ملاحظة: تستدعي معظم تطبيقات React عمليًّا التّابع ReactDOM.render()‎ مرّة واحدة. سنتعلّم في الأقسام التاليّة كيفيّة تغليف هذه الشيفرة ضمن حالة المُكوِّنات.

نوصي بعدم تجاوز هذه المواضيع بسبب اعتمادها على بعضها الآخر.

تُحدِّث React فقط ما هو ضروري

تُقارِن React DOM العنصر وعناصره الأبناء مع العناصر السّابقة وتُطبِّق تحديثات DOM الضروريّة لجعلها بالحالة المرغوبة.

بإمكانك التحقّق من ذلك عن طريق تفحّص المثال الأخير باستخدام أدوات المتصفّح: