Как отобразить массив в объекте массива в React Native? - PullRequest
0 голосов
/ 07 января 2019

В приведенном ниже коде показаны 2 функции, которые ДОЛЖНЫ отображать компоненты на экране. Когда я отображаю массив, компоненты отображаются. Проблема в том, что когда я пытаюсь отобразить массив в объекте в массиве, компоненты не будут отображаться.

Итак, давайте представим, что у нас есть этот набор данных:

const categories = [
  {
    title: "Burgers",
    items: [
      {
        item_number: 0,
        name: "Cheese Burgers"
      },
      {
        item_number: 1,
        name: "Double Cheese Burgers"
      },
      {
        item_number: 2,
        name: "Triple Cheese Burgers"
      }
    ]
  }
];

И тогда у нас есть эта функция рендеринга:

 render() {
    const { backgroundImage, menuIndex } = this.props.screenProps;

    return (
      <View>
        {/*THIS DOES RENDER*/}
        {categories ? (
          categories.map((category, i) => (
            <Card key={i} image={backgroundImage}>
              <Text style={{ marginBottom: 10 }}>{category.title}</Text>
            </Card>
          ))
        ) : (
          <ActivityIndicator style={styles.center_screen} />
        )}

        {/*THIS DOES NOT RENDER*/}
        {categories ? (
          categories[menuIndex].items.map((item, i) => {
            <View key={i}>
              {console.warn(item.name)}
              <Text>{item.name}</Text>
            </View>;
          })
        ) : (
          <ActivityIndicator style={styles.center_screen} />
        )}
      </View>
    );
  }
}

Переменная «категории» вызывается из API, и пока он находится в пути, отображается индикатор активности. Когда он не нулевой, я могу отображать массив и отображать текст каждого объекта. Однако, когда я пытаюсь отобразить массив в объекте массива, я не могу отобразить текст на экране. Когда я записываю предупреждение на экран, я вижу «item.name», но не в текстовом компоненте.

Как и почему это происходит?

Ответы [ 2 ]

0 голосов
/ 07 января 2019
{/*THIS DOES NOT RENDER*/}
{categories ? (
  categories[menuIndex].items.map((item, i) => {
    return (
     <View key={i}>
      {console.warn(item.name)}
      <Text>{item.name}</Text>
    </View>
    );
  })
) 

Вы пытались вернуть return ваше мнение?

0 голосов
/ 07 января 2019

Вы пропустили инструкцию возврата внутри карты

изменение

categories[menuIndex].items.map((item, i) => {
            <View key={i}>

до

categories[menuIndex].items.map((item, i) => {
       return <View key={i}>

Если у вас есть пользовательское выражение (многострочные выражения), вам нужно написать некоторую пользовательскую логику внутри итератора и, следовательно, вы хотите обернуть ее в фигурные скобки {}, таким образом, ваш обратный вызов карты ожидает, что вы вернете результат.

Демо

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