Как отобразить массив внутри объекта JSON в react-native

Я разрабатываю приложение с помощью react-native, используя API RESTfull с бэкэндом laravel, у меня есть объект, в котором есть массивы. Я использую его для создания страницы профиля пользователя. но я не знаю, как отображать эти массивы. вот мой ответ API:

{
  meta: {
    code: 200,
    message: 'Success',
    errors: []
  },
  data: {
    users: [
      {
        personal_information: {
          full_name: 'hesam sameni',
          avatar: 'https://aaa/file/image/hesamsameni.jpeg',
          rate: '0.0',
          phone: [],
          location: {
            name: 'something',
            lat: 00,
            long: 00,
            address: 'something',
            distance: 00
          },
          about: {
            quote: 'something',
            bio: 'something'
          },
          topics: {
            a: 'a',
            b: 'b',
            c: 'c',
            d: 'd'
          },
          stats: {
            a: 10,
            b: 0,
            c: 0,
            d: 0,
            e: 0
          },
          experiences: [
            {
              title: 'something',
              organization: 'something',
              start: 'something',
              end: 'something'
            }
          ],
          educations: [
            {
              title: 'something1',
              university: 'something1',
              major: 'something1',
              start: 'something1',
              end: 'something1'
            },
            {
              title: 'something2',
              university: 'something2',
              major: 'something2',
              start: 'something2',
              end: 'something2'
            }
          ]
        }
      }
    ]
  }
};

Например, как я могу показать образование в профиле пользователя?

вот метод рендеринга (я уже получил данные из API и сохранил в состоянии {this.state.dataSource}

метод визуализации:

render() {
  return (
    <View>
      <FlatList
        data = {this.state.dataSource}
        keyExtractor = {(item, index) => index.toString()}
        renderItem = {({ item }) => (
          <View>
            <Text>Name: {item.personal_information.full_name}</Text>
            <Text>Rate: {item.personal_information.Rate}</Text>
            <Text>Educations:</Text>
            // Here I need to display all of user's educations
          </View>
        )}
      />
    </View>
  );
}

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

вы использовали this.setState для обновления данных в состоянии?

Shashin Bhayani 10.04.2019 08:14

Да, я могу отображать элементы, которых нет в массиве, например, я могу отображать полное имя и рейтинг, но я хочу отображать оба элемента в массиве образования.

hesam sameni 10.04.2019 08:33
Умерло ли Create-React-App?
Умерло ли Create-React-App?
В этом документальном фильме React.dev мы исследуем, мертв ли Create React App (CRA) и какое будущее ждет этот популярный фреймворк React.
Освоение React Native: Пошаговое руководство для начинающих
Освоение React Native: Пошаговое руководство для начинающих
React Native - это популярный фреймворк с открытым исходным кодом, используемый для разработки мобильных приложений. Он был разработан компанией...
В чем разница между react native и react ?
В чем разница между react native и react ?
React и React Native - два популярных фреймворка для создания пользовательских интерфейсов, но они предназначены для разных платформ. React - это...
От React к React Native: Руководство для начинающих по разработке мобильных приложений с использованием React
От React к React Native: Руководство для начинающих по разработке мобильных приложений с использованием React
Если вы уже умеете работать с React, создание мобильных приложений для iOS и Android - это новое приключение, в котором вы сможете применить свои...
Хуки React: что это такое и как их использовать
Хуки React: что это такое и как их использовать
Хуки React - это мощная функция библиотеки React, которая позволяет разработчикам использовать состояние и другие возможности React без написания...
0
2
1 468
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Так что .map сам по себе предлагает только одно значение, которое вас волнует... Тем не менее, есть несколько способов решить эту проблему:

// instantiation
this.state.dataSource

//Using `.map` directlly
this.state.dataSource.map((obj, index)=> {
    console.info(obj);
    return(
        <View />
    )
});

// what's built into Map for you
this.state.dataSource.forEach( (val, key) => console.info(key, val) ); 

// what Array can do for you
Array.from( this.state.dataSource ).map(([key, value]) => ({ key, value }));

// less awesome iteration
let entries = this.state.dataSource.entries( );
for (let entry of entries) {
  console.info(entry);
}

Обратите внимание, во втором примере я использую много нового... ...Array.from берет любой итерируемый объект (в любой момент, когда вы используете [].slice.call( ), плюс наборы и карты) и превращает его в массив... ... Карты при принуждении к массиву превращаются в массив массивов, где el[0] === key && el[1] === value; (в основном, в том же формате, в котором я предварительно заполнил свой пример карты выше).

Я использую деструктурирование массива в позиции аргумента лямбды, чтобы присвоить эти точки массива значениям, прежде чем возвращать объект для каждого el.

Если вы используете Babel в продакшене, вам нужно будет использовать полифилл браузера Babel (который включает в себя «core-js» и «regenerator» Facebook). Я совершенно уверен, что он содержит Array.from.

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

попробуйте это, это поможет вам достичь того, чего вы хотите. если не подскажите..

     <FlatList
  data = {this.state.itemArray}
  keyExtractor = {(item, index) => index.toString()}
  renderItem = {({item}) =>{
    console.warn(item.data.users[0].personal_information.educations)
  return(<FlatList
data = {item.data.users[0].personal_information.educations}
keyExtractor = {(item, index) => "D"+index.toString()}
renderItem = {({item}) =>{
console.warn(item)
}
}/>)
  }
}/>

если вы хотите получить что-то из личной информации попробуйте этот пример: console.warn(item.data.users[0].personal_information.full_name)

Я могу получить full_name и другие вещи, которые не являются массивом, но я хочу отобразить оба элемента в образовании.

hesam sameni 10.04.2019 08:32

Вы предлагаете использовать плоский список внутри списка? я попробую

hesam sameni 10.04.2019 08:41

вы можете использовать даже список разделов facebook.github.io/react-native/docs/0.47/sectionlist для этого также

Tanveerbyn 10.04.2019 08:43
render(){
     console.info(this.state.data.users[0].personal_information.educations,'cdscdscdcds')
    return(
        <div>

            {this.state.data.users.map((value)=>{
                console.info(value,'cd')
            })}
        </div>

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