Могу ли я вызвать props.navigation в данных плоского списка?

#react-native #view #parameters

#react-native #Вид #параметры

Вопрос:

У меня объявлен const, параметры которого переданы с другой страницы.

 const obj = this.props.navigation.state.params.item;
const itemArray = Object.values(obj.name)
  

Теперь я вызываю itemArray в данных плоского списка, см. Ниже.

Вот мой Flatlist:

  <FlatList
      key={this.keyExtractor}
      data={itemArray}
      renderItem={({item}) => this.renderText(item)}
    />
  

Проблема в том, что он не отображает текст. Он просто пустой.

Вот метод визуализации, который я вызываю в Flatlist:

 renderText = (itt) => {

    return (
      <View style={{ flex: 1, alignItems: "center", justifyContent: "center" }}>
        <ListItem 
        title={itt.name}
        />
      </View>
    )
  }
  

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

1. Вам следует обновить свой вопрос, добавив более подробную информацию о том, что вы передаете. В настоящее время в его нынешнем виде этот вопрос неясен.

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

3. @Andrew Я отредактировал свой вопрос. Пожалуйста, проверьте!

Ответ №1:

Поскольку FlatList не принимает объект, вам нужно найти обходной путь. Вы также должны создать массив и поместить туда свой объект.

 const obj = this.props.navigation.state.params.item;
    var propsArray = [];
    const itemArray = Object.assign(obj)
    propsArray.push(itemArray)

    return (
      <View>
        <FlatList
          key={this.keyExtractor}
          data={propsArray}
          renderItem={({ item }) => this.renderText(item)}
        />
      </View>
}
  

и ваш метод рендеринга должен остаться прежним:

 renderText = (itt) => {

    return (
      <View style={{ flex: 1, alignItems: "center", justifyContent: "center" }}>
        <ListItem 
        title={itt.name}
        />
      </View>
    )
  }
  

Ответ №2:

Вы должны иметь возможность использовать FlatList.

Вот как я бы реализовал это в методе рендеринга вашего компонента.

  1. Обратите внимание, что вам не нужно использовать this перед obj переменной.
  2. Кроме того, в вашей item функции renderItem неправильно написано spelt, что может вызвать проблемы, если вы это не исправите.
  3. Объект, который вы передаете, для работы этого конкретного кода должен представлять собой массив строк, что-то вроде ['first', 'second', 'third']
  4. Также вы должны были определить функцию как keyExtractor внутри вашего компонента.

 keyExtractor = (item, index) => {
  return index.toString();
}

render () {
  const obj = this.props.navigation.state.params.item;
  return (
   <FlatList
     key={this.keyExtractor}
     data={obj}
     renderItem={({ item }) => <Text>{item}</Text>}
   />
  );
}
  

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

1. Большое спасибо! Я просто не понимаю keyExtractor, как мне это сделать?

2. Добавлен простой keyExtractor, он должен соответствовать вашим потребностям

Ответ №3:

Вы можете напрямую использовать

 <FlatList
      key={this.keyExtractor}
      data={this.props.navigation.state.params.item}
      renderItem={({ iteemm }) => <Text>{iteemm}</Text>}
/>
  

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

1. Это объект, поэтому я не могу. Flatlist принимает только массивы, в этом суть.

2. попробуйте это const obj = []; obj.push(this.props.navigation.state.params.item);

Ответ №4:

попробуйте это

 renderText = (itt) => {
    return (
      <View style={{ flex: 1, alignItems: "center", justifyContent: "center" }}>
        <ListItem 
        title={itt}
        />
      </View>
    )
  }
  

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

1. Я сделал, но он отображает все, что находится внутри этого массива.

2. пожалуйста, войдите в систему перед возвратом и посмотрите itt.name