Подтвердить что ты не робот

Реагировать на native redux и ListView

Я видел по крайней мере одно подобное question.

Однако меня интересует, каков шаблон для использования редукции в реагирующем нативном приложении с ListView. Должны ли редукторы каждый раз создавать новый ListView.Datasource? Будет ли это причиной проблем с производительностью и т.д., Как, вероятно, задается вопросом, который я указал? Или я должен просто отклониться и вызвать setState({datasource : new ListView.Datasource()}) из компонента componentWillReceiveProps() компонента, который имеет ListView?

4b9b3361

Ответ 1

Я пошел по пути componentWillRecieveProps. Учитывая, что cloneWithRows требуется новый объект каждый раз при его обновлении (в зависимости от того, как вы используете rowHasChanged), нужно передать ему новый набор данных. К счастью с редукторами redux, такой тип шаблона ожидается в любом случае с точки зрения возвращаемых данных.

Вот как я сделал это в своем приложении:

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 вы можете игнорировать, что я решил создать новый объект дня, если текущее выбранное (состояние выделения) навигационное устройство в списке должно измениться. Вместо того, чтобы возвращать целые новые объекты каждый раз