我正在构建一个带有React Navigation的抽屉,如果用户关闭抽屉,想要执行一些逻辑。在文档中我没有看到任何明显的东西可以让我做到这一点。有没有人知道一种方法来做到这一点?React导航抽屉的状态? (打开或关闭)
回答
唔看不出太多。一种方法是控制使用手动抽屉的开启/关闭:
this.props.navigation.navigate('DrawerOpen'); // open drawer
this.props.navigation.navigate('DrawerClose'); // close drawer
这样,你可以用你的关闭/打开事件的功能中,你可以做任何你打开/关闭前想。
我在他们的文档中看到的唯一其他可能的解决方案是使用自定义contentComponent
。你可以将一个函数传递给onItemPress(route)
事件,所以也许你可以试试这个。
非问题是DrawerNavigator处理水龙头本身抽屉外面,所以我呼吁手动导航将被绕过。 contentComponent会工作,如果我需要做些事情时,这些项目被按下。实际上,我试图在抽屉打开时隐藏状态栏。 – callmetwan
嗯,是的,我很惊讶他们没有内置的事件。一个肮脏/笨拙的方法是只使用vanilla JS将一个单击事件监听器附加到抽屉切换。只需将它放在DrawerNavigator所在组件的'componentDidMount'生命周期方法中即可。所以每次用户点击打开抽屉时,都会触发您自己的事件。 –
我很欣赏这种努力,但问题在于用户关闭抽屉时未打开。我无法捕捉到该事件。 – callmetwan
您需要自定义导航动作捕捉DrawerClose
事件:
const MyDrawerNavigator = DrawerNavigator({
//...
});
const defaultGetStateForAction = MyDrawerNavigator.router.getStateForAction;
MyDrawerNavigator.router.getStateForAction = (action, state) => {
//use 'DrawerOpen' to capture drawer open event
if (state && action.type === 'Navigation/NAVIGATE' && action.routeName === 'DrawerClose') {
console.log('DrawerClose');
//write the code you want to deal with 'DrawerClose' event
}
return defaultGetStateForAction(action, state);
};
根据@ufxmeng
import {
StatusBar,
} from "react-native";
const MyDrawerNavigator = DrawerNavigator({
//...
});
const defaultGetStateForAction = MyDrawerNavigator.router.getStateForAction;
MyDrawerNavigator.router.getStateForAction = (action, state) => {
if(state && action.type === 'Navigation/NAVIGATE' && action.routeName === 'DrawerClose') {
StatusBar.setHidden(false);
}
if(state && action.type === 'Navigation/NAVIGATE' && action.routeName === 'DrawerOpen') {
StatusBar.setHidden(true);
}
return defaultGetStateForAction(action, state);
};
看到这里https://github.com/react-community/react-navigation/blob/673b9d2877d7e84fbfbe2928305ead7e51b04835/docs/api/routers/Routers.md 这里https://github.com/aksonov/react-native-router-flux/issues/699
没有终极版集成可使用onNavigationStateChange在路由器组件上。只是拦截抽屉动作:抽屉打开和抽屉关闭。
例子:
handleNavigationState = (previous, next, action) => {
if (action.routeName === 'DrawerOpen') {
this.props.setDrawerState(true);
} else if (action.routeName === 'DrawerClose') {
this.props.setDrawerState(false);
}
}
render() {
return (
<Router onNavigationStateChange={this.handleNavigationState} />
);
}
- 1. 如何更改关闭或打开的图标导航抽屉
- 2. 导航抽屉状态栏
- 3. 右侧的导航抽屉不能保持打开状态
- 4. 导航抽屉在打开和关闭时滞后android
- 5. 导航抽屉ondrawer打开和关闭不被称为
- 6. 导航抽屉打开和关闭太慢
- 7. 导航抽屉需要时间打开和关闭
- 8. 打开另一个活动后关闭导航抽屉
- 9. React导航抽屉位置
- 10. 平滑关闭导航抽屉
- 11. 导航抽屉关闭不动画
- 12. 导航抽屉关闭点击
- 13. 关闭导航抽屉箭头动画
- 14. 关闭导航抽屉没有动画
- 15. 关闭屏幕导航抽屉
- 16. 导航抽屉没有关闭
- 17. 关闭Xamarin表单导航抽屉
- 18. 导航抽屉关闭错误
- 19. 导航抽屉中的打开活动
- 20. 打开导航按钮的抽屉
- 21. 在Android中打开或关闭片段时,导航抽屉会滞后Android
- 22. 如何让导航抽屉完全不关闭左侧抽屉?
- 23. 在启动时打开导航抽屉
- 24. 无法打开抽屉式导航
- 25. 项目导航抽屉打开活动
- 26. 导航抽屉缓慢打开
- 27. Android导航抽屉?
- 28. JQuery打开/关闭独特抽屉
- 29. 为什么我的导航抽屉认为它已关闭,但在旋转后仍保持打开状态?
- 30. 导航抽屉
你找到任何解决方案,这些作品对我来说 –