الفرق بين المراجعتين ل"React/state and lifecycle"

من موسوعة حسوب
اذهب إلى التنقل اذهب إلى البحث
(أنشأ الصفحة ب'<noinclude>{{DISPLAYTITLE:حالة ودورة حياة المكونات}}</noinclude>')
 
سطر 1: سطر 1:
 
<noinclude>{{DISPLAYTITLE:حالة ودورة حياة المكونات}}</noinclude>
 
<noinclude>{{DISPLAYTITLE:حالة ودورة حياة المكونات}}</noinclude>
 +
سنتحدّث في هذا القسم حول مفهوم حالة ودورة حياة المُكوِّنات في React، بإمكانك أن تجد من هنا [[React/react component|مرجعًا مُفصّلًا حول واجهة برمجة التطبيق (API) للمُكوِّنات]].
 +
 +
فلنتذكر مثال الساعة من قسم [[React/rendering elements|تصيير العناصر في React]]، تعلّمنا في ذلك القسم فقط طريقة واحدة لتحديث واجهة المستخدم عن طريق استدعاء التابع <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>[http://codepen.io/gaearon/pen/gwoJZk?editors=0010 جرِّب المثال على موقع CodePen].
 +
 +
سنتعلّم في هذا القسم كيف نجعل مُكوِّن الساعة <code>Clock</code> قابلًا لإعادة الاستخدام حقًّا مع تغليفه ضمن نفسه، حيث يُعيِّن عدّاد الوقت الخاص به ويُحدِّث نفسه في كل ثانية.
 +
 +
بإمكاننا البدء عن طريق تغليف شكل السّاعة:<syntaxhighlight lang="javascript">
 +
function Clock(props) {
 +
  return (
 +
    <div>
 +
      <h1>أهلًا بالعالم!</h1>
 +
      <h2>الساعة الآن {props.date.toLocaleTimeString()}.</h2>
 +
    </div>
 +
  );
 +
}
 +
 +
function tick() {
 +
  ReactDOM.render(
 +
    <Clock date={new Date()} />,
 +
    document.getElementById('root')
 +
  );
 +
}
 +
 +
setInterval(tick, 1000);
 +
</syntaxhighlight>[http://codepen.io/gaearon/pen/dpdoYR?editors=0010 جرِّب المثال على موقع CodePen].
 +
 +
ولكن على الرغم من ذلك يفتقد هذا المُكوِّن لمتطلب أساسي، وهو أنّ تعيين السّاعة لعدّاد الوقت وتحديثها لواجهة المستخدم في كل ثانية ينبغي أن يكون تفصيلًا داخليًّا خاصًّا بالمُكوِّن <code>Clock</code>.
 +
 +
نريد بشكل مثالي أن نكتب هذه الشيفرة مرة واحدة ونجعل المُكوِّن <code>Clock</code> يُحدِّث نفسه:<syntaxhighlight lang="javascript">
 +
ReactDOM.render(
 +
  <Clock />,
 +
  document.getElementById('root')
 +
);
 +
 +
</syntaxhighlight>

مراجعة 16:31، 11 يوليو 2018

سنتحدّث في هذا القسم حول مفهوم حالة ودورة حياة المُكوِّنات في React، بإمكانك أن تجد من هنا مرجعًا مُفصّلًا حول واجهة برمجة التطبيق (API) للمُكوِّنات.

فلنتذكر مثال الساعة من قسم تصيير العناصر في React، تعلّمنا في ذلك القسم فقط طريقة واحدة لتحديث واجهة المستخدم عن طريق استدعاء التابع 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.

سنتعلّم في هذا القسم كيف نجعل مُكوِّن الساعة Clock قابلًا لإعادة الاستخدام حقًّا مع تغليفه ضمن نفسه، حيث يُعيِّن عدّاد الوقت الخاص به ويُحدِّث نفسه في كل ثانية.

بإمكاننا البدء عن طريق تغليف شكل السّاعة:

function Clock(props) {
  return (
    <div>
      <h1>أهلًا بالعالم!</h1>
      <h2>الساعة الآن {props.date.toLocaleTimeString()}.</h2>
    </div>
  );
}

function tick() {
  ReactDOM.render(
    <Clock date={new Date()} />,
    document.getElementById('root')
  );
}

setInterval(tick, 1000);

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

ولكن على الرغم من ذلك يفتقد هذا المُكوِّن لمتطلب أساسي، وهو أنّ تعيين السّاعة لعدّاد الوقت وتحديثها لواجهة المستخدم في كل ثانية ينبغي أن يكون تفصيلًا داخليًّا خاصًّا بالمُكوِّن Clock.

نريد بشكل مثالي أن نكتب هذه الشيفرة مرة واحدة ونجعل المُكوِّن Clock يُحدِّث نفسه:

ReactDOM.render(
  <Clock />,
  document.getElementById('root')
);