首页 文章

React Native Navigation更新数据

提问于
浏览
1

我正在构建一个应用程序,我正在使用 ReduxReact-Navigation 库 . 我在FlatList中有一个训练列表:

<FlatList
    style={{ backgroundColor: colors.background }}
    data={this.props.workoutsList}
    renderItem={({ item }) =>
      <ListItem workout={item} onPress={() => this.props.navigation.navigate('Workout', item)} />
    }
    keyExtractor={(item) => item.id}
  />

这会正确显示我的列表,并且我可以导航到我单击的每一行的特定Workout页面,并在每次单击时提供附加的锻炼 . 在这个特定的锻炼页面上,我有一个编辑锻炼表单,用户可以在其中更新锻炼的名称和时间 .

所有这一切都没有问题......当我按下菜单上的后退按钮将我带回所有锻炼的主列表时,问题就来了 . FlatList仍然显示旧数据,并且是我的问题的根源 . 它正在缓存这些数据,因此我的新保存没有显示,因此当我再次点击列表项时,它会附加旧的锻炼信息,而不是我刚刚保存的最新信息 . (希望有道理)

我看到了一个类似的问题:React Navigation: How to update navigation title for parent, when value comes from redux and gets updated in child?但它并没有完全包含我的主要问题:

Is it possible where a FlatList can update a specific row from a redux setup, while also maintaining it's scroll position?

我看到这个在Facebook应用程序上工作得非常好....当有人滚动他们的墙,让我们说他们点击“xx评论”项目 . 这会将应用程序导航到仅显示此帖子的页面 . 您可以喜欢/评论,当您按下后退箭头时,您将完全回到之前的墙的滚动位置,并且已更新喜欢/评论的数量以显示您的贡献 . 在React Native中这可能吗?

如果这是不可能的......有人知道如何在React-Navigation中从后退按钮导航时至少刷新页面吗?

EDIT 如果在其他地方有更好的设置,我愿意使用另一个导航库!

UPDATE 我尝试了几种方法来解决这个问题,我试过的一种方法是:

当我成功保存表单时,我发送了一个'NEEDS_REFRESHING'的动作 . 这设置了我在主FlatList页面上选择的redux prop . 在该页面的渲染中,我有一个:

if (this.props.needsRefreshing) {
  console.log('Needs Refreshing');
  this.props.getWorkouts();
}

我正在看控制台,我的FlatList页面正在刷新(它没有让我回到正确的滚动位置,因为它刚刷新主列表)...但我总是得到React Native的警告说:

无法在现有状态转换期间更新(例如在render或其他组件的构造函数中) . 渲染方法应该是道具和状态的纯函数;构造函数副作用是反模式,但可以移动到componentWillMount .

当我将其移动到componentWillMount时,然后永远不会调用正确的刷新更改,甚至componentWillMount中的console.log也不会显示 .

1 回答

相关问题