我是React Native的新手,我在一个应用程序上工作,必须添加一个预制的标头,该标头带有一个按钮,我想将其设置为带有导航功能goBack的选项,但是该按钮没什么,我也尝试了Navigation.navigate('route'),但问题仍然存在。如果您能提供帮助,我将不胜感激。
代码:
import { NavigationContainer, useNavigationState} from '@react-navigation/native';
import { NavigationActions } from 'react-navigation';
import { createStackNavigator } from '@react-navigation/stack';
import { Toolbar } from 'react-native-material-ui';
import * as React from 'react';
import { Platform, StatusBar, StyleSheet, View, Text } from 'react-native';
import BottomTabNavigator from '../../navigation/BottomTabNavigator';
import LinkingConfiguration from '../../navigation/LinkingConfiguration';
import CatHome from '../../screens/subScreens/CatHome';
const Stack = createStackNavigator();
export default function Navigator({navigation}) {
const SearchBar= ()=>{
//const { navigate } = this.props.navigation;
return(
<Toolbar
leftElement= {backOption()}
onLeftElementPress= {()=>navigation.goBack()}
//isSearchActive= {true}
style={{
container: styles.searchBar,
}}
centerElement="DIRECTAPP"
searchable={{
autoFocus: true,
placeholder: 'Buscar',
}}
rightElement={{
menu: {
icon: "more-vert",
iconProps : {
size: 30,
color: 'gray',
},
labels: ["Locación", "Contáctanos"]
}
}}
onRightElementPress={ (label) => { console.log(label) }}
/>
);
}
return (
<View style={styles.container}>
{Platform.OS === 'ios' && <StatusBar barStyle="dark-content" />}
<NavigationContainer linking={LinkingConfiguration}>
<Stack.Navigator screenOptions={{
headerLeft: null,
headerTitle: props => <SearchBar {...props} />,
headerStyle: {
backgroundColor: '#9acd32',
}
}}>
<Stack.Screen name="Root" component={BottomTabNavigator} />
<Stack.Screen name="CatHome" component={CatHome} />
</Stack.Navigator>
</NavigationContainer>
</View>
);
}
function backOption (){
//const Route=useRoute();
const state = useNavigationState(state => state);
const routeName = (state.routeNames[state.index]);
//console.log(routeName);
if (routeName=='Root') {
return ''
}
else {
return 'arrow-back'
};
}
const styles = StyleSheet.create({
container: {
flex: 1,
backgroundColor: '#fff',
},
searchBar: {
backgroundColor: '#9acd32',
width: '100%',
shadowOffset: { width: 1, height: 13},
shadowOpacity: 0.1,
}
});
答案 0 :(得分:1)
这是新代码:
import { NavigationContainer, useNavigationState, useNavigation } from '@react-navigation/native';
import { createStackNavigator } from '@react-navigation/stack';
import { Toolbar } from 'react-native-material-ui';
import * as React from 'react';
import { Platform, StatusBar, StyleSheet, View, Text } from 'react-native';
import BottomTabNavigator from '../../navigation/BottomTabNavigator';
import LinkingConfiguration from '../../navigation/LinkingConfiguration';
import CatHome from '../../screens/subScreens/CatHome';
const Stack = createStackNavigator();
export default function Navigator() {
return (
<View style={styles.container}>
{Platform.OS === 'ios' && <StatusBar barStyle="dark-content" />}
<NavigationContainer linking={LinkingConfiguration}>
<Stack.Navigator screenOptions={{
headerLeft: null,
headerTitle: props => <SearchBar {...props} />,
headerStyle: {
backgroundColor: '#9acd32',
}
}}>
<Stack.Screen name="Root" component={BottomTabNavigator} />
<Stack.Screen name="CatHome" component={CatHome} />
</Stack.Navigator>
</NavigationContainer>
</View>
);
}
function SearchBar (){
const navigation = useNavigation();
//const { navigate } = this.props.navigation;
return(
<Toolbar
leftElement= {backOption()}
onLeftElementPress= {()=>navigation.goBack()}
//isSearchActive= {true}
style={{
container: styles.searchBar,
}}
centerElement="DIRECTAPP"
searchable={{
autoFocus: true,
placeholder: 'Buscar',
}}
rightElement={{
menu: {
icon: "more-vert",
iconProps : {
size: 30,
color: 'gray',
},
labels: ["Locación", "Contáctanos"]
}
}}
onRightElementPress={ (label) => { console.log(label) }}
/>
);
}
function backOption (){
//const Route=useRoute();
const state = useNavigationState(state => state);
const routeName = (state.routeNames[state.index]);
//console.log(routeName);
if (routeName=='Root') {
return ''
}
else {
return 'arrow-back'
};
}
const styles = StyleSheet.create({
container: {
flex: 1,
backgroundColor: '#fff',
},
searchBar: {
backgroundColor: '#9acd32',
width: '100%',
shadowOffset: { width: 1, height: 13},
shadowOpacity: 0.1,
}
});