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

question-closed Re-render przez zmiane Redux state React

Object Storage Arubacloud
0 głosów
139 wizyt
pytanie zadane 19 maja 2020 w JavaScript przez poldeeek Mądrala (5,980 p.)
zamknięte 20 maja 2020 przez poldeeek

Moje filtry znajdują się w state Redux'a. W jednym komponencie je zmieniam, w drugim zaś na ich podstawie wysyłam zapytanie do bazy danych w firebase.

 

// filtry
    const filters = useSelector(state => state.mapRedux.filters)

    const createFiltersTable = () => {
        const tmp = Object.values(filters)
        const values = []
        tmp.map(el => {
            if(el.active)
                values.push(el.events_name)
        })
        console.log(values)
        return values;
    }

    const getAllEvents = async (start) => {
        let myEventsArray = [];
        await firebase.firestore().collection('wydarzenie')
            .where('sport', 'in', createFiltersTable())
            .where('miasto', '==', currentCity)
            .orderBy("data_rozpoczecia")
            .startAfter(start)
            .limit(limit)
            .get().then(snapshot => {
                if (snapshot.size < limit) setShowMore(false)
                snapshot.forEach(doc => {
                    let info = doc.data()
                    let el = {
                        id: doc.id,
                        ...info
                    }
                    myEventsArray.push(el)
                });
            })
        let new_array = allEvents.concat(myEventsArray)
        setAllEvents(new_array);
    }

    useEffect(() => {
        getAllEvents(new Date());
    }, [])

 Po zmianie filtrów komponent wyżej się nie re-renderuje i dopóki nie wymuszę jakoś ponownego renderowania ( przłączenie między komponentami głównymi) moje filtry się nie uaktualnią. A chciałbym aby po zmianie jednego filtru ten komponent się cały re-renderował, aby filtry na bieżąco się aktualizowały.

komentarz zamknięcia: Rozwiązane

1 odpowiedź

0 głosów
odpowiedź 19 maja 2020 przez poldeeek Mądrala (5,980 p.)

Troche poprawiłem - tj. 

    useEffect(() => {
        setAllEvents([])
        getAllEvents(new Date());
    }, [filters])

 

I teraz jest fajnie, ponieważ komponent się re-renderuje. Jednak nie mam pojęcia czemu setAllEvent([]) nie czyści tablicy wydarzeń przez co funkcja getAllEvents(new Date()) dodaje (przefiltrowane) nowe wydarzenia do starej tablicy.

1
komentarz 19 maja 2020 przez rafal.budzis Szeryf (85,260 p.)
Wydaje się że bład może być w reducerze z stora. Masz jak pokazać cały kod?
komentarz 20 maja 2020 przez poldeeek Mądrala (5,980 p.)
Już rowiązałem problem. Dodałem hook'i useCallback createFilterTable i getAllEvents i dodałem w nich zależności między sobą, funkcję getAllEvents dodałem też do tej tablicy warunkowego wywołania w useEffect.

Podobne pytania

0 głosów
1 odpowiedź 138 wizyt
pytanie zadane 4 maja 2020 w JavaScript przez poldeeek Mądrala (5,980 p.)
0 głosów
1 odpowiedź 109 wizyt
pytanie zadane 31 sierpnia 2020 w JavaScript przez Bish0p Obywatel (1,940 p.)
0 głosów
1 odpowiedź 270 wizyt
pytanie zadane 2 czerwca 2023 w JavaScript przez DzikieHarce Użytkownik (690 p.)

92,576 zapytań

141,425 odpowiedzi

319,650 komentarzy

61,961 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!

...