我遇到this.props.navigation.state.params
的问题。
我有一个抽屉导航器,它有一些菜单,有些菜单有子菜单,当我点击一个子菜单时,该应用程序会加载一个"类别",例如。所有子菜单来自"类别"菜单将被重定向到同一个屏幕,但每个人都有自己的ID和标题。
使用此行进行重定向:
this.props.navigation.navigate(menu.route, { submenu });
问题是,当我第一次导航到此屏幕时,我从this.props.navigation.state.params.submenu.id
获取了ID,并发送了一个请求来加载此特定ID的内容。但是,当我打开抽屉并点击同一个"类别"的另一个子菜单时菜单,this.props.navigation.state.params.submenu
对象中的ID和标题发生了变化,但我无法调度新请求以获取具有新ID的数据。我第一次使用componentDidMount()来获取数据(我知道componentDidMount()只触发一次),但是我找不到可以用来分派这个新请求的其他生命周期方法。
我将在下面粘贴我的代码部分:
SideMenu.js(自定义抽屉菜单组件):
onHandleSubMenuPress = (menu, submenu) => {
this.props.navigation.navigate(menu.route, { submenu });
}
Categories.js(接收道具并加载数据的屏幕):
componentDidMount() {
this.loadMorePosts();
}
loadMorePosts = () => {
const { id } = this.props.navigation.state.params.submenu;
if (this.props.nextPage <= this.props.totalPages) {
this.props.loadCategoryPosts(id, this.props.nextPage);
}
}
我对页面有一些控制权,我可以在平面列表中使用无限滚动,但我几乎可以肯定它不会成为问题,因为我需要将这两个道具重置为导航参数更改时的默认状态。
任何人都可以帮我解决这个问题吗?
答案 0 :(得分:0)
我不知道这是否可以帮助您,请尝试一下:
resetAction = StackActions.reset({
index: 0,
actions: [
NavigationActions.navigate({ routeName: menu.route, params:{item:submenu} }),
],
});
this.props.navigation.dispatch(resetAction);
重置导航,您可以每次使用componentDidMount