Xarici sistemlə əlaqəni idarə et
Komponentin qoşulması mount, çıxarılması unmount adlanır. Sinifdə componentDidMount məlumat yükləmək və abunəlik qurmaq, componentWillUnmount təmizləmək üçün istifadə oluna bilər. Funksiya komponentində belə sinxronlaşma Effect ilə ifadə olunur.
import { useEffect, useState } from 'react';
export default function WindowWidth() {
const [width, setWidth] = useState(null);
useEffect(() => {
function update() { setWidth(window.innerWidth); }
update();
window.addEventListener('resize', update);
return () => window.removeEventListener('resize', update);
}, []);
return <p>{width === null ? 'Ölçülür…' : `En: ${width}px`}</p>;
}
Cleanup yalnız son çıxış deyil
Effect xarici sistemlə sinxronlaşma üçündür, bütün hesablamaları ora köçürmək üçün deyil. Asılılıqlar dəyişdikdə əvvəlki cleanup işləyə və effect yenidən qurula bilər. Boş asılılıq siyahısı burada heç bir reaktiv giriş oxunmadığına uyğundur.
Qlobal hadisə üçün eyni funksiya istinadını sil, intervalı clearInterval ilə dayandır, şəbəkə işini lazım olduqda AbortController ilə ləğv et. İnkişaf Strict Mode-da əlavə setup/cleanup dövrü səhv təmizləməni üzə çıxara bilər. Sinif metodları ilə effect arasında universal birəbir çevirmə fərz etmə.
Sinifdə eyni resursun təmizlənməsi
import { Component } from 'react';
export default class Clock extends Component {
state = { seconds: 0 };
componentDidMount() {
this.timer = setInterval(() => {
this.setState(previous => ({ seconds: previous.seconds + 1 }));
}, 1000);
}
componentWillUnmount() { clearInterval(this.timer); }
render() { return <p>{this.state.seconds}</p>; }
}
Props-a bağlı abunəlik dəyişəndə sinifdə yeniləmə mərhələsi də düşünülməlidir; yalnız mount/unmount cütü hər halı əhatə etmir. Funksiya nümunəsində düzgün asılılıqlar həmin sinxronlaşma sərhədini ifadə edir.