React Native RefreshControl не запускает onRefresh на iOS - PullRequest
0 голосов
/ 18 декабря 2018

У меня есть следующая (упрощенная) настройка для моего PersonScreen, которая переходит к AppointmentScreen:

class PersonScreen {
  state = {
    refreshing: false,
  };

  _onRefresh = () => {
    this.setState({ refreshing: true });
    this._fetchStuff()
      .then(() => {
        this.setState({ refreshing: false });
      };
  };

  render() {
    return (
      <View style={CONTAINER}>
        <ScrollView
          keyboardShouldPersistTaps="handled"
          refreshControl={<RefreshControl refreshing={refreshing} onRefresh={this._onRefresh} />}
          <ListItem
            key={ITEM.id}
            title={moment(DATETIME).format(FORMAT))}
            onPress={() => {
              navigation.navigate('AppointmentScreen', {
                appointment: ITEM,
                refreshParent: this._onRefresh,
              });
            }
          />
        </ScrollView>
      </View>
    );
  }
}

На AppointmentScreen вы делаете некоторые выборы и затем возвращаетесьвыполняется следующее:

const { refreshParent } = navigation.state.params;
refreshParent();
navigation.goBack();

Единственный сценарий, где это не работает, - на iOS.Это работает, пока я иду на PersonScreen и обновляю.Тем не менее, если я перейду с PersonScreen на AppointmentScreen и вернусь, он вызовет refreshParent (что по сути _onRefresh), но тогда любая попытка опустить вниз, чтобы вызвать функцию RefreshControl s onRefresh, не даст результатов.,Я также добавил console.log в _onRefresh, но он даже ничего не выводит.

Если вместо этого AppointmentScreen выглядит так:

const { refreshParent } = navigation.state.params;
//refreshParent();
navigation.goBack();

Всеработает.Итак, я испытываю, что каким-то образом вызов refreshParent, а затем возвращение делает следующее _onRefresh из RefreshControl в PersonScreen не работает.

У кого-нибудь есть идеи, почему это так?Как уже упоминалось, я испытываю это только на iOS, но последовательно на симуляторе iOS и устройствах.

1 Ответ

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

Можете ли вы создать выставочную версию?

также, ваше освежение refreshing={refreshing} должно быть refreshing={this.state.refreshing}

...