الفرق بين المراجعتين ل"React/uncontrolled components"

من موسوعة حسوب
اذهب إلى التنقل اذهب إلى البحث
(أنشأ الصفحة ب'<noinclude>{{DISPLAYTITLE:المكونات غير المضبوطة}}</noinclude>')
 
سطر 1: سطر 1:
 
<noinclude>{{DISPLAYTITLE:المكونات غير المضبوطة}}</noinclude>
 
<noinclude>{{DISPLAYTITLE:المكونات غير المضبوطة}}</noinclude>
 +
نُفضِّل في معظم الحالات استخدام [[React/forms|المُكوّنات المضبوطة]] من أجل حقول الإدخال، ففي المُكوّنات المضبوطة يتعامل مُكوّن React مع بيانات الحقول. البديل لها هو المُكوّنات غير المضبوطة والتي يتعامل فيها DOM مع بيانات الحقول.
 +
 +
لكتابة مُكوّن غير مضبوط بدلًا من كتابة معالج أحداث لكل تحديث للحالة، فبإمكانك [[React/refs and the dom|استخدام المراجع]] للحصول على قيم الحقول من DOM.
 +
 +
مثلًا تقبل هذه الشيفرة اسمًا واحدًا في المُكوّن غير المضبوط:<syntaxhighlight lang="javascript">
 +
class NameForm extends React.Component {
 +
  constructor(props) {
 +
    super(props);
 +
    this.handleSubmit = this.handleSubmit.bind(this);
 +
    this.input = React.createRef();
 +
  }
 +
 +
  handleSubmit(event) {
 +
    alert('قُدِّم اسم ' + this.input.current.value);
 +
    event.preventDefault();
 +
  }
 +
 +
  render() {
 +
    return (
 +
      <form onSubmit={this.handleSubmit}>
 +
        <label>
 +
          Name:
 +
          <input type="text" ref={this.input} />
 +
        </label>
 +
        <input type="submit" value="تقديم الاسم" />
 +
      </form>
 +
    );
 +
  }
 +
}
 +
</syntaxhighlight>

مراجعة 13:43، 3 أغسطس 2018

نُفضِّل في معظم الحالات استخدام المُكوّنات المضبوطة من أجل حقول الإدخال، ففي المُكوّنات المضبوطة يتعامل مُكوّن React مع بيانات الحقول. البديل لها هو المُكوّنات غير المضبوطة والتي يتعامل فيها DOM مع بيانات الحقول.

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

مثلًا تقبل هذه الشيفرة اسمًا واحدًا في المُكوّن غير المضبوط:

class NameForm extends React.Component {
  constructor(props) {
    super(props);
    this.handleSubmit = this.handleSubmit.bind(this);
    this.input = React.createRef();
  }

  handleSubmit(event) {
    alert('قُدِّم اسم ' + this.input.current.value);
    event.preventDefault();
  }

  render() {
    return (
      <form onSubmit={this.handleSubmit}>
        <label>
          Name:
          <input type="text" ref={this.input} />
        </label>
        <input type="submit" value="تقديم الاسم" />
      </form>
    );
  }
}