رد فعل useStateهوك


يتيح لنا React useStateHook تتبع الحالة في مكون دالة.

تشير الحالة عمومًا إلى البيانات أو الخصائص التي يجب تتبعها في أحد التطبيقات.


يستورد useState

لاستخدام useStateالخطاف ، نحتاج أولاً إلى importإدخاله في المكون الخاص بنا.

مثال:

في الجزء العلوي من المكون الخاص بك ، importالخطاف useState.

import { useState } from "react";

لاحظ أننا نتلف useStateمن reactتصدير مسمى.

لمعرفة المزيد حول التدمير ، راجع قسم ES6 .


التهيئةuseState

نقوم بتهيئة حالتنا عن طريق استدعاء useStateمكون الوظيفة الخاص بنا.

useStateيقبل حالة أولية ويعيد قيمتين:

  • مجلس الدولة.
  • وظيفة تقوم بتحديث الدولة.

مثال:

تهيئة الحالة في الجزء العلوي من مكون الوظيفة.

import { useState } from "react";

function FavoriteColor() {
  const [color, setColor] = useState("");
}

لاحظ أنه مرة أخرى ، نحن ندمر القيم التي تم إرجاعها من useState.

القيمة الأولى colorهي حالتنا الحالية.

القيمة الثانية setColor، هي fuction المستخدم لتحديث حالتنا.

هذه الأسماء هي متغيرات يمكن تسميتها بأي شيء تريده.

أخيرًا ، قمنا بتعيين الحالة الأولية على سلسلة فارغة:useState("")


w3schools CERTIFIED . 2022

الحصول على شهادة!

أكمل وحدات React ، ونفّذ التمارين ، وخذ الامتحان واحصل على شهادة w3schools !!

95 دولارًا ENROLL

قراءة الدولة

يمكننا الآن تضمين دولتنا في أي مكان في مكوننا.

مثال:

استخدم متغير الحالة في المكون المقدم.

import { useState } from "react";
import ReactDOM from "react-dom";

function FavoriteColor() {
  const [color, setColor] = useState("red");

  return <h1>My favorite color is {color}!</h1>
}

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


تحديث الدولة

لتحديث حالتنا ، نستخدم وظيفة محدث الحالة الخاصة بنا.

لا ينبغي أبدا تحديث الحالة مباشرة. مثال: color = "red"غير مسموح به.

مثال:

استخدم زرًا لتحديث الحالة:

import { useState } from "react";
import ReactDOM from "react-dom";

function FavoriteColor() {
  const [color, setColor] = useState("red");

  return (
    <>
      <h1>My favorite color is {color}!</h1>
      <button
        type="button"
        onClick={() => setColor("blue")}
      >Blue</button>
    </>
  )
}

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


ما يمكن أن تعقده الدولة

يمكن useStateاستخدام الخطاف لتتبع السلاسل والأرقام والمنطق المنطقي والمصفوفات والكائنات وأي مجموعة من هذه!

يمكننا إنشاء خطاطيف حالة متعددة لتتبع القيم الفردية.

مثال:

إنشاء خطافات حالة متعددة:

import { useState } from "react";
import ReactDOM from "react-dom";

function Car() {
  const [brand, setBrand] = useState("Ford");
  const [model, setModel] = useState("Mustang");
  const [year, setYear] = useState("1964");
  const [color, setColor] = useState("red");

  return (
    <>
      <h1>My {brand}</h1>
      <p>
        It is a {color} {model} from {year}.
      </p>
    </>
  )
}

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

أو يمكننا فقط استخدام حالة واحدة وتضمين كائن بدلاً من ذلك!

مثال:

قم بإنشاء خطاف واحد يحتوي على كائن:

import { useState } from "react";
import ReactDOM from "react-dom";

function Car() {
  const [car, setCar] = useState({
    brand: "Ford",
    model: "Mustang",
    year: "1964",
    color: "red"
  });

  return (
    <>
      <h1>My {car.brand}</h1>
      <p>
        It is a {car.color} {car.model} from {car.year}.
      </p>
    </>
  )
}

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

نظرًا لأننا نتتبع الآن كائنًا واحدًا ، فنحن بحاجة إلى الرجوع إلى هذا الكائن ثم خاصية ذلك الكائن عند تقديم المكون. (مثال car.brand:)


تحديث الكائنات والصفائف في الحالة

عندما يتم تحديث الحالة ، يتم الكتابة فوق الولاية بأكملها.

ماذا لو أردنا فقط تحديث لون سيارتنا؟

إذا اتصلنا فقط setCar({color: "blue"})، فسيؤدي ذلك إلى إزالة العلامة التجارية والطراز والسنة من دولتنا.

يمكننا استخدام عامل انتشار JavaScript لمساعدتنا.

مثال:

استخدم عامل تشغيل JavaScript Spread لتحديث لون السيارة فقط:

import { useState } from "react";
import ReactDOM from "react-dom";

function Car() {
  const [car, setCar] = useState({
    brand: "Ford",
    model: "Mustang",
    year: "1964",
    color: "red"
  });

  const updateColor = () => {
    setCar(previousState => {
      return { ...previousState, color: "blue" }
    });
  }

  return (
    <>
      <h1>My {car.brand}</h1>
      <p>
        It is a {car.color} {car.model} from {car.year}.
      </p>
      <button
        type="button"
        onClick={updateColor}
      >Blue</button>
    </>
  )
}

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

نظرًا لأننا نحتاج إلى القيمة الحالية للحالة ، فإننا نمرر دالة إلى setCarوظيفتنا. هذه الوظيفة تتلقى القيمة السابقة.

ثم نعيد كائنًا ، previousStateوننشر اللون ونكتبه فقط.


اختبر نفسك مع التمارين

ممارسه الرياضه:

أكمل هذه العبارة لتتبع متغير "count" باستخدام الخطاف useState.

import { useState } from "react";

function KeepCount() {
  const [, ] = useState(0);
}