1

我的 有以下(简化的)设置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),但是任何下拉触发RefreshControlsonRefresh函数的尝试都会失败。我还在 中添加了一些console.log_onRefresh但它甚至没有输出任何东西。

如果我的AppointmentScreen看起来像这样:

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

一切正常。因此,我遇到了以某种方式调用refreshParent然后返回使以下内容_onRefresh不起作用的情况RefreshControlPersonScreen

有谁知道为什么会这样?如前所述,我只在 iOS 上体验到这一点,但在 iOS 模拟器和设备上始终如此。

4

1 回答 1

0

你能创建一个博览会版本吗?

也,你的耳目一新是refreshing={refreshing} 应该的refreshing={this.state.refreshing}

于 2018-12-18T13:28:08.100 回答