2
votes

Comment créer une liste de sélection horizontale dans React Native, le meilleur package pour cela?

J'ai développé une application mobile en React Native. Une liste de sélection horizontale est nécessaire dans un écran (Désolé, je n'ai pas trouvé le nom du composant).

Conception de la page:

 entrez la description de l'image ici

Dans l'image, après le prix, l'unité et l'intervalle de temps ont une boîte de sélection comme l'utilisateur ne peut sélectionner qu'une seule boîte avec cette conception horizontalement. Comment y parvenir.

Je n'ai aucune idée de comment y parvenir, veuillez me guider s'il existe un package pour cela, ou y a-t-il un moyen pour y parvenir?

Mise à jour: J'ai réalisé la mise en page en utilisant FlatList dans React native. Maintenant, comment atteindre la fonction de sélection unique. Voici ma Flatlist

<FlatList
                        horizontal={true}
                        data={this.qtyList}
                        keyExtractor={item => item.id.toString()}
                        showsHorizontalScrollIndicator={false}
                        renderItem={({ item }) => (
                                <TouchableHighlight 
                                onPress={() => {
                                    this.props.qtyListSelector(item.id)
                                }}
                                >
                                <Card
                                containerStyle={{  borderRadius: 5 }}
                                >
                                <Text>
                                {item.qty}
                                </Text>
                                </Card>
                            </TouchableHighlight>
                        )}
                    />

J'utilise Redux pour saisir la valeur de la carte touchée. Maintenant, je dois changer de couleur et mettre en surbrillance la carte sélectionnée par l'utilisateur comme l'exemple ci-dessus. Je pense que cela peut être fait en utilisant l'état au niveau du composant. S'il vous plaît guider comme, je n'ai pas pu comprendre les étapes comme je suis débutant


0 commentaires

3 Réponses :


0
votes

Vous pouvez utiliser FlatList avec horizontal true.

<FlatList horizontal={true}/>

Et aussi dans ce lien, vous pouvez trouver l'utilisation horizontale FlatList. Cela peut vous donner un point de départ.

https: // ruesmartdev .com / create-horizontal-list-react-native /


2 commentaires

si oui, comment sélectionner et mettre en évidence un seul élément que l'utilisateur sélectionne? est-ce possible avec flatlist?


Par exemple, chaque élément FlatList peut être enveloppé par un TouchableOpacity et vous pouvez faire ce dont vous avez besoin dans le onPress de TouchableOpacity. Vous pouvez donner un highligt avec style. De plus, si vous le souhaitez, vous pouvez utiliser un package tel que react-native-snap-carrousel ou autre. Il peut gérer tout ce que vous voulez.



0
votes

Si la solution Flatlist horizontale ne fonctionne pas pour vous, j'ai eu de bonnes expériences en utilisant https: //www.npmjs.com/package/swiper .


0 commentaires

0
votes

Ceci peut être réalisé sans aucune bibliothèque externe, ou vous pouvez utiliser le swiper natif de réaction, mais cette bibliothèque a quelques problèmes quand il s'agit de sélectionner. L'approche que vous pouvez utiliser sans aucune bibliothèque est

renderItem =({item, index}) => {

  return (
  <TouchableOpacity 
   onPress={() => {
   // I wrote it like this so you could understand.
   // first get your previous array
   const tempArray = this.state.data;
   // If you want single selection, add the code I wrote in the end 
   here.
   // second change the selected value of this item
   tempArray[index].selected = true;
   // update the state
   this.setState({ data: tempArray, selectedItem: item });
   // here selected Item is not used, but you might need it in future purpose.
}}
   style={{ backgroundColor: item.selected ? 'orange' : 'white' }}>
  </TouchableOpacity>
);
}

...

<FlatList 
   horizontal={true}
   data={this.state.data} 
   extraData={this.state.selectedItem}
   renderItem={this.renderItem}
/>

Vous avez besoin d'extraData pour vous assurer que votre FlatList , ré-affiche lorsque vous appuyez sur l'élément individuel. Maintenant, dans votre méthode renderItem, vous pouvez simplement utiliser quelque chose comme,

state = {
   data: [
     { key: '1', name: 'mark', selected: false },
     { key: '2', name: 'john', selected: false }
   ],
   selectedItem: null
}

Cette approche sélectionnera plusieurs éléments ... Si vous souhaitez désélectionner le précédent. alors vous devez mapper sur le tableau précédent ou utiliser l'état selectedItem pour trouver l'élément à l'aide de la méthode findIndex pour les tableaux (vous devez l'implémenter dans onPress) pour la carte, un exemple simple serait

const tempArray = tempArray.map ((singleItem) => {... singleItem, selected: false})); p >

REMARQUE: j'ai écrit ce code uniquement ici, il peut donc y avoir des erreurs. Veuillez me le faire savoir le cas échéant.


5 commentaires

Je recopie comme tu l'as dit, mais rien ne se passe. Impossible de comprendre l'erreur également car il n'y a pas d'erreur! (désolé totalement un débutant)


Cela devrait fonctionner, assurez-vous que vous faites tout correctement et, si possible, publiez votre code


J'ai obtenu le look en utilisant une liste plate et une propriété horizontale. Mais, comment mettre en œuvre la procédure de sélection. En tant que, je dois obliger l'utilisateur à sélectionner une option parmi les données.


J'ai également ajouté le code pour atteindre cette fonctionnalité,


Peut-on discuter ? En fait, ne pouvait pas comprendre le frère de code!