3. Na którym etapie życia komponentu należy pobierać dane?

Zapytania powinny być wykonywane tak, aby nie blokowały wyświetlania UI użytkownikowi, dzeki czemu aplikacja będzie zachowywać się respomsywnie w oczekiwaniu na dane. Dobrą praktyką jest uruchomienie jakiegoś znacznika, np. animacji lub tzw. skeleton elements na czas ładowania.

Dlatego warto uruchamiać zapytania do API w momencie, gdy komponent jest już wyrenderowany, aplikacja - responsywna i istnieje element, który może wskazywać na trwające ładowanie.

Komponenty Klasowe

Zapytania do zewnętrznego API powinnny być przeprowadzane w metodzie componentDidMount.

class MyComponent extends Component<never, State> { componentDidMount = async () => { this.setState({isLoading: true}); await fetchData(...); this.setState({isLoading: false}); }; render = () => { return <> {this.state.isLoading ? <div>Waiting...</div> ? <div> Hello World! </div>} </> }; }

Komponenty Funkcyjne

Miejscem, na przeprowadzanie tzw. side effects jest hook useEffect. Ważne jest zadbanie o to, aby nie wykonywał się za każdym razem, gdy zostanie przerenderowany komponent aby uniknąć niepotrzebnych zapytań:

const MyComponent: FC = () => { const [isLoading, setIsLoading] = useState(); const fetchFunction = useCallback(async () => { setIsLoading(true); await fetchData(...); setIsLoading(false); }, []); useEffect(() => { fetchFunction(); }, [fetchFunction]); return <> {isLoading ? <div>Waiting...</div> ? <div> Hello World! </div>} </>; }
devFlipCards 2024

Akceptujesz cookies?

Cookies to niewielkie fragmenty danych zapisywane lokalnie na twoim urządzeniu. Pomagają w funkcjonowaniu naszej strony - zapisują Twoje ustawienia strony takie jak motyw czy język. Poprawiają funkcjonowanie reklam i pozwalają nam na przeprowadzanie analityki odwiedzin strony. Korzystając ze strony zgadasz się na ich wykorzystanie.