私はReactNativeアプリを構築しており、ナビゲーションにはReact Navigation(V3)を使用しています。UI要素には、React NativeElementsを使用します。
複数のナビゲーターで再利用する画面があります。スタックのルートにある場合もあれば、スタックでプッシュされる場合もあります。画面がスタックのルートにある場合は、デフォルトの[戻る]ボタンを表示するか、ハンバーガーメニューアイコンを表示するため、スタック内の位置に基づいてプログラムでheaderLeft
この画面に要素を追加navigationOptions
します(スタックはドロワーにネストされています)。
だから私は以下を試しました:
export class ScannerScreen extends Component {
static navigationOptions = ({ navigation }) => ({
headerLeft:
navigation.state.index > 0 ? (
undefined
) : (
<Icon type="ionicon" name="ios-menu" onPress={navigation.toggleDrawer} />
),
title: strings.scannerTitle
});
// ...
問題は、これnavigation.state.index
がundefined
ここのように機能しないことです。Reactナビゲーションでこれをどのように行うでしょうか?
編集:要求ごととして、私はスクリーンショットの追加console.log(navigation)
(を経由して<Icon />
複数可onPress
。)
私はhacky
解決策を見つけました、それは大丈夫ですが、私もそれを少し嫌います:
const stackConfig: StackNavigatorConfig = {
cardStyle: styles.card,
navigationOptions: {
headerBackTitleStyle: styles.headerBackTitle,
headerStyle: styles.header,
headerTintColor: "black"
}
};
const HomeStack = createStackNavigator(
{ HomeScreen, RestaurantDetailScreen, MenuScreen, ScannerScreen },
{
...stackConfig,
initialRouteName: "HomeScreen",
navigationOptions: ({ navigation }) => ({
headerLeft:
parseFloat(navigation.state.key.slice(-1)) > 1 ? (
undefined
) : (
<Icon
containerStyle={styles.leftIcon}
type="ionicon"
name={getIconName("menu")}
onPress={navigation.toggleDrawer}
/>
),
...stackConfig.navigationOptions
})
}
);
このようにして、スタック全体に対して自動的に設定します。これは、それぞれの画面の個々のナビゲーションオプションでも実行できます。ただし、画面に自動的に割り当てられたキーにはインデックスが含まれているため、これは機能します。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加