У меня есть следующая (упрощенная) настройка для моего 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 и устройствах.