2016-07-04 44 views
13

Ho visto almeno uno simile question.Reagire nativo redux e ListView

Tuttavia, sono interessato a quale è il modello per l'utilizzo di Redux in un'applicazione nativa reattiva con uno ListView. I riduttori dovrebbero creare ogni volta un nuovo ListView.Datasource? Ciò causerà problemi di prestazioni ecc., Come probabilmente richiesto dalla domanda che ho fatto notare? O devo solo prendere una deviazione e chiamare setState({datasource : new ListView.Datasource()}) da componentWillReceiveProps() del componente che ha il ListView?

risposta

13

Sono passato al percorso componentWillRecieveProps. Dato che cloneWithRows necessita di un nuovo oggetto ogni volta che viene aggiornato (in base a come si utilizza rowHasChanged), è necessario passare un nuovo set di dati ad esso. Fortunatamente con riduttori di ridondanza, questo tipo di schema è previsto comunque in termini di dati restituiti.

Ecco come ho fatto in un app di mine:

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) 
    }); 
} 

Il blocco if si può ignorare, che sono io decidere di fare un nuovo oggetto giorno se la corrente selezionata (stato highlight) nav elemento in un la visualizzazione elenco deve cambiare. Invece di restituire ogni volta nuovi oggetti interi