#typescript #react-native #react-navigation
#typescript #react-native #реакция-навигация
Вопрос:
У меня есть следующая структура навигации в моем файле app.tsx:
const HomeStack = createStackNavigator<HomeStackParamList>()
function HomeStackScreen() {
return (
<HomeStack.Navigator>
<HomeStack.Screen
name='Home'
component={NasaImageList}
options={{ title: 'NASA Image Search' }}
/>
<HomeStack.Screen
name='Details'
component={NasaImageDetails}
options={({ route }) => ({ title: route.params.title })}
/>
</HomeStack.Navigator>
)
}
const FavouriteStack = createStackNavigator<FavouriteStackParamList>()
function FavouriteStackScreen() {
return (
<FavouriteStack.Navigator>
<FavouriteStack.Screen
name="Favourites"
component={NasaImageFavouriteList} />
<FavouriteStack.Screen
name="Details"
component={NasaImageDetails}
options={({ route }) => ({ title: route.params.title })}} />
</FavouriteStack.Navigator>
)
}
const Tab = createBottomTabNavigator()
export default class App extends Component {
render() {
return (
<NavigationContainer>
<Tab.Navigator>
<Tab.Screen
name="Home"
component={HomeStackScreen}
/>
<Tab.Screen
name="Favourites"
component={FavouriteStackScreen} />
</Tab.Navigator>
</NavigationContainer>
)
}
Параметры маршрута определены в типах HomeStackParamList и Favoritestackparamlist, как указано ниже. На данный момент они те же, но, вероятно, изменятся, поэтому необходимо хранить их отдельно.
export type HomeStackParamList = {
Home: undefined
Details: {
nasaId: string
title: string
}
}
export type FavouriteStackParamList = {
Favourites: undefined
Details: {
nasaId: string
title: string
}
}
Тип навигационного реквизита, передаваемый в мой компонент NasaImageDetails, который формирует «Детали» компонента экрана, определяется следующим образом:
export type NasaImageDetailsHomeNavigationProp = StackNavigationProp<
HomeStackParamList,
'Details'
>
export type NasaImageDetailsFavouriteNavigationProp = StackNavigationProp<
FavouriteStackParamList,
'Details'
>
В итоге я получаю два типа навигационных реквизитов из двух списков параметров, что не идеально. Каковы наилучшие методы для этой ситуации в react native typescript?
Ответ №1:
Не нашел способа обойти это, поэтому вместо этого просто использовал:
export type NasaImageDetailsHomeNavigationProp = StackNavigationProp<
HomeStackParamList,
'Details'
> | StackNavigationProp<
FavouriteStackParamList,
'Details'
>