Как добавить «Load More» в конце ListView с базой данных Firebase (реактивный) - PullRequest
0 голосов
/ 13 декабря 2018

У меня есть база данных Firebase, в которой много компонентов, и обычно требуется очень много времени для одновременной загрузки в активность в приложении, которое я создаю с помощью Expo.

Я думал, что разбиение на страницы с помощью «See More» или «Load More» после каждых 5 пунктов сделает это быстрее, но я понятия не имею, как это сделать.Я пробовал с: size: 1, firstVisibleRow: 0, leastVisibleRow: 0, greatestVisibleRow: 0, itemsToShow: 1, rowsToDisplay : 1, expanded: false, в разных местах внутри кода, но ни один из них не работает.

Может кто-нибудь помочь мне решить эту проблему с помощью ListView, пожалуйста?Я прилагаю основной код ниже:

import React from 'react';

import {
  ListView,
  StyleSheet,
  Text,
  View,
  TouchableHighlight,
  AlertIOS
} from 'react-native';
import {
  Constants
} from 'expo';
import firebase from './firebase';

const StatusBar = require('../Firebase/StatusBar');
const ActionButton = require('../Firebase/ActionButton');
const ListItem = require('../Firebase/ListItemEventsNew');
const styles = require('../Firebase/styles.js');

export default class Events_new extends React.Component {

  constructor(props) {
    super(props);
    this.state = {
      dataSource: new ListView.DataSource({
        rowHasChanged: (row1, row2) => row1 !== row2,
      }),
      //size: 1,
      //firstVisibleRow: 0,
      //leastVisibleRow: 0,
      //greatestVisibleRow: 0,
      //itemsToShow: 1,
      //rowsToDisplay : 1,
      //expanded: false
    };
    this.itemsRef = this.getRef().child('-Events');
  }

  getRef() {
    return firebase.database().ref();
  }

  listenForItems(itemsRef) {
    itemsRef.on('value', (snap) => {

      // get children as an array
      var items = [];
      snap.forEach((child) => {
        items.push({
          headline: child.val().headline,
          _key: child.key
        });
      });

      this.setState({
        dataSource: this.state.dataSource.cloneWithRows(items),
        //itemsToShow: 1,
        //rowsToDisplay : 1,
        //expanded: false
      });

    });
  }

  componentDidMount() {
    this.listenForItems(this.itemsRef);
  }

  render() {
    return ( <
      View style = {
        styles.container
      } >
      <
      StatusBar title = "Events" / >
      <
      ListView dataSource = {
        this.state.dataSource
      }
      renderRow = {
        this._renderItem.bind(this)
      }
      enableEmptySections = {
        true
      }
      style = {
        styles.listview
      }
      />

      <
      /View>
    )
  }

  // <ActionButton onPress={this._addItem.bind(this)} title="Add" /> pt butonul Add

  _addItem() {
    AlertIOS.prompt(
      'Add New Item',
      null, [{
          text: 'Cancel',
          onPress: () => console.log('Cancel Pressed'),
          style: 'cancel'
        },
        {
          text: 'Add',
          onPress: (text) => {
            this.itemsRef.push({
              title: text
            })
          }
        },
      ],
      'plain-text'
    );
  }

  _renderItem(item) {

    const onPress = () => {
      AlertIOS.alert(
        'Complete',
        null, [{
            text: 'Complete',
            onPress: (text) => this.itemsRef.child(item._key).remove()
          },
          {
            text: 'Cancel',
            onPress: (text) => console.log('Cancelled')
          }
        ]
      );
    };

    return ( <
      ListItem item = {
        item
      }
      onPress = {
        onPress
      }
      />
    );
  }

}

1 Ответ

0 голосов
/ 13 декабря 2018

Вы можете обнаружить свиток достигает дна => получить больше данных => изменить состояние => показать еще строку

onEndReached={this.loadMoreActivities}

loadMoreActivities = () => {
  // fetch data here
}

Вы должны использовать debounce для оптимизации.Ключевое слово debounce lodash

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