رد فعل useState
هوك
يتيح لنا React useState
Hook تتبع الحالة في مكون دالة.
تشير الحالة عمومًا إلى البيانات أو الخصائص التي يجب تتبعها في أحد التطبيقات.
يستورد 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("")
الحصول على شهادة!
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
وننشر اللون ونكتبه فقط.