Создание горизонтальной прокрутки с динамическими данными из API

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

state = { data: [] };

async componentDidMount(){
      axios.get('http://reduxblog.herokuapp.com/api/posts')
       .then((response) =>  { this.setState({ data: response.data})});
    }

<ScrollView horizontal={true} style={{width: '100%'}}>
  <View>
    <Text>
      {this.state.data.title}
    </Text>
  </View>
</ScrollView>

1 ответ

Решение

Вы правы, FlatList был бы лучшим решением для динамических данных.

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

class MyFlatList extends React.Component {

  constructor(props) {
    super(props);
    this.state = { data:[] };
  }

  async componentDidMount(){
    axios.get('http://reduxblog.herokuapp.com/api/posts')
     .then((response) =>  { this.setState({ data: response.data})});
  }

  _keyExtractor (item, index) {
    return index.toString();
  }

   _renderItem ({ item, index }) {
    return (<Text>{item.title} - {item.categories}</Text>);
  }

  render() {
    return(
     <FlatList style={{ flex: 1 }}
        data={this.state.data}
        keyExtractor={this._keyExtractor.bind(this)}
        renderItem={this._renderItem.bind(this)}
        horizontal={true}
      />
    );
  }
}

Как видите, FlatList требует, чтобы ему было передано несколько реквизитов. Три из них всегда обязательны: keyExtractor, renderItem и data

Сначала keyExtractor

Используется для извлечения уникального ключа для данного элемента по указанному индексу. Ключ используется для кэширования и в качестве ключа реакции для отслеживания переупорядочения элементов

Второй renderItem, Текущий renderItem возвращает очень простой компонент, с небольшим количеством времени и стилем, который можно создать.

Извлекает элемент из данных и отображает его в списке.

Данные должны быть переданы в FlatList через реквизит данных. Вы храните свои данные в состоянии компонентов, чтобы мы могли передать их как this.state.data, FlatList будет использовать это для построения списка.

Наконец, нам нужно передать true в горизонтальную подпорку, чтобы FlatList создавал горизонтальный список, а не вертикальный список.

Дополнительную информацию можно найти в документах для FlatList. Я предлагаю вам взглянуть туда и посмотреть, что вы можете придумать.

Наконец, убедитесь, что вы импортировали FlatList, View и Text из реактивной системы, в противном случае у вас будет несколько ошибок, с которыми нужно разобраться. Я бы также посмотрел на ваш запрос axios, так как вы, похоже, не улавливаете ошибок, которые могут возникнуть из-за функции.

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