показывать больше и показывать меньше кнопка переключения — это объекты с плоским списком в react native

#javascript #reactjs #react-native #react-native-flatlist

Вопрос:

У меня есть 10 объектов в массиве, и я создал представление сетки с помощью плоского списка. я хочу реализовать ту логику , что, во-первых ,будут показаны только три объекта, когда мы нажмем «Показать больше», все объекты должны быть видны в списке в виде сетки, и только три элемента могут отображаться в одной строке. как я могу это сделать

 lt;FlatList  data={item.tag}  renderItem={({ item }) =gt; (  lt;View style={{ flex: 1, flexDirection: "column", margin: 1 }}gt;  lt;View  //key={i}  style={{  backgroundColor: "#aaf0d1",  borderRadius: 20,  borderWidth: 1,  padding: "2%",  borderColor: "#40e0d0",  //height: '20%',  width: widthToDp("25%"),  //margin: '2%',  flex: 1,  flexDirection: "column",  margin: 1  }}  gt;  lt;Text numberOfLines={1} style={{ fontSize: 15, fontWeight: "300" }}gt;  #{item.title}  lt;/Textgt;  lt;/Viewgt;  lt;/Viewgt;  )}  //Setting the number of column  numColumns={3}  keyExtractor={(item, index) =gt; index} /gt;;  

Ответ №1:

Вы можете контролировать, сколько элементов вы визуализируете прямо в своей renderItem функции:

 lt;FlatList  data={item.tag}  renderItem={renderItem}  //Setting the number of column  numColumns={3}  keyExtractor={(item, index) =gt; index} /gt;;  ...  const [showMore, setShowMore] = useState(false) // we handle the show more state here  const onShowMore = () =gt; setShowMore(true)  const onShowLess = () =gt; setShowMore(false)   const renderItem = ({ item, index }) =gt; {  if (showMore) { // we display all items if show more state is true  return (  lt;View style={{ flex: 1, flexDirection: "column", margin: 1 }}gt;  lt;View  //key={i}  style={{  backgroundColor: "#aaf0d1",  borderRadius: 20,  borderWidth: 1,  padding: "2%",  borderColor: "#40e0d0",  //height: '20%',  width: widthToDp("25%"),  //margin: '2%',  flex: 1,  flexDirection: "column",  margin: 1  }}  gt;  lt;Text numberOfLines={1} style={{ fontSize: 15, fontWeight: "300" }}gt;  #{item.title}  lt;/Textgt;  lt;/Viewgt;  lt;/Viewgt;  )    } else {  if (index lt; 3) { // here we control how many items are displayed if show more is false  return   (  lt;View style={{ flex: 1, flexDirection: "column", margin: 1 }}gt;  lt;View  //key={i}  style={{  backgroundColor: "#aaf0d1",  borderRadius: 20,  borderWidth: 1,  padding: "2%",  borderColor: "#40e0d0",  //height: '20%',  width: widthToDp("25%"),  //margin: '2%',  flex: 1,  flexDirection: "column",  margin: 1  }}  gt;  lt;Text numberOfLines={1} style={{ fontSize: 15, fontWeight: "300" }}gt;  #{item.title}  lt;/Textgt;  lt;/Viewgt;  lt;/Viewgt;  )    }   }  }