Funksiya da vəziyyət saxlaya bilər
Funksiya komponenti props qəbul edib JSX qaytarır. Hook-lar state və sinxronlaşma kimi imkanları funksiyalarda istifadə etməyə imkan verir. useState dəyər və setter qaytarır; useEffect xarici sistemlə əlaqəni qurur.
import { useEffect, useState } from 'react';
export default function UserList({ url = '/examples/frontend/users.json' }) {
const [users, setUsers] = useState([]);
const [status, setStatus] = useState('loading');
useEffect(() => {
const controller = new AbortController();
setStatus('loading');
async function load() {
try {
const response = await fetch(url, { signal: controller.signal });
if (!response.ok) throw new Error(`HTTP ${response.status}`);
const data = await response.json();
if (!controller.signal.aborted) { setUsers(data); setStatus('ready'); }
} catch {
if (!controller.signal.aborted) setStatus('error');
}
}
load();
return () => controller.abort();
}, [url]);
if (status === 'loading') return <p>Yüklənir…</p>;
if (status === 'error') return <p>Məlumat alınmadı.</p>;
return <ul>{users.map(user => <li key={user.id}>{user.name}</li>)}</ul>;
}
Hook qaydaları
Hook-ları komponentin və ya özəl hook-un yuxarı səviyyəsində çağır; dövr, şərt və adi callback daxilində çağırma. Effect-in oxuduğu reaktiv dəyərlər asılılıqlarda olmalıdır. Effect callback-ini birbaşa async etmə: o, Promise deyil, lazım olduqda cleanup funksiyası qaytarmalıdır. Hesablanabilən filtr və cəmi state-də təkrarlamaq əvəzinə render zamanı hesabla.
Lokal məlumatı hazırlamaq
Ayrıca React təlim layihəsində public/examples/frontend/users.json faylını aşağıdakı məzmunla yarat. Dev server bu faylı /examples/frontend/users.json ünvanında təqdim edəcək; istifadə etdiyin başqa URL də eyni obyekt quruluşunu qaytarmalıdır.
[{"id":1,"name":"Aysel"},{"id":2,"name":"Murad"}]
Bu saytın özündə nümunə JSON artıq mövcuddur. Sorğunun səhifənin mənşəyinə görə göndərildiyini nəzərə al; başqa portda işləyən layihə bu faylı avtomatik paylaşmır.