2016-07-04 24 views
13

Ich habe mindestens eine ähnliche question gesehen.Reagieren native Redox und ListView

Allerdings interessiert mich, was das Muster für redux Verwendung in einer reaktiven nativen Anwendung mit einem ListView ist. Sollten die Reduzierer jedes Mal eine neue ListView.Datasource erstellen? Wird dies zu Leistungsproblemen etc. führen, wie es wahrscheinlich die Frage ist, auf die ich hingewiesen habe? Oder sollte ich nur eine Abweichung nehmen und setState({datasource : new ListView.Datasource()}) von componentWillReceiveProps() der Komponente aufrufen, die die ListView hat?

Antwort

13

Ich ging die Route componentWillRecieveProps. Angesichts der cloneWithRows benötigt ein neues Objekt jedes Mal aktualisiert (je nachdem, wie Sie rowHasChanged verwenden), muss man einen neuen Datensatz an ihn übergeben. Zum Glück mit redux reducers, wird diese Art von Muster sowieso in Bezug auf die Daten, die Sie zurückgeben.

Hier ist, wie ich tat es in einer App von mir:

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

Der if-Block Sie ignorieren können, das ist die Entscheidung mir ein neues Tag-Objekt, wenn der aktuell ausgewählte (Highlight-Zustand) nav Element in eines machen Listenansicht muss geändert werden. Anstatt jedes Mal ganze neue Objekte zu senden, geben Sie

ein