Saya menjelajahi kemungkinan React Native sambil mengembangkan aplikasi demo dengan navigasi khusus antara tampilan dengan bantuan Navigator
komponen .
Kelas aplikasi utama menjadikan navigator dan renderScene
komponen pengembalian di dalam berlalu:
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 });
}
}}
/>
);
}
}
Untuk saat ini aplikasi berisi dua tampilan:
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>
);
}
}
Yang ingin saya cari tahu adalah:
Saya melihat di log bahwa ketika menekan "pergi untuk memberi makan"
renderScene
disebut beberapa kali meskipun tampilan membuat dengan benar sekali. Apakah ini cara kerjanya?index.ios.js:57 Object {name: 'WelcomeView', component: function} index.ios.js:57 Object {name: 'FeedView', component: function} // renders Feed View
Secara umum apakah pendekatan saya sesuai dengan cara Bereaksi, atau dapatkah itu dilakukan dengan lebih baik?
Yang ingin saya capai adalah sesuatu yang mirip NavigatorIOS
tetapi tanpa bilah navigasi (namun beberapa tampilan akan memiliki bilah navigasi kustom sendiri).
sumber
Jawaban:
Pendekatan Anda harus bekerja dengan baik. Dalam aplikasi besar di Fb, kami menghindari memanggil
require()
komponen adegan sebelum kami merendernya, yang dapat menghemat sedikit waktu start-up.The
renderScene
fungsi harus dipanggil saat adegan pertama didorong ke Navigator. Ini juga akan dipanggil untuk adegan aktif ketika Navigator di-render ulang. Jika Anda melihatrenderScene
dipanggil beberapa kali setelah apush
, maka itu mungkin bug.Navigator masih dalam proses, tetapi jika Anda menemukan masalah dengan itu, silakan mengajukan di github dan beri tag saya! (@ericvicenti)
sumber
Navigator
sudah usang sekarang diRN 0.44.0
Anda dapat menggunakanreact-native-deprecated-custom-components
untuk mendukung aplikasi yang ada yang sedang digunakanNavigator
.sumber
Seperti yang telah disebutkan sebelumnya, Navigator sudah tidak digunakan lagi sejak v0.44, tetapi masih dapat diimpor untuk mendukung aplikasi yang lebih lama:
Sesuai dokumen (Bereaksi Asli v0.54) Navigasi Antar Layar . Sekarang disarankan untuk menggunakan Navigasi Bereaksi jika Anda baru memulai, atau NavigatorIOS untuk aplikasi non-Android
NB : Pada saat memberikan jawaban ini, React Native berada di versi 0.54
sumber
Komponen navigator sudah usang sekarang. Anda dapat menggunakan react-native-router-flux oleh askonov, ia memiliki variasi yang sangat besar dan mendukung banyak animasi yang berbeda dan efisien
sumber