Добавьте последний элемент в конец FlatList

Я пытаюсь добиться следующего, тогда как все, кроме последнего, являются обычными изображениями, поступающими из массива.

Добавьте последний элемент в конец FlatList

В настоящее время это код для FlatList:

<FlatList
  data = {images}
  numColumns = {3}
  // ListFooterComponent = {
  // <View style = {[StyleSheet.actionUploadedPictureFrame , {height: PIC_HEIGHT, width: PIC_WIDTH}]}>
  //     <Image source = {require('../../../images/add-icon.png')} />
  // </View>}
  renderItem = { ({item, index}) => index == images.length -1 ?
     <View style = {{flexDirection: 'row'}}>
       <Image style = {[StyleSheet.actionUploadedPictureFrame , {height: PIC_HEIGHT, width: PIC_WIDTH}]} source = {{uri: item.url}} /> 
       <View style = {[StyleSheet.actionUploadedPictureFrame , {height: PIC_HEIGHT, width: PIC_WIDTH}]}>
         <Image source = {require('../../../images/add-icon.png')} />
       </View>
     </View>
    : <Image style = {[StyleSheet.actionUploadedPictureFrame , {height: PIC_HEIGHT, width: PIC_WIDTH}]} source = {{uri: item.url}} /> }
  keyExtractor = {(item, index) => index.toString()}
/>

Короче говоря, отображает изображения в массиве в таблице из 3 столбцов и проверяет последнее изображение в списке, и в дополнение к отображению изображения он также отображает этот знак плюс.

Однако это обязательно приведет к какой-то ошибке, если количество элементов в списке кратно 3, поскольку знак плюса, скорее всего, будет за пределами экрана. Если я использую ListFooterComponent, он отображает его в совершенно новой строке.

Кто-нибудь знает эффективную работу вокруг этого?

Как насчет того, чтобы добавить его как реальный элемент вашего массива изображений и обработать его рендеринг в условии внутри свойства renderItem?

Milore 22.01.2019 22:27
Умерло ли Create-React-App?
Умерло ли Create-React-App?
В этом документальном фильме React.dev мы исследуем, мертв ли Create React App (CRA) и какое будущее ждет этот популярный фреймворк React.
Освоение React Native: Пошаговое руководство для начинающих
Освоение React Native: Пошаговое руководство для начинающих
React Native - это популярный фреймворк с открытым исходным кодом, используемый для разработки мобильных приложений. Он был разработан компанией...
В чем разница между react native и react ?
В чем разница между react native и react ?
React и React Native - два популярных фреймворка для создания пользовательских интерфейсов, но они предназначены для разных платформ. React - это...
От React к React Native: Руководство для начинающих по разработке мобильных приложений с использованием React
От React к React Native: Руководство для начинающих по разработке мобильных приложений с использованием React
Если вы уже умеете работать с React, создание мобильных приложений для iOS и Android - это новое приключение, в котором вы сможете применить свои...
Хуки React: что это такое и как их использовать
Хуки React: что это такое и как их использовать
Хуки React - это мощная функция библиотеки React, которая позволяет разработчикам использовать состояние и другие возможности React без написания...
10
1
7 275
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Поскольку я не думаю, что выразился достаточно ясно, я попытаюсь правильно объяснить свою идею с помощью этого примера кода:

<FlatList
  data = {[...images, { plusImage: true }]}
  numColumns = {3}
  renderItem = {({ item }) => {
    if (item.plusImage) {
      return (
        <View
          style = {[
            StyleSheet.actionUploadedPictureFrame,
            { height: PIC_HEIGHT, width: PIC_WIDTH }
          ]}
        >
          <Image source = {require("../../../images/add-icon.png")} />
        </View>
      );
    }
    return (
      <Image
        style = {[
          StyleSheet.actionUploadedPictureFrame,
          { height: PIC_HEIGHT, width: PIC_WIDTH }
        ]}
        source = {{ uri: item.url }}
      />
    );
  }}
  keyExtractor = {(item, index) => index.toString()}
/>;

Я не знаю, лучше ли объединять такой массив данных непосредственно в реквизите data, но вы всегда можете объявить его раньше в методе рендеринга. Дайте мне знать, если это может соответствовать вашему запросу.

большое спасибо! Я хотел сделать именно это, но не очень разбирался в javascript (3 точки и конкатенация). Я не знал, как это сделать! Я проверю, как это происходит, и, возможно, проверю это как правильный ответ :)

Ren 22.01.2019 23:16

Пожалуйста! Это называется оператором распространения, очень полезным в мире реагирования (и js в целом)

Milore 22.01.2019 23:27

@Milore Отличный ответ !! Спасибо Милоре. +1 плюс от меня.

HarshitMadhav 26.12.2019 13:27

Это не элегантное решение. React Native должен был предоставить список данных в качестве параметра функции renderItem.

Zijian 16.10.2021 03:56

Я также столкнулся с той же ситуацией и нашел хороший способ, когда я проверил документацию FlatList, поэтому лучший способ, который я рекомендую, - это использовать ListFooterComponent, вы можете передать объект стиля для этот элемент с помощью ListFooterComponentStyleНажмите здесь, чтобы узнать больше.

Как вы можете прочитать в вопросе @Yokhen: Если я использую ListFooterComponent, он отображает его в совершенно новой строке.. Вот почему я написал это решение.

Milore 20.04.2020 12:58

Что ж, я думаю, что есть вариант стиля, ListFooterComponentStyle, так что вам не нужно беспокоиться о стиле.

Umair Ahmed 20.04.2020 16:27

Это необходимо, если вы хотите визуализировать компоненты от разных родителей в сетке, что, насколько я знаю, невозможно.

Ren 11.06.2020 22:19

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