Плоский список данных рендеринга из json api как 3 элемента в строке

Привет всем, я получаю данные из json api и использую плоский список для рендеринга элементов. Я использую свойство numColumns для отображения 3 элементов в строке но предположим, что у меня есть 7 или 8 предметов у меня проблемы с рендерингом. макет, который я хочу отобразить, выглядит следующим образом

X X X
X X X
X X

но я получаю следующее: макет

Вот мой код:

    _renderItem = ({ item, index }) => (
            <View style = {categorystyles.Category} key = {index}>
                <TouchableOpacity activeOpacity = {.5}
                    onPress = {() => this.props.navigation.navigate('ListingPerCategory', { catid: item.id })}>
                    {item.category_app_icon ? <Image style = {categorystyles.CategoryImg}
                        source = {{ uri: `${item.category_app_icon}` }} /> :
                        <Image style = {categorystyles.CategoryImg}
                            source = {require('../assets/coffeecup.png')} />}
                </TouchableOpacity>
                <Text style = {{ marginTop: 5 }}>{escape(item.name).replace('%20', ' ').replace('%26amp%3B%20', ' ')}</Text>
            </View>
        )
   render(){
     return(
        <FlatList
        horizontal = {false}
        data = {this.state.categories}
        keyExtractor = {(item, index) => item.id}
        numColumns = {3}
        renderItem = {this._renderItem}
    />
     )
   }

    const styles = StyleSheet.create({
       Category: {
            flex:1,
            justifyContent: 'center',
            alignItems:'center',    
            margin:5
        },
        CategoryImg: {
            resizeMode: 'contain',
            width: 50,
            height: 50
        }
    })

это из-за центра justifyContent или alignItems. удалите их по одному и проверьте. проблема должна быть решена. если не дайте мне знать

anil sidhu 22.08.2018 12:35
Умерло ли 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 без написания...
5
1
1 537
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Flatlist лениво загружает элементы - это означает, что они отображаются при прокрутке. Это поведение плоского списка из-за производительности. Если вы хотите визуализировать все вместе, вы должны вместо этого использовать ScrollView

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

Поскольку вы используете flex: 1 и alignItems: center, ваш макет будет выглядеть так: After Image

Следовательно, items внутри него будет выровнен по центру вертикально и по горизонтали на основе элементов макет.

Вместо этого вам нужно проверить width устройства и добавить макет на его основе.

В твоих стилях

Category: {
  flex:1,
  maxWidth: Dimensions.get('window').width / 3 - 10, // Width / 3 - (marginLeft and marginRight for the components)
  justifyContent: 'center',
  alignItems:'center',    
  margin:5
},

После добавления этого стиля макет будет выглядеть так After Image

если вы хотите, чтобы это отображалось

X X X
X X X
X X

нет

X X X
X X X
 X X

просто измените стиль:

   const styles = StyleSheet.create({
   Category: {
        flex:1,
        justifyContent: 'flex-start',
        alignItems:'center',    
        margin:5
    },
    CategoryImg: {
        resizeMode: 'contain',
        width: 50,
        height: 50
    }
})

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