React Native Mapped Image grid

Я надеюсь получить помощь в создании сетки изображений в React Native.

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

Это мой код до сих пор:

  <ScrollView style = {{flex: 1,  backgroundColor: 'yellow', 
    }} >
        {data.map(image => (
          <View style = {styles.viewpic}>
           <Image style = {styles.image} source = {{uri:image.url }}/>
           </View> 
           ))}
       </ScrollView>
    </SafeAreaView>

Это мой CSS:

 viewpic: {
    flex: 1,
    flexWrap:'wrap',
    justifyContent: 'center',
    flexDirection: 'row',
     backgroundColor: 'blue',
  },
  image: {
    justifyContent: 'center',
    height: 115,
    width: 115,
    margin:6,
    backgroundColor: 'red',
  }

Это то, что я сейчас получаю:

До сих пор я пробовал каждую комбинацию CSS, которую только мог придумать, но пока ничего не сработало. Я также попробовал FLATLIST, но, честно говоря, мне не удалось должным образом преобразовать мой текущий код, чтобы он «соответствовал» требованиям Flatlists.

Спасибо всем за вашу помощь! Ваше здоровье!

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
2
0
143
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

это ошибка HTML. На самом деле вы ставите стиль flex-wrap для каждого элемента, поэтому у вас один элемент на строку. Вы должны поместить все элементы в div flex-wrap, и он будет работать. Я надеюсь, что это поможет вам

          <View style = {styles.viewpic}>
           {data.map(image => (
           <Image style = {styles.image} source = {{uri:image.url }}/>
           ))}
          </View> 
       

Это, к сожалению, не работает.

G6ix 07.10.2022 21:11

странно, у вас такой же результат?

Asmoth 07.10.2022 21:46

Да, я пробовал разные комбинации CSS, но ничего не изменилось. Попытка FlatList снова, чтобы увидеть, получу ли я лучший результат. Спасибо!

G6ix 07.10.2022 21:50

Проверьте это, это то, что вы хотите? codeandbox.io/s/little-breeze-7jqdwt

Asmoth 07.10.2022 22:20

Правильно, но если я создам 6 x "<Image>", это сработает. Однако мой проект вызывает API, который может отправлять обратно любое количество изображений, которое выберет пользователь. Вот почему вы видите только один тег изображения. У меня такое ощущение, что это ограничение реакции родного, но я работаю над тем, чтобы найти способ обойти это.

G6ix 07.10.2022 22:33
Ответ принят как подходящий

Я смог найти ответ! Я объединил 2 урока + несколько трюков и у меня получилось!

Сначала я построил свою сетку изображений, используя «FlatList». Я нашел отличный учебник с пошаговым описанием здесь (не моя страница, не аффилированная):Учебник Youtube Сначала я получал тот же результат, пока не добавил "numColumns = {}"

Вот код:

...
  const numberOfCols = 3
...
return(

.

<View>
 <FlatList
        data = {data}
        keyExtractor = {(item, index)=>{return item.date}}
        numColumns = {numberOfCols}
        renderItem = {({item, index})=>(
          <View style = {styles.viewpic}>
            <Image style = {styles.image} source = {{uri:item.url}}/>
          </View>
        )}
        />

Затем я использовал немного стратегии из этого урока (не моя страница, не аффилированная): Учебник по ютубу

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

Вот конечный результат:

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