Navigator
component を使用して、ビュー間のカスタムナビゲーションを備えたデモアプリを開発しながら、 React Native の可能性を探っています。
メインアプリクラスはナビゲータをレンダリングし、renderScene
内で渡されたコンポーネントを返します。
class App extends React.Component {
render() {
return (
<Navigator
initialRoute={{name: 'WelcomeView', component: WelcomeView}}
configureScene={() => {
return Navigator.SceneConfigs.FloatFromRight;
}}
renderScene={(route, navigator) => {
// count the number of func calls
console.log(route, navigator);
if (route.component) {
return React.createElement(route.component, { navigator });
}
}}
/>
);
}
}
現在、アプリには2つのビューが含まれています。
class FeedView extends React.Component {
render() {
return (
<View style={styles.container}>
<Text>
Feed View!
</Text>
</View>
);
}
}
class WelcomeView extends React.Component {
onPressFeed() {
this.props.navigator.Push({
name: 'FeedView',
component: FeedView
});
}
render() {
return (
<View style={styles.container}>
<Text style={styles.welcome}>
Welcome View!
</Text>
<Text onPress={this.onPressFeed.bind(this)}>
Go to feed!
</Text>
</View>
);
}
}
私が理解したいのは:
ログを見ると、「go to feed」を押すと、renderScene
が数回呼び出されますが、ビューは1回正しくレンダリングされます。アニメーションはどのように機能しますか?
index.ios.js:57 Object {name: 'WelcomeView', component: function}
index.ios.js:57 Object {name: 'FeedView', component: function}
// renders Feed View
一般に、私のアプローチはReactの方法に準拠していますか、それともより良い方法ですか?
私が達成したいのは NavigatorIOS
に似ていますが、ナビゲーションバーはありません(ただし、一部のビューには独自のカスタムナビゲーションバーがあります)。
あなたのアプローチはうまくいくはずです。 Fbの大きなアプリでは、レンダリングするまでシーンコンポーネントのrequire()
を呼び出さないようにします。これにより、起動時間が少し短縮されます。
renderScene
関数は、シーンが最初にナビゲータにプッシュされたときに呼び出す必要があります。また、ナビゲーターが再レンダリングされるときにアクティブなシーンに対して呼び出されます。 renderScene
の後にPush
が複数回呼び出される場合は、おそらくバグです。
ナビゲーターはまだ開発中ですが、問題が見つかった場合はgithubにファイルして、タグを付けてください! (@ericvicenti)
Navigator
はRN 0.44.0
で廃止されました。代わりにreact-native-deprecated-custom-components
を使用して、Navigator
を使用している既存のアプリケーションをサポートできます。
Navigatorコンポーネントは廃止されました。 askonovのreact-native-router-fluxを使用できます。多種多様で、多くの異なるアニメーションをサポートし、効率的です
他の人が以前に述べたように、Navigatorはv0.44から非推奨になりましたが、古いアプリケーションをサポートするためにインポートすることができます。
ナビゲータは、バージョン0.44のコアReact Nativeパッケージから削除されました。モジュールは react-native-custom-components パッケージに移動されました。このパッケージは、後方互換性を維持するためにアプリケーションでインポートできます。
Navigatorの元のドキュメントを表示するには、古いバージョンのドキュメントに切り替えてください。
ドキュメント(React Native v0.54) 画面間の移動 に従います。開始したばかりの場合は React Navigation を、Android以外のアプリケーションの場合は NavigatorIOS を使用することをお勧めします
ナビゲーションを始めたばかりの場合は、おそらくReact Navigationを使用します。 React Navigationは、iOSとAndroidの両方で共通のスタックナビゲーションとタブナビゲーションパターンを表示する機能を備えた、使いやすいナビゲーションソリューションを提供します。
...
IOSのみをターゲットにしている場合は、最小限の構成でネイティブのルックアンドフィールを提供する方法としてNavigatorIOSもチェックアウトすることをお勧めしますネイティブUINavigationControllerクラスのラッパーを提供します。
NB:この回答を提供した時点で、React Nativeはバージョン0.54でした