要素ライブラリ
React Navigation で使用される UI 要素とヘルパーを含むコンポーネントライブラリ。独自のナビゲーターを構築している場合や、アプリでデフォルトの機能を再利用したい場合に役立ちます。
インストール
このパッケージを使用するには、@react-navigation/native
とその依存関係 (このガイドに従ってください) があることを確認してから、@react-navigation/elements
をインストールします。
- npm
- Yarn
- pnpm
npm install @react-navigation/elements
yarn add @react-navigation/elements
pnpm add @react-navigation/elements
コンポーネント
Header
ヘッダーとして使用できるコンポーネント。これはすべてのナビゲーターでデフォルトで使用されます。
使い方
import { Header } from '@react-navigation/elements';
function MyHeader() {
return <Header title="My app" />;
}
ナビゲーターでヘッダーを使用するには、画面オプションで header
オプションを使用できます
import { Header, getHeaderTitle } from '@react-navigation/elements';
const Stack = createNativeStackNavigator();
function MyStack() {
return (
<Stack.Navigator
screenOptions={{
header: ({ options, route }) => (
<Header {...options} title={getHeaderTitle(options, route.name)} />
),
}}
>
<Stack.Screen name="Home" component={HomeScreen} />
</Stack.Navigator>
);
}
スタックナビゲーターにはアニメーションも含まれており、ネイティブスタックナビゲーターのヘッダーはネイティブプラットフォームによって提供されるため、これはスタックナビゲーターとネイティブスタックナビゲーターのヘッダーの動作を複製するものではありません。
次のプロパティを受け入れます。
headerTitle
ヘッダーで使用する文字列または React Element を返す関数。デフォルトはシーンの title
です。関数が指定された場合、allowFontScaling
、tintColor
、style
、children
プロパティを含むオブジェクトを受け取ります。children
プロパティにはタイトルの文字列が含まれます。
headerTitleAlign
ヘッダータイトルをどのように配置するか。指定できる値:
左
中央
デフォルトは iOS では center
、Android では left
です。
headerTitleAllowFontScaling
ヘッダータイトルのフォントが、テキストサイズのアクセシビリティ設定を尊重してスケーリングされるかどうか。デフォルトは false です。
headerLeft
ヘッダーの左側に表示する React Element を返す関数。たとえば、カスタムの左ボタンを実装するために使用できます。
<Stack.Screen
name="Home"
component={HomeScreen}
options={{
headerLeft: (props) => (
<MyButton
{...props}
onPress={() => {
// Do something
}}
/>
),
}}
/>
headerRight
ヘッダーの右側に表示する React Element を返す関数。
headerShadowVisible
ヘッダーの標高の影 (Android) または下部ボーダー (iOS) を非表示にするかどうか。
これは、次のスタイルのショートカットです。
{
elevation: 0,
shadowOpacity: 0,
borderBottomWidth: 0,
}
上記のスタイルが headerStyle
で headerShadowVisible: false
とともに指定されている場合、headerShadowVisible: false
が優先されます。
headerStyle
ヘッダーのスタイルオブジェクト。たとえば、ここでカスタムの背景色を指定できます。
headerTitleStyle
タイトルコンポーネントのスタイルオブジェクト
headerLeftContainerStyle
たとえば、パディングを追加するために headerLeft
コンポーネントのコンテナのスタイルをカスタマイズします。
headerRightContainerStyle
たとえば、パディングを追加するために headerRight
コンポーネントのコンテナのスタイルをカスタマイズします。
headerTitleContainerStyle
たとえば、パディングを追加するために headerTitle
コンポーネントのコンテナのスタイルをカスタマイズします。
デフォルトでは、headerTitleContainerStyle
は絶対位置スタイルで、left
と right
の両方をオフセットします。これにより、カスタマイズされた headerLeft
を使用した場合、headerLeft
と headerTitle
の間に空白や重複が生じる可能性があります。これは、headerTitleContainerStyle
で left
と right
のスタイルを調整し、headerTitleStyle
で marginHorizontal
を調整することで解決できます。
headerBackgroundContainerStyle
headerBackground
要素のコンテナのスタイルオブジェクト。
headerTintColor
ヘッダーのティントカラー
headerPressColor
マテリアルリップル(Android >= 5.0 のみ)の色
headerPressOpacity
ヘッダーのボタンのプレス不透明度 (Android < 5.0 および iOS)
headerTransparent
デフォルトは false
です。true
の場合、headerBackground
で明示的に提供しない限り、ヘッダーには背景がありません。ヘッダーは画面の上に浮き上がり、下のコンテンツと重なり合います。
これは、半透明のヘッダーやぼやけた背景をレンダリングする場合に役立ちます。
コンテンツがヘッダーの下に表示されないようにするには、コンテンツに手動で上マージンを追加する必要があることに注意してください。React Navigation は自動的にそれを行いません。
ヘッダーの高さを取得するには、HeaderHeightContext
を React の Context API または useHeaderHeight
と一緒に使用できます。
headerBackground
ヘッダーの背景としてレンダリングする React Element を返す関数。これは、画像やグラデーションなどの背景を使用するのに役立ちます。
たとえば、headerTransparent
とともにこれを使用して、半透明のヘッダーを作成するためにぼかしビューをレンダリングできます。
import { BlurView } from 'expo-blur';
// ...
<Stack.Screen
name="Home"
component={HomeScreen}
options={{
headerTransparent: true,
headerBackground: () => (
<BlurView tint="light" intensity={100} style={StyleSheet.absoluteFill} />
),
}}
/>;
headerStatusBarHeight
半透明のステータスバーを考慮するためにヘッダーの上部に追加する追加のパディング。デフォルトでは、デバイスのセーフエリアインセットの最上部の値を使用します。デフォルトの動作を無効にして高さをカスタマイズするには、0 またはカスタム値を渡します。
HeaderBackground
ヘッダーの背景で使用されるスタイル (背景色や影など) を含むコンポーネント。これは headerBackground
のデフォルトです。View
と同じプロパティを受け入れます。
使い方
<HeaderBackground style={{ backgroundColor: 'tomato' }} />
HeaderTitle
ヘッダーにタイトルのテキストを表示するために使用されるコンポーネント。これは headerTitle
のデフォルトです。Text
と同じプロパティを受け入れます。
タイトルの色は、デフォルトでテーマのテキストカラーになります。tintColor
プロパティを渡すことでオーバーライドできます。
使い方
<HeaderTitle>Hello</HeaderTitle>
HeaderBackButton
ヘッダーの戻るボタンを表示するために使用されるコンポーネント。これは スタックナビゲーターのheaderLeft
のデフォルトです。次のプロパティを受け入れます
disabled
- ボタンを無効にするかどうかを制御するブール値。onPress
- ボタンが押されたときに呼び出すコールバック。pressColor
- マテリアルリップル(Android >= 5.0 のみ)の色。backImage
- ヘッダーの戻るボタンにカスタム画像を表示するために React Element を返す関数。tintColor
- ヘッダーのティントカラー。label
- ボタンのラベルテキスト。通常は前の画面のタイトル。デフォルトでは、これは iOS でのみ表示されます。truncatedLabel
- 完全なラベルを表示するのに十分なスペースがない場合に表示するラベルテキスト。labelVisible
- ラベルテキストが表示されるかどうか。デフォルトは iOS ではtrue
、Android ではfalse
です。labelStyle
- ラベルのスタイルオブジェクト。allowFontScaling
- ラベルフォントが、テキストサイズのアクセシビリティ設定を尊重してスケーリングされるかどうか。onLabelLayout
- ラベルのサイズが変更されたときにトリガーされるコールバック。screenLayout
- 画面のレイアウト。titleLayout
- ヘッダー内のタイトル要素のレイアウト。canGoBack
- スタック内で戻る操作が可能かどうかを示すブール値。accessibilityLabel
- スクリーンリーダー用のボタンのアクセシビリティラベル。testID
- テストでこのボタンを特定するためのID。style
- ボタンのスタイルオブジェクト。
使い方
<HeaderBackButton label="Hello" onPress={() => console.log('back pressed')} />
MissingIcon
アイコンが見つからないことを示すフォールバックとして使用できる、欠落アイコンの記号を表示するコンポーネント。以下のpropsを受け付けます。
color
- アイコンの色。size
- アイコンのサイズ。style
- アイコンの追加スタイル。
PlatformPressable
Pressable
の上に抽象化を提供し、プラットフォームの違いを処理するコンポーネント。Pressable
のpropsに加えて、以下の追加のpropsを受け付けます。
pressColor
- Androidで押されたときのマテリアルリップルの色pressOpacity
- プラットフォームがマテリアルリップルをサポートしていない場合に押されたときの不透明度
ResourceSavingView
removeClippedSubviews
を利用して、非アクティブな画面のパフォーマンスを向上させるのに役立つコンポーネント。画面をクリップする必要があるかどうかを示すvisible
propを受け入れます。
使い方
<ResourceSavingView visible={0}>{/* Content */}</ResourceSavingView>
ユーティリティ
SafeAreaProviderCompat
`react-native-safe-area-context の SafeAreaProvider
コンポーネントのラッパーで、初期値が含まれています。
使い方
<SafeAreaProviderCompat>{/* Your components */}</SafeAreaProviderCompat>
HeaderBackContext
親画面の戻るタイトルを取得するために使用できるReactコンテキスト。
import { HeaderBackContext } from '@react-navigation/elements';
// ...
<HeaderBackContext.Consumer>
{(headerBack) => {
if (headerBack) {
const backTitle = headerBack.title;
/* render something */
}
/* render something */
}}
</HeaderBackContext.Consumer>;
HeaderShownContext
親画面でヘッダーが表示されているかどうかを確認するために使用できるReactコンテキスト。
import { HeaderShownContext } from '@react-navigation/elements';
// ...
<HeaderShownContext.Consumer>
{(headerShown) => {
/* render something */
}}
</HeaderShownContext.Consumer>;
HeaderHeightContext
親画面で最も近い表示されているヘッダーの高さを取得するために使用できるReactコンテキスト。
import { HeaderHeightContext } from '@react-navigation/elements';
// ...
<HeaderHeightContext.Consumer>
{(headerHeight) => {
/* render something */
}}
</HeaderHeightContext.Consumer>;
useHeaderHeight
親画面で最も近い表示されているヘッダーの高さを返すフック。
import { useHeaderHeight } from '@react-navigation/elements';
// ...
const headerHeight = useHeaderHeight();
getDefaultHeaderHeight
デフォルトのヘッダーの高さを返すヘルパー。次のパラメータを取ります。
layout
- 画面のレイアウト。height
とwidth
プロパティを含むオブジェクトです。statusBarHeight
- ステータスバーの高さ
getHeaderTitle
ヘッダーで使用するタイトルテキストを返すヘルパー。次のパラメータを取ります。
options
- 画面のオプションオブジェクト。fallback
- オプションでタイトルが見つからなかった場合のフォールバックタイトル文字列。