Для react native есть ли способ реагировать только на определенные данные из файла json и отображать их?

#wordpress #react-native #filtering #display #data-processing

Вопрос:

Моя структура файла JSON выглядит следующим образом :

 {
     "shopData": [
      {
         "shop_id" : "1",
         "shop_name":"NTUC",
         "itemData":[
             {
             "id" : "3",
             "shop_name":"NTUC",
             "image" :"https://i2.wp.com/www.downshiftology.com/wp-content/uploads/2021/01/Baked-Salmon-1-2.jpg",
             "name":"Salmon fillet",
             "price": 16,
             "purchase_limit": "5",
             "stock": "20"
         },
         {
             "id" : "1",
             "shop_name" :"NTUC",
             "image" : "https://images.unsplash.com/photo-1603664454146-50b9bb1e7afa?ixid=MnwxMjA3fDB8MHxzZWFyY2h8MTd8fG9yYW5nZXxlbnwwfHwwfHw=amp;ixlib=rb-1.2.1amp;w=1000amp;q=80",
             "name" : "Orange",
             "price": 10,
             "purchase_limit": "3",
             "stock": "15"
          },
          {
             "id" : "2",
             "shop_name" :"NTUC",
             "image" :"https://upload.wikimedia.org/wikipedia/commons/8/89/Tomato_je.jpg",
             "name":"Tomato",
             "price": 5,
             "purchase_limit": "7",
             "stock": "18"
          } ,
         {
             "id" : "4",
             "shop_name" : "NTUC",
             "image": "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRIK0wJschQcumCEBOnWbs6qcjZHcPpHPRETQamp;usqp=CAU",
             "name":"Greens",
             "price": 3,
             "purchase_limit": "3",
             "stock": "25"
         }
 
 
         ]
         
       },
       {
         "shop_id" : "2",
         "shop_name":"GIANT",
         "itemData": [
             {
                 "id" : "5",
                 "shop_name" : "GIANT",
                 "image": "https://www.jocooks.com/wp-content/uploads/2020/05/dark-rye-bread-1-17.jpg",
                 "name" : "RyeBread",
                 "price": 20,
                 "purchase_limit": "5",
                 "stock": "15"
              },
              {
                "id" : "6",
                "shop_name" : "GIANT",
                "image": "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQFca-tLIQoXKEBi8EkM4eAmh0cWccPtE34fAamp;usqp=CAU",
                "name" : "Carrot",
                "price": 7,
                "purchase_limit": "6",
                "stock": "15"
             }
 
         ]
 
 
       }
            
     ]   
}

 

Для этого есть ли способ, с помощью которого я могу выборочно выбирать, какой только один набор данных отображать в моем Flatlist?

Например, я хочу отображать данные только с shop_name = "GIANT"

Редактировать: есть ли какой-нибудь способ выбрать определенный товар (магазин) из shopData массива, а затем отобразить их с помощью FlatList ?

Ответ №1:

В React Native (и Javascript) вам нужно сопоставлять данные JSON, которые анализируются как объекты Javascript. И при циклическом просмотре их (например, map()) вы можете условно отображать их.

Однако в примере с плоским списком вы можете заранее подготовить данные, используя useMemo, чтобы запомнить отфильтрованные данные.

 import React, { useMemo } from 'react'

const Component = (data) => {

    const finalDataToDisplay = useMemo(() => {
        return data.filter( x => x.shop_name === "GIANT")
    },[data])

    return       <FlatList
                        data={finalDataToDisplay}
                        renderItem={renderItem}
                        keyExtractor={item => item.id}
                  />
}
 

Затем мы можем удобно использовать finalDataToDisplay in flat list в качестве источника данных.

.filter() https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter

<FlatList /> https://reactnative.dev/docs/flatlist