"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > كيفية جلب البيانات بشكل غير متزامن في وظائف React Render

كيفية جلب البيانات بشكل غير متزامن في وظائف React Render

تم النشر بتاريخ 2024-10-31
تصفح:786

How to Asynchronously Fetch Data in React Render Functions

كيفية استخدام async/await في وظائف Render في React

في React، عادةً ما تكون وظيفة العرض مخصصة للعمليات النقية والمتزامنة. ومع ذلك، في بعض السيناريوهات، قد تواجه الحاجة إلى تنفيذ مهام غير متزامنة داخل هذه الوظيفة. ستتناول هذه المقالة كيفية استخدام بناء الجملة غير المتزامن/الانتظار بشكل فعال في وظيفة العرض.

فهم المشكلة

كما يسلط الضوء على السؤال، محاولة استخدام async/ انتظار مباشرة داخل وظيفة الخريطة في وظيفة التجسيد يمكن أن يؤدي إلى سلوك غير متوقع. وذلك لأن وظيفة الخريطة تتوقع عمليات متزامنة، ومحاولة إجراء مكالمات غير متزامنة داخلها قد تؤدي إلى تعطيل تدفق عملية العرض.

فصل جلب البيانات عن العرض

لحل هذه المشكلة، يوصى بفصل عملية جلب البيانات عن منطق العرض. بدلاً من إجراء عمليات غير متزامنة داخل وظيفة التجسيد، من الأفضل بدء جلب البيانات في مكون منفصل أو خطاف.

جلب البيانات غير المتزامنة في المكون الأصلي

في هذا الأسلوب، يمكنك إنشاء مكون أصلي (على سبيل المثال، ParentThatFetches) مسؤول عن تقديم طلبات غير متزامنة وإدارة البيانات. باستخدام أساليب دورة الحياة أو الخطافات، يقوم المكون الأصلي بجلب البيانات وتخزينها في الحالة. بعد ذلك، يعرض المكون الأصلي بشكل مشروط مكونًا فرعيًا وظيفيًا خالصًا (على سبيل المثال، الطفل) الذي يتلقى البيانات التي تم جلبها كدعائم. ]

this.state = {};


}
componentDidMount () {

this.state = {};

}

render () {

fetch('/some/async/data')
  .then(resp => resp.json())
  .then(data => this.setState({data}));

}

}

const Child = ({ data }) => (
{this.state.data && (
  <Child data={this.state.data} />
)}

{data.map((x, i) => (

{x}))}

);

{data.map((x, i) => (<td key={i}>{x}</td>))}

مع ظهور الخطافات في React، يمكن تبسيط عملية جلب البيانات بشكل أكبر. يوضح مقتطف التعليمات البرمجية التالي كيفية استخدام الخطافات لجلب البيانات بشكل غير متزامن وتحديث الحالة وفقًا لذلك:

const ParentThatFetches = () => {

const [data, updateData] = useState();

useEffect(() => {

const getData = async () => { const resp = انتظار الجلب('some/url'); const json = انتظار resp.json() updateData(json); } getData();


}, []);

إرجاع البيانات &&

}
const getData = async () => {
  const resp = await fetch('some/url');
  const json = await resp.json()
  updateData(json);
}
getData();
بيان الافراج أعيد طبع هذه المقالة على: 1729236261 في حالة وجود أي انتهاك، يرجى الاتصال بـ [email protected] لحذفها
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3