• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

React aktualizowanie widoku

Object Storage Arubacloud
0 głosów
81 wizyt
pytanie zadane 28 sierpnia 2020 w JavaScript przez xFanti Obywatel (1,350 p.)

Hej,

Robię teraz projekt przy użyciu Api league of legends. Na jedenj ze stron chciałem wypisać wszystkich championów. Z api pobieram obiekt. Teraz mam problem, mam input który wyszukuje championy po nazwie i nie chce za każdym razem pobierać nowego obiektu z API. Zrobiłem kopię tego obiektu na którym pracuje, jest do jednak zmienna globalna.

Czy mozna to zrobić lepiej albo przy użyciu prevState?

let championList;
const ChampionSites = (props) => {

    const [championName, setChampionName] = useState('');
    const [searChchampionList, setSearchChampionList] = useState([]);


    const handleChangeChampionName = (e) => {
        const inputValue = e.target.value
        setChampionName(inputValue);
        setSearchChampionList(championList.filter(el => el.id.toUpperCase().includes(inputValue.toUpperCase())));
    }

    const getChampions = async () => {
        try {
            const result = await fetch(
                `http://ddragon.leagueoflegends.com/cdn/10.16.1/data/en_US/champion.json`
            );
            const data = await result.json();
            let copyList = Object.values(data.data);
            setSearchChampionList(copyList);
            championList = [...copyList];


        }
        catch (err) {
            console.log(err);
        }

    };

    useEffect(() => {
        getChampions();
    }, [])

 

komentarz 28 sierpnia 2020 przez ScriptyChris Mędrzec (190,190 p.)

mam input który wyszukuje championy po nazwie i nie chce za każdym razem pobierać nowego obiektu z API

A kiedy w takim razie chcesz go pobierać? 

komentarz 28 sierpnia 2020 przez xFanti Obywatel (1,350 p.)
chce tylko raz pobrać po załadowaniu strony, bo moim zdaniem zbędne jest pobieranie obiektu co każde wpisanie literki w inputa. Chyba że to tak bardzo nie obciąża strony
komentarz 28 sierpnia 2020 przez ScriptyChris Mędrzec (190,190 p.)

Hmm, jeśli jedynym inicjatorem pobierania obiektów z API jest funkcja getChampions wołana przez useEffect, to pusta tablica w drugim parametrze powinna sprawić, że hook jest odpalany tylko dwa razy: dla pierwszego renderu (odpowiednik componentDidMount) i przy usuwaniu komponentu (odpowiednik componentWillUnmount) - a nie na każdy jego rerender.

If you want to run an effect and clean it up only once (on mount and unmount), you can pass an empty array ([]) as a second argument. This tells React that your effect doesn’t depend on any values from props or state, so it never needs to re-run.

Ile razy w trakcie życia componentu są pobierane dane z API? Czy to pobieranie jest inicjowane dodatkowo z innego miejsca niż tylko z useEffect?

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

+1 głos
1 odpowiedź 359 wizyt
0 głosów
0 odpowiedzi 57 wizyt
pytanie zadane 14 lutego w JavaScript przez JaaO Początkujący (490 p.)
0 głosów
0 odpowiedzi 71 wizyt

92,582 zapytań

141,433 odpowiedzi

319,666 komentarzy

61,966 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...