【问题标题】:React native redux and ListView反应原生 redux 和 ListView
【发布时间】:2016-07-04 13:36:19
【问题描述】:
我至少见过一个类似的question。
但是,我对在具有 ListView 的 react 本机应用程序中使用 redux 的模式感兴趣。减速器应该每次都创建一个新的 ListView.Datasource 吗?这会导致性能问题等,正如我指出的问题所问的那样?还是我应该采取偏差并从具有ListView 的组件的componentWillReceiveProps() 调用setState({datasource : new ListView.Datasource()})?
【问题讨论】:
标签:
react-native
react-redux
【解决方案1】:
我选择了 componentWillRecieveProps 路线。鉴于cloneWithRows 每次更新时都需要一个新对象(取决于您如何使用rowHasChanged),因此需要将一组新数据传递给它。幸运的是,使用 redux reducer,就您返回的数据而言,这种模式无论如何都是预期的。
这是我在自己的应用中的做法:
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)
});
}
如果列表视图中的当前选定(突出显示状态)导航项需要更改,我决定创建一个新的 day 对象,您可以忽略该块。而不是每次都返回全新的对象