任意のコンポーネントからナビゲーションプロパティにアクセスする
useNavigation
はnavigation
オブジェクトにアクセスできるフックです。navigation
プロパティをコンポーネントに直接渡せない場合、または深くネストされた子コンポーネントの場合に渡したくない場合に便利です。
画面コンポーネントではない普通のコンポーネントは、ナビゲーションプロパティを自動的に受け取りません。たとえば、このGoToButton
コンポーネントの場合
import * as React from 'react';
import { Button } from 'react-native';
function GoToButton({ navigation, screenName }) {
return (
<Button
title={`Go to ${screenName}`}
onPress={() => navigation.navigate(screenName)}
/>
);
}
この例外を解決するには、画面からそれをレンダリングするときに、navigation
プロパティをGoToButton
に渡すことができます。 <GoToButton navigation={props.navigation} />
のように。
または、useNavigation
を使用してnavigation
プロパティを(興味があれば、Reactコンテキストを介して)自動的に提供することができます。
import * as React from 'react';
import { Button } from 'react-native';
import { useNavigation } from '@react-navigation/native';
function GoToButton({ screenName }) {
const navigation = useNavigation();
return (
<Button
title={`Go to ${screenName}`}
onPress={() => navigation.navigate(screenName)}
/>
);
}
このアプローチを使用すると、navigation
プロパティを明示的に渡さなくてもアプリの任意の場所にGoToButton
をレンダリングでき、期待どおりに機能します。