Использование пользовательских вкладок с помощью StackNavigator?
У меня есть список пользователей, каждый пользователь имеет отображаемое изображение в списке.
Я пытаюсь, когда пользователь нажимает на экранное изображение, перенаправляется на свой профиль через stackNavigation.
CustomTabView:
const CustomTabView = ({ router, navigation }) => {
const { routes, index } = navigation.state;
const ActiveScreen = router.getComponentForState(navigation.state);
const routeNav = addNavigationHelpers({
...navigation,
state: routes[index],
});
const routeOptions = router.getScreenOptions(routeNav, 'tabBar');
return (
<View style={styles.container}>
<CustomTabBar
navigation={navigation}
activeRouteName={routes[index].routeName}
icon={routeOptions.tabBarIcon}
/>
<ActiveScreen
navigation={addNavigationHelpers({
...navigation,
state: routes[index]
})}
/>
</View>
);
};
StackNavigator://goToProfile.js//также попытался разместить в index.anndroid.js, но не нашел способ экспорта
const goToProfile = StackNavigator({
Profile: {
screen: Profile,
navigationOptions: ({ navigation }) => ({
title: `${navigation.state.params.person.name.first} ${navigation.state.params.person.name.last}`
})
},
})
пользовательские вкладки://index.android.js
const CustomTabRouter = TabRouter(
{
Chat: {
screen: Chats,
path: ""
},
Status: {
screen: Contacts,
path: "notifications"
},
Camera: {
screen: Camera,
path: "settings"
}
},
{
initialRouteName: "Chat",
},
);
const CustomTabs = createNavigationContainer(
createNavigator(CustomTabRouter)(CustomTabView)
);
Также мой компонент:
<TouchableOpacity
onPress = { () => this.props.navigation.navigate('Profile', { item } ) } >
<Avatar
source={{ uri: item.picture.thumbnail }}
/>
</TouchableOpacity>
Ответы
Ответ 1
Ваш Stack Navigator будет выглядеть следующим образом:
const ChatStack= StackNavigator({
Chat:{screen: Chat,
navigationOptions: {
header: null,
}},
Profile: {
screen: Profile,
navigationOptions: ({ navigation }) => ({
title: `${navigation.state.params.person.name.first} ${navigation.state.params.person.name.last}`,
tabBarVisible: false
// depending if you want to hide the tabBar on the profile page if not remove it.
})
},
})
Тогда ваш customTab примет эту форму:
const CustomTabRouter = TabRouter(
{
Chat: {
screen: ChatStack,
},
Status: {
screen: Contacts,
path: "notifications"
},
Camera: {
screen: Camera,
path: "settings"
}
},
.........
С этими изменениями вы сможете перейти к экрану "Профиль" с помощью
this.props.navigation.navigate('Profile', { item } )
Ответ 2
Вы хотите отправить действие навигации, а не визуализировать новый стек. Хотя я не уверен, что ваши навигаторы построены правильно, чтобы это удалось...
_goToProfile = (person) => {
<goToProfile navigate={this.props.navigation} />
}
должен быть
_goToProfile = (person) => {
this.props.navigation.navigate('Profile', person)
}