React Native, ограничение вывода JSON из внешнего документа

#android #json #react-native #react-native-flatlist

#Android #json #react-native #react-native-flatlist

Вопрос:

Я пытаюсь вывести содержимое JSON в Flatlist, как описано в документах react native. Вывод содержимого на страницу — это не проблема, с которой я сталкиваюсь, я пытаюсь ограничить объем данных, которые выводятся из каждого поля JSON.

Например, существует 4 состояния: физическое, ментальное, эмоциональное и духовное. Я пытаюсь вывести только первый элемент, поэтому в данном случае физический, или [0].

У меня есть следующий код, который будет выводить все 4 значения, и у меня возникают проблемы с ограничением значений только первым элементом:

 <FlatList
data={this.state.dimensionJson}
renderItem={({item}) => <Text style={[styles.dimensionTitle, { color: progress[3] }]}>{item.type}</Text>}
keyExtractor={({id}, index) => id}
/> 
  

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

 componentDidMount(){
return fetch(url,{
  method: 'GET',
  headers: {
    Accept: 'applications/json',
  },
},
)
.then((response) => response.json())
.then((responseJson) => {
  this.setState({
    isLoading: false,
    titleData: responseJson.title,
    fullJSON: responseJson,
    dimensionJson: responseJson.dimensions,

  }, function() {



    //Potentially write if function in here for limiting output
  });
})
.catch((error) =>{
  console.error(error)
})}
  

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

 {
  "description": "Begin by identifying  the dimension of energy you would like to address. Your scores can guide the way.",
  "title": "Choose a Dimension",
  "dimensions": [
    {
      "id": "0",
      "type": "Physical",
      "desc": "Physical energy is the quantity of  energy. This dimension shapes our sustainability and long-term productivity."
     },
    {
      "id": "1",
      "type": "Mental",
       "desc": "Mental energy is the focus of our energy. It influences our 
concentration, control of attention, and the likelihood of making mistakes."
    },
    {
      "id": "2",
      "type": "Emotional",
      "desc": "Emotional energy is the quality of our energy. It affects how 
resilient we are, especially when faced with complexity."
    },
    {
      "id": "3",
      "type": "Spiritual",
      "desc": "Spiritual energy is the energy we derive from serving a  
greater purpose. It inspires us and answers the question ‘Why do I get out 
of bed each morning?"
    }
  ]
 }
  

Комментарии:

1. что выводит {item.type}? какой элемент state содержит эти данные json?

2. @soldfor Я думаю, что вы привели меня к причине проблемы, мне может потребоваться создать массив внутри состояния, в котором будут храниться данные, а затем проанализировать данные как обычный массив. Не совсем уверен, что это сработает, но я собираюсь попробовать сегодня

3. Точно. Когда вы получите свой ответ, сохраните ответ в состоянии. Затем сопоставьте этот массив

Ответ №1:

Попробуйте нарезать данные

  <FlatList
                        data={this.state.dimensionJson.slice(0,1)}
                        renderItem={({item}) => <Text style={[styles.dimensionTitle, { color: progress[3] }]}>{item.type}</Text>}
                        keyExtractor={({id}, index) => id}
                        /> 
  

Комментарии:

1. Спасибо за предложение, к сожалению, это не совсем работает. Я попытался реализовать это для данных, но получаю ошибку типа: undefined не является объектом, затем я переместил его в {item.type.slice(0,1)}, который по сути имеет тот же вывод, что и {item.type[1]}. Я пытаюсь вывести все слово «Physical» и ничего больше, в отличие от только первого символа, мой плохой

2. что выводит {item.type}?

3. @soldfor выводит физические, ментальные, эмоциональные и духовные данные. Я бы хотел, чтобы он выводил только физический