123 lines
4.1 KiB
Markdown
123 lines
4.1 KiB
Markdown
|
---
|
||
|
title: State
|
||
|
localeTitle: حالة
|
||
|
---
|
||
|
# حالة
|
||
|
|
||
|
الدولة هي المكان الذي تأتي منه البيانات.
|
||
|
|
||
|
يجب أن نحاول دائمًا جعل ولايتنا بسيطة قدر الإمكان وتقليل عدد المكونات الحميدة. إذا كان لدينا ، على سبيل المثال ، عشرة مكونات تحتاج إلى بيانات من الحالة ، فيجب علينا إنشاء مكون حاوية واحد سيحافظ على الحالة لكلها.
|
||
|
|
||
|
الدولة هي في الأساس مثل كائن عالمي متاح في كل مكان في أحد المكونات.
|
||
|
|
||
|
مثال على مكون فئة جليل:
|
||
|
|
||
|
`import React from 'react';
|
||
|
|
||
|
class App extends React.Component {
|
||
|
constructor(props) {
|
||
|
super(props);
|
||
|
|
||
|
// We declare the state as shown below
|
||
|
|
||
|
this.state = {
|
||
|
x: "This is x from state",
|
||
|
y: "This is y from state"
|
||
|
}
|
||
|
}
|
||
|
render() {
|
||
|
return (
|
||
|
<div>
|
||
|
<h1>{this.state.x}</h1>
|
||
|
<h2>{this.state.y}</h2>
|
||
|
</div>
|
||
|
);
|
||
|
}
|
||
|
}
|
||
|
export default App;
|
||
|
`
|
||
|
|
||
|
مثال آخر:
|
||
|
|
||
|
`import React from 'react';
|
||
|
|
||
|
class App extends React.Component {
|
||
|
constructor(props) {
|
||
|
super(props);
|
||
|
|
||
|
// We declare the state as shown below
|
||
|
this.state = {
|
||
|
x: "This is x from state",
|
||
|
y: "This is y from state"
|
||
|
}
|
||
|
}
|
||
|
|
||
|
render() {
|
||
|
let x1 = this.state.x;
|
||
|
let y1 = this.state.y;
|
||
|
|
||
|
return (
|
||
|
<div>
|
||
|
<h1>{x1}</h1>
|
||
|
<h2>{y1}</h2>
|
||
|
</div>
|
||
|
);
|
||
|
}
|
||
|
}
|
||
|
export default App;
|
||
|
`
|
||
|
|
||
|
## تحديث الدولة
|
||
|
|
||
|
يمكنك تغيير البيانات المخزنة في حالة التطبيق الخاص بك باستخدام طريقة `setState` على المكون الخاص بك.
|
||
|
|
||
|
`this.setState({ value: 1 });
|
||
|
`
|
||
|
|
||
|
ضع في اعتبارك أن `setState` غير متزامن لذا يجب توخي الحذر عند استخدام الحالة الحالية لتعيين حالة جديدة. مثال جيد لهذا سيكون إذا كنت ترغب في زيادة قيمة في ولايتك.
|
||
|
|
||
|
#### الطريق الخطأ
|
||
|
|
||
|
`this.setState({ value: this.state.value + 1 });
|
||
|
`
|
||
|
|
||
|
يمكن أن يؤدي ذلك إلى سلوك غير متوقع في تطبيقك إذا كان الرمز أعلاه يُسمى عدة مرات في نفس دورة التحديث. لتجنب هذا يمكنك تمرير دالة رد اتصال محدث إلى `setState` بدلاً من كائن.
|
||
|
|
||
|
#### الطريق الصحيح
|
||
|
|
||
|
`this.setState(prevState => ({ value: prevState.value + 1 }));
|
||
|
`
|
||
|
|
||
|
## تحديث الدولة
|
||
|
|
||
|
يمكنك تغيير البيانات المخزنة في حالة التطبيق الخاص بك باستخدام طريقة `setState` على المكون الخاص بك.
|
||
|
|
||
|
`this.setState({value: 1});
|
||
|
`
|
||
|
|
||
|
ضع في اعتبارك أن `setState` قد تكون غير متزامنة لذا يجب توخي الحذر عند استخدام الحالة الحالية لتعيين حالة جديدة. مثال جيد لهذا سيكون إذا كنت ترغب في زيادة قيمة في ولايتك.
|
||
|
|
||
|
##### الطريق الخطأ
|
||
|
|
||
|
`this.setState({value: this.state.value + 1});
|
||
|
`
|
||
|
|
||
|
يمكن أن يؤدي ذلك إلى سلوك غير متوقع في تطبيقك إذا كان الرمز أعلاه يُسمى عدة مرات في نفس دورة التحديث. لتجنب هذا يمكنك تمرير دالة رد اتصال محدث إلى `setState` بدلاً من كائن.
|
||
|
|
||
|
##### الطريق الصحيح
|
||
|
|
||
|
`this.setState(prevState => ({value: prevState.value + 1}));
|
||
|
`
|
||
|
|
||
|
##### الطريق الأنظف
|
||
|
|
||
|
`this.setState(({ value }) => ({ value: value + 1 }));
|
||
|
`
|
||
|
|
||
|
عندما تكون هناك حاجة لعدد محدود من الحقول في كائن الحالة ، يمكن استخدام تدمير الكائن لرمز أنظف.
|
||
|
|
||
|
### معلومات اكثر
|
||
|
|
||
|
* [رد الفعل - الدولة ودورة الحياة](https://reactjs.org/docs/state-and-lifecycle.html)
|
||
|
* [رد الفعل - رفع الدولة](https://reactjs.org/docs/lifting-state-up.html)
|
||
|
* [رد الفعل الأصلية - حتى الدولة](https://facebook.github.io/react-native/docs/state.html)
|