Как обрабатывать денормализованные данные для передачи в плоский список?

Я использовал повторный выбор для выбора ненормализованных (сопоставленных) данных для передачи в плоский список. Основная проблема в том, что предметы "стабильны". Значение звездочки находится внутри нормализованных данных, поэтому при нажатии на звездочку все будет пересчитано, что замедляет работу приложения.

Итак, мой вопрос: как я могу справиться с ненормализованными данными, когда ваши нормализованные данные часто меняются?

Решение, которое я нашел:

1) Отодвинуть интерактивные данные?

Но теперь я должен разделить данные при запуске и при каждом получении данных. Это медленно, но если вы используете "загрузчик" (ActivityIndicator/ обновление индикатора), это не будет настоящей проблемой. Так что теперь я могу денормализовать при повторном выборе, и срок действия кэша истечет только при получении данных: это хорошо.

2) Использовать селектор только на массиве идентификаторов, не касаясь нормализованных данных?

Нет необходимости отображать, если я могу позволить flatlist справиться с этим. Но для этого потребуется передать как массив, так и нормализованные данные в плоский список, используя массив для данных и нормализованные как экстраданные. Но теперь, я не уверен, есть тонна данных, переданных каждому элементу плоского списка.

3) Не использовать relect, но, возможно, разбить данные на страницы?

Теперь мне нужно отобразить только несколько элементов, которые увеличиваются с помощью onEndReach. Возвращаемый массив при нажатии на звездочку будет маленьким, поэтому обычно быстрый.

Где я думаю, что еще нужно повторно выбрать? сортировка данных В нормализованном источнике данных сортировка не является легкой. (первая карта, затем сортировка). Но трудно без использования повторного выбора для денормализации.

Есть идеи, по какому пути идти? Лучшие решения?

пс. извините за мой плохой английский, спасибо

1 ответ

1) Я обнаружил, что с помощью React.Component и прохождение нормализованной отфильтрованной опоры, это может хорошо работать. так что-то вроде:

  _renderItem = ({item}) => (
    <ListItem
      data={this.props.data[item.id]}
      onPressFavorite={this.props.onPressFavorite}
    />
  );

Это правильный шаблон?

Я не знаю, понял ли вы, но, возможно, решение не использует FlatList и повторяется следующим образом:

const normalizeData = []
Object.keys(normalizeData).map((key, id) => {
          const data = normalizeData[key];
return <WrapperComponent key={key} item={data} />
}

Вы также можете добавить и ScrollView, что позволит вам воссоздать поведение FlatList.

Другие вопросы по тегам