Reactネイティブアプリusing React Navigationには、画面コンポーネントがあり、指定されたパラメーターに基づいてtitle
プロパティを使用してnavigationOptions
を定義します。このような:
static navigationOptions = ({navigation}) => ({
title: navigation.state.params.myParam
});
正常に動作し、タイトルが正しく印刷されます。
ただし、アプリをTypeScriptに移行しているので、myParam
を必須の文字列として定義したいのですが、パラメーターの定義方法がわからないため、IDEでオートコンプリートを取得します。
({navigation}: /* WhatDoIPutHere? */)
this Gist でアプローチを試しましたが、そこで自分自身をコメントしたので、それは私にとってうまく機能していません...
そこで期待されるパラメータを定義するために使用できる正しいタイプは何ですか?
実際には 要点 質問からリンクした解決策はほぼ正しいです-問題はただnavigation.state.params
定義によると未定義の可能性があります!だから、TypeScriptと私のIDE(賢い人)はそれについて不平を言っていました...
あなたは定義から関連するビットを見ることができます ここ :
export interface NavigationLeafRoute<Params> {
// ...
/**
* Params passed to this route when navigating to it,
* e.g. `{ car_id: 123 }` in a route that displays a car.
*/
params?: Params;
}
だから私は自分のコンポーネントでこれを行うことになりました:
interface Params {
myParam: string
}
// ...
static navigationOptions = ({navigation}: NavigationScreenProps<Params>) => ({
title: navigation.state.params ? navigation.state.params.myParam : 'Default title'
});
そして、私のIDE-TypeScriptが大好きになり始めたので、オートコンプリートを含めて、うまく機能します!
次の手順を実行することで、これを機能させることができました。
import { NavigationScreenProp, NavigationRoute } from 'react-navigation';
interface Params {
otherId: string;
otherName: string;
otherPic: string;
id: string;
}
class MessengerContainer extends Component {
static navigationOptions = ({ navigation }: { navigation: NavigationScreenProp<NavigationRoute<Params>, Params>}) => ({
// ... more code here
});