ここでの私の最終目標は、他の場所で設定されたいくつかの状態に応じて、いくつかの引き出しアイテムにカスタムの背景色を与えることです。ドロワー アイテムに独自の背景色を与えるには、カスタム ドロワー コンテンツをセットアップする必要があることを理解しています。ただし、カスタム ドロワー アイコンがフォーカスされているかどうかを認識できないという問題があります。
最初はconst [bHomeFocused, setbHomeFocused] = useState(false)
(etc) を実行して状態をonPress
設定し、その上にプロパティを設定focused
できると思っていましたが、ドロワー アイテムがさらにたくさん入ってくると、扱いにくい解決策のように思えます。
非カスタムの DrawerItems には本質的にこの機能があるため、私が見逃している簡単な答えがあると確信しています...
import { Drawer } from 'react-native-paper'
import { createDrawerNavigator, DrawerNavigationProp, DrawerItem, DrawerContentScrollView, DrawerItemList, DrawerContentComponentProps, DrawerContentOptions } from '@react-navigation/drawer';
function CustomDrawerContent(props: DrawerContentComponentProps<DrawerContentOptions>) {
return (
<DrawerContentScrollView {...props}>
<Drawer.Section>
<DrawerItem
label="Dashboard"
labelStyle={{ color: colorTheme.normalText }}
icon={() => <Icon name="book" type="feather" size={26} color={colorTheme.normalText} />}
activeBackgroundColor={colorTheme.panel}
inactiveBackgroundColor={colorTheme.cyan}
onPress={() => {
props.navigation.navigate('Dashboard')
}}
/>
</Drawer.Section>
<DrawerItem
label="Home"
labelStyle={{ color: colorTheme.normalText }}
icon={() => <Icon name="home" type="feather" size={26} color={colorTheme.normalText} />}
activeBackgroundColor={colorTheme.panel}
inactiveBackgroundColor={colorTheme.red}
onPress={() => {
props.navigation.navigate('HomeStack')
}}
/>
</DrawerContentScrollView>
);
}
export type DrawerParamList = {
Dashboard: undefined;
HomeStack: undefined;
};
export type DrawerProps<T extends keyof DrawerParamList> = {
navigation: DrawerNavigationProp<DrawerParamList, T>;
route: RouteProp<DrawerParamList, T>;
};
const AppDrawer = createDrawerNavigator<DrawerParamList>();
export default function MainDrawer({ route, navigation }: TopLevelStackProps<"MainDrawer">) {
return (
<AppDrawer.Navigator
drawerStyle={globalStyles.drawer}
drawerContent={
(props) => <CustomDrawerContent {...props} />
}
drawerContentOptions={{
labelStyle: { color: colorTheme.normalText },
activeBackgroundColor: colorTheme.panel,
inactiveBackgroundColor: colorTheme.background,
}}
>
<AppDrawer.Screen
name="Dashboard"
component={Dashboard}
options={{
unmountOnBlur: true,
}}
/>
<AppDrawer.Screen
name="HomeStack"
component={HomeStack}
options={{
unmountOnBlur: true,
}}
/>
</AppDrawer.Navigator>
);
}