Не могу повторно использовать мой компонент, он отображается только 1 раз

По какой-то причине, когда я вызываю свой компонент TouchSelect во второй раз, он не отображается, поэтому я не могу его повторно использовать. Я повторно использовал компоненты много раз до этого, поэтому я действительно озадачен этим. Кажется, проблема связана с FlatList, потому что, если я сделаю то же самое, но с функцией карты, все будет работать отлично, и я смогу без проблем повторно использовать свой компонент.

Я также заметил, что если я вставляю текст под компонентом TouchSelect, я его не вижу, если я помещаю свой текст перед компонентом, я вижу его без проблем. Вот это репозиторий: https://github.com/Themrpie/surveyapp

export default function App() {

  

  return (
    <SafeAreaView style = {styles.container}>
      <RadioSelect />
      <ChipSelect/>
      <Stars/>      
      <TouchSelect question='How likely are you to recommend our company?' />
      <TouchSelect question='THIS DOESNT SHOW' />
    </SafeAreaView>
  );
}

const styles = StyleSheet.create({
  container: {
    flex: 1,
    backgroundColor: '#fff',
    alignItems: 'center',
    
    
  },
  texto: {
    justifyContent:'center'
  }
});

На всякий случай я также публикую полный компонент кода:

import { FlatList, SafeAreaView, StyleSheet, Text, TouchableOpacity, View } from 'react-native'
import React, { useState } from 'react'
import { MD2Colors, Surface } from 'react-native-paper'

const options = [
    {
        id: 1,
        option: 1
    },
    {
        id: 2,
        option: 2
    },
    {
        id: 3,
        option: 3
    },
    {
        id: 4,
        option: 4
    },
    {
        id: 5,
        option: 5
    },
    {
        id: 6,
        option: 6
    },
    {
        id: 7,
        option: 7
    }, 
    {
        id: 8,
        option: 8
    },
    {
        id: 9,
        option: 9
    },
    {
        id: 10,
        option: 10
    },
    
   
]

const TouchSelect = ({question}) => {
    const [selected, setSelected] = useState()

  return (
      <Surface style = {styles.container}>    
        <Text style = {styles.question} >{question}</Text>      
         <FlatList data = {options} keyExtractor = {(item) => item.id} horizontal
            renderItem = {({item}) =>(
                <TouchableOpacity style = { selected === item.id? [{...styles.option}, {backgroundColor:MD2Colors.lightGreen600}]: styles.option} 
                    onPress = {() => setSelected(item.id)}  >
                    <Text style = {styles.texto} >{item.option}</Text>
                </TouchableOpacity> )
            }
            />       
     </Surface>
  )
}

export default TouchSelect

const styles = StyleSheet.create({
    container: {
        marginVertical: 20,
        backgroundColor:'white',
        alignItems:'center'

    },
    option: {
        marginHorizontal:2,
        backgroundColor: MD2Colors.amberA200,
        padding: 8,        
        borderRadius: 100,        
        
    },
    question: {
        fontSize: 20,
        fontWeight: 'bold',
        marginBottom: 15,
        textAlign: 'center',
        
    },
    texto: {
        fontSize: 20,
        fontWeight: 'bold',
        textAlign:'center',
        
        
        
    }

})

Если кто-нибудь может помочь мне с этой проблемой, я был бы очень признателен.

Я не вижу ничего плохого, можете ли вы предоставить код для полного компонента?

MrBens 08.10.2022 01:35

Хотел бы я помочь, но не могу помочь без воспроизводимой среды.

BARNOWL 08.10.2022 03:32

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

Eduardo Palacio 08.10.2022 06:32

Я добавил свой репозиторий github

MrPie 08.10.2022 14:00
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
4
4
93
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Оберните компонент App в ScrollView.

import { ScrollView } from 'react-native';  
export default function App() {

  return (
    <SafeAreaView style = {styles.container}>
      <ScrollView> // <---- Try to add this
        <RadioSelect />
        <ChipSelect/>
        <Stars/>      
        <TouchSelect question='How likely are you to recommend our company?' />
        <TouchSelect key = {2} question='THIS DOESNT SHOW' />
      </ScrollView>
    </SafeAreaView>
  );
}

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