Navigator.NavigationBar
のrouteMapper
小道具を使用してこれを行うことができます。 routeMapper
は、LeftButton
,Title
、およびRightButton
という3つの関数を定義するオブジェクトです。ナビゲーションバーは、レンダリングする対象を決定するためにこれを使用します。これらの機能のそれぞれは、4つの引数を受け取り:
- ルートオブジェクト
- ナビゲータコンポーネント
- 電流経路スタックナビゲータコンポーネントの
- 電流
navState
ルートオブジェクトのインデックス
たとえば、左右のボタンのテキストとタイトルをカスタマイズできるナビゲーションバーを作成する場合は、次のような操作を行うことができます。
const NavigationBarRouteMapper = {
LeftButton(route, navigator, index, navState) {
if (route.leftButtonText && route.leftButtonHandler) {
return (
<TouchableOpacity
onPress={route.leftButtonHandler}
>
<Text>{route.leftButtonText}</Text>
</TouchableOpacity>
);
}
return null;
},
RightButton(route, navigator, index, navState) {
if (route.rightButtonText && route.rightButtonHandler) {
return (
<TouchableOpacity
onPress={route.rightButtonHandler}
>
<Text>{route.rightButtonText}</Text>
</TouchableOpacity>
);
}
return null;
},
Title(route, navigator, index, navState) {
if (route.title) {
return (
<Text>
{route.title}
</Text>
);
}
return null;
},
};
あなたのナビゲーションバーを作成するときは、routeMapper
小道具にこのオブジェクトを渡すことができます。
<Navigator.NavigationBar
routeMapper={NavigationBarRouteMapper}
/>
そして、あなたが渡すことによって、例えば、新しいタイトルをレンダリングすることができますあなたの a title
プロパティ:
this.props.navigator.push({
id: 'your-route-id',
title: 'Custom Title',
});
ナビゲーションバーには、上記のようにrouteMapper
オブジェクトにプッシュしているこのroute
オブジェクトが表示されます。
私はすでにこれを知っています。私のシーンからタイトルのようなparamを渡すことができるかどうか聞いています。 –
すみません。私はあなたを誤解しました。私はあなたのナビゲータ( 'this.props.navigator.props.navigationBar')への参照を保持することによってそれを行うかもしれないと思います。しかし、それはナビゲーションバーが実際にはナビゲータによって所有され、シーンによって所有されているわけではないという、私の意見では、非常に反するようなものです。壊れやすい別のコンポーネントの子を修正することになります。 –
この所有権の問題は、実際にはRNプロジェクトの前に起こっています。 https://github.com/facebook/react-native/issues/2615 –