2016-07-04 12 views
13

Widziałem co najmniej jeden podobny question.Reakcja natywnego redux i ListView

Jednak jestem zainteresowany tym, jaki jest wzór użycia redux w natywnej aplikacji reagującej o ListView. Czy reduktory powinny za każdym razem tworzyć nowy ListView.Datasource? Czy spowoduje to problemy z wydajnością itp., Jak prawdopodobnie zadał pytanie, które wskazałem? Czy powinienem po prostu wziąć odchylenie i zadzwonić pod numer setState({datasource : new ListView.Datasource()}) z componentWillReceiveProps() komponentu, który ma ListView?

Odpowiedz

13

Poszedłem na trasę componentWillRecieveProps. Biorąc pod uwagę, że cloneWithRows potrzebuje nowego obiektu za każdym razem, gdy jest aktualizowany (w zależności od tego, jak używasz rowHasChanged), należy przekazać mu nowy zestaw danych. Na szczęście dzięki reduktorom redux, ten rodzaj wzorca jest i tak oczekiwany pod względem zwracanych danych.

Oto jak to zrobiłem w aplikacji kopalni:

componentWillReceiveProps(newProps) { 
    let days = newProps.days; 
    if (newProps.viewingDayUuid !== this.props.viewingDayUuid) { 
    days = days.map((day) => { 
     if (day.uuid === newProps.viewingDayUuid || day.uuid === this.props.viewingDayUuid) { 
     return Object.assign({}, day); 
     } else { 
     return day; 
     } 
    }); 
    } 
    this.setState({ 
    dataSource: this.state.dataSource.cloneWithRows(days) 
    }); 
} 

if bloku można zignorować, to ja decydując się zrobić nowy dzień obiektu, jeśli obecny wybrany (stan kulminacyjnym) NAV przedmiot w sposób widok listy musi się zmienić. Zamiast zwracania całych nowych obiektów za każdym razem