React Native NavigationDrawer - 我如何在 createDrawerNavigation 中启动警报
React Native NavigationDrawer - How can i launch an alert inside createDrawerNavigation
我正在尝试通过在使用 reactnavigation 制作的 navDrawer 中单击项目来触发注销(确认警报)。你知道一个有效的方法吗?
这是 DrawerNavigator 文件中的代码:
export default createDrawerNavigator({
Home: { screen: Home },
Dashboard: { screen: Dashboard },
Logout: { screen: Logout }
} ...
并且在尝试调用最后一个元素(注销)时,我知道我需要调用从组件 class 扩展的 class,但问题类似于下一个代码,在本例中为你可以看到我在 render 方法中返回了 null,它完全清除了屏幕,但是当试图点击一个警告按钮时它没有给我任何东西
import React, {Component} from 'react';
import { Alert } from 'react-native';
class Logout extends Component{
constructor(props){
console.log('those are the props '+JSON.stringify(props))
super(props);
this.logoutAlert();
}
logout = ()=>{
//const deleted_element = clearAllData();
console.log('Logout.js - Element deleted ');
}
canceledLogout = () => {
console.log('The logout process is now cancelled');
}
logoutAlert() {
Alert.alert(
'Confirm',
'Are you sure that you want to logout?',
[
{ text: 'Yes', onPress: () => this.logout },
{ text: 'Cancel', onPress: () => this.canceledLogout }
]
);
}
render(){
return null;
}
}
export default Logout;
所以之后的问题是:有没有办法做到这一点(在不渲染屏幕的情况下单击 navDrawerItem 时显示警报?非常感谢您的帮助
我认为与其定义一个空的注销屏幕(returns null),不如定义一个自定义的 DrawerComponent
来处理提示 Alerts 之类的事情导航到不同的屏幕。
通过这样做,您的 DrawerNavigator
看起来将与此类似 -
export const DrawerNavigator = createDrawerNavigator({
Home: { screen: Home },
Dashboard: { screen: Dashboard },
...More Screens
}, {
drawerOpenRoute: 'DrawerOpen',
drawerCloseRoute: 'DrawerClose',
drawerToggleRoute: 'DrawerToggle',
drawerWidth: 250,
useNativeAnimations: true,
contentComponent: DrawerComponent
})
您可以像这样创建 DrawerComponent
-
class DrawerComponent extends React.Component {
navigateTo = (routeName) => {
this.props.navigation.navigate(routeName)
}
logout = ()=>{
//const deleted_element = clearAllData();
console.log('Logout.js - Element deleted ');
}
canceledLogout = () => {
console.log('The logout process is now cancelled');
}
logoutAlert = () => {
Alert.alert(
'Confirm',
'Are you sure that you want to logout?',
[
{ text: 'Yes', onPress: () => this.logout },
{ text: 'Cancel', onPress: () => this.canceledLogout }
]
);
}
render() {
<ScrollView>
<TouchableOpacity onPress={() => this.navigateTo('Home')}> Home </TouchableOpacity>
<TouchableOpacity onPress={() => this.navigateTo('Dashboard')}> Dashboard </TouchableOpacity>
<TouchableOpacity onPress={this.logoutAlert}> Logout </TouchableOpacity>
</ScrollView>
}
}
...
希望对您有所帮助。
我正在尝试通过在使用 reactnavigation 制作的 navDrawer 中单击项目来触发注销(确认警报)。你知道一个有效的方法吗?
这是 DrawerNavigator 文件中的代码:
export default createDrawerNavigator({
Home: { screen: Home },
Dashboard: { screen: Dashboard },
Logout: { screen: Logout }
} ...
并且在尝试调用最后一个元素(注销)时,我知道我需要调用从组件 class 扩展的 class,但问题类似于下一个代码,在本例中为你可以看到我在 render 方法中返回了 null,它完全清除了屏幕,但是当试图点击一个警告按钮时它没有给我任何东西
import React, {Component} from 'react';
import { Alert } from 'react-native';
class Logout extends Component{
constructor(props){
console.log('those are the props '+JSON.stringify(props))
super(props);
this.logoutAlert();
}
logout = ()=>{
//const deleted_element = clearAllData();
console.log('Logout.js - Element deleted ');
}
canceledLogout = () => {
console.log('The logout process is now cancelled');
}
logoutAlert() {
Alert.alert(
'Confirm',
'Are you sure that you want to logout?',
[
{ text: 'Yes', onPress: () => this.logout },
{ text: 'Cancel', onPress: () => this.canceledLogout }
]
);
}
render(){
return null;
}
}
export default Logout;
所以之后的问题是:有没有办法做到这一点(在不渲染屏幕的情况下单击 navDrawerItem 时显示警报?非常感谢您的帮助
我认为与其定义一个空的注销屏幕(returns null),不如定义一个自定义的 DrawerComponent
来处理提示 Alerts 之类的事情导航到不同的屏幕。
通过这样做,您的 DrawerNavigator
看起来将与此类似 -
export const DrawerNavigator = createDrawerNavigator({
Home: { screen: Home },
Dashboard: { screen: Dashboard },
...More Screens
}, {
drawerOpenRoute: 'DrawerOpen',
drawerCloseRoute: 'DrawerClose',
drawerToggleRoute: 'DrawerToggle',
drawerWidth: 250,
useNativeAnimations: true,
contentComponent: DrawerComponent
})
您可以像这样创建 DrawerComponent
-
class DrawerComponent extends React.Component {
navigateTo = (routeName) => {
this.props.navigation.navigate(routeName)
}
logout = ()=>{
//const deleted_element = clearAllData();
console.log('Logout.js - Element deleted ');
}
canceledLogout = () => {
console.log('The logout process is now cancelled');
}
logoutAlert = () => {
Alert.alert(
'Confirm',
'Are you sure that you want to logout?',
[
{ text: 'Yes', onPress: () => this.logout },
{ text: 'Cancel', onPress: () => this.canceledLogout }
]
);
}
render() {
<ScrollView>
<TouchableOpacity onPress={() => this.navigateTo('Home')}> Home </TouchableOpacity>
<TouchableOpacity onPress={() => this.navigateTo('Dashboard')}> Dashboard </TouchableOpacity>
<TouchableOpacity onPress={this.logoutAlert}> Logout </TouchableOpacity>
</ScrollView>
}
}
...
希望对您有所帮助。