【发布时间】:2020-05-24 11:58:08
【问题描述】:
我正在使用 React Navigation v4、React Hooks 和 ES6 开发一个 React Native 应用程序。
我有 2 个底部选项卡(电影、节目)和 4 个具有以下堆栈结构的屏幕:
**Movies**
-- MovieList
-- MovieDetail
**Shows**
-- ShowList
-- ShowDetail
我的场景
1) 从电影列表移动到单个电影页面
MovieList 包含一个电影列表,当我单击其中一个时,我首先获取一些 API 数据,然后像这样移动到 MovieDetail 屏幕
dispatch(apiFetchActions.fetchMovies(movieId)).then((response) => {
props.navigation.navigate({
routeName: "MovieDetail",
params: {
assetId: movieId,
assetName: movieTitle,
},
});
MovieDetail 现在位于 Movies 堆栈的顶部,而 MovieList 位于底部
2) 移动到不同的选项卡(导航堆栈)
然后我点击 Shows(第二个选项卡),使用 props.navigation.navigate('ShowList') 将我带到 ShowList
3) 问题
如果我单击“电影”选项卡,我希望会被移回 MovieList,但由于 MovieDetail 从未被卸载,它仍然位于“电影”堆栈的顶部,这意味着我看到的是旧屏幕。我必须单击两次才能返回 MovieList 屏幕。
我已经阅读了很多关于如何使用 onFocus/onBlur 订阅的建议,但是我找不到使用 React Hooks 的解决方案。
我理想的解决方案是找到一种方法可能使用 useEffect 挂钩来监听 MovieDetail 屏幕中的 onBlur 状态,并在离开前以某种方式卸载它。
【问题讨论】:
标签: react-hooks react-native-navigation react-navigation-stack react-lifecycle-hooks