RefreshControl реализация iOS и Android платформ

1

Я очень новичок в программировании React Native. Я пытаюсь реализовать функцию обновления для обновления в ListView. Итак, я решил использовать RefreshControl Component. Я реализовал состояния переменных и функции в соответствии с документом, но функция _onRefresh() никогда не вызывается. Следовательно, индикатор выполнения также не отображается сверху.

Мой исходный код:

// @flow
'use strict';

import React, {Component} from "react";
import {
  StyleSheet,
  View,
  Image,
  Text,
  ListView,
  TouchableHighlight,
  RefreshControl,
} from "react-native";

var BookingRow = require('./bookingRow');
var RequestRow = require('./requestRow');

class Bookings extends Component {
  state: {
    dataSource: Object;
    //refreshing: false,
  };
  ds: Object;

  static propTypes = {
    authKey: React.PropTypes.string.isRequired,
    endpoints: React.PropTypes.object.isRequired,
    profile: React.PropTypes.object,
    optionalBookings: React.PropTypes.array,
    optionalRequests: React.PropTypes.array,
    translator: React.PropTypes.object,
    rowSelected: React.PropTypes.func,
  };

  constructor(props: Object) {
    super();
    this.ds = new ListView.DataSource({rowHasChanged: (r1, r2) => r1 !== r2});
    var set;
    if (typeof props.bookings !== 'undefined') {
      set = props.bookings;
    } else {
      set = props.requests;
    }
    this.state = {
      dataSource: this.ds.cloneWithRows(set),
      refreshing: false
    };
  }

  componentWillReceiveProps(props: Object) {
    var set;
    if (typeof props.bookings !== 'undefined') {
      set = props.bookings;
    } else {
      set = props.requests;
    }
    this.setState({
      dataSource: this.ds.cloneWithRows(set)
    });
  }

  _onRefresh() {
    console.log("_onRefresh");
    this.setState({refreshing: true});
    this.props.fetchBookings().then(() => {
      this.setState({refreshing: false});
    });
  }

  render() {
    console.log(this.state.refreshing);
    return (
      <ListView
      refreshControl={
          <RefreshControl
            refreshing={this.state.refreshing}
            onRefresh={this._onRefresh.bind(this)}
            //onRefresh={() => this.props.fetchBookings()}
          />
        }
        dataSource = {this.state.dataSource}
        enableEmptySections = {true}
        renderRow = {(rowData) => {
          if (typeof this.props.bookings !== 'undefined') {
            return (
              <BookingRow
                endpoints = {this.props.endpoints}
                authKey = {this.props.authKey}
                booking = {rowData}
                profile = {this.props.profile}
                translator = {this.props.translator}
                rowPicked = {() => this.props.rowSelected(rowData)}
              />
            );
          } else {
            return (
              <RequestRow
                profile = {this.props.profile}
                endpoints = {this.props.endpoints}
                authKey = {this.props.authKey}
                request = {rowData}
                translator = {this.props.translator}
                rowPicked = {() => this.props.rowSelected(rowData)}
              />
            );
          }
        }}
      />
    );
  }
}

const styles = StyleSheet.create({

});

module.exports = Bookings;

Где я иду не так? Есть ли какая-нибудь опоздательность, которую я пропустил? Что я должен сделать, чтобы убедиться, что жест потяжения обнаружен ListView?

  • 0
    У меня есть очень похожая реализация, которая работает как задумано, но большая разница в том, что я использовал FlatList вместо ListView
Теги:
react-native
pull-to-refresh

1 ответ

0

Это лучший инструмент для поиска сторонних библиотек (модулей) для реагирования-native, а также: (Эта ссылка искала pull для обновления модуля для native-native, вы можете искать любой запрос для модулей)

https://js.coach/react-native/react-native-simple-auth?search=pull введите ссылку здесь.

Примечание. Вы можете интегрировать эти модули для обновления функций. Также ознакомьтесь с совместимостью с iOS и Android, а также перед ее внедрением. Когда-то он говорит, что модуль работает как для iOS, так и для Android. Чтобы убедиться в этом, попробуйте запустить пример приложения (доступный в разделе github в папке примера того же репо)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню