Ich habe TabNavigator
mit Kamera innen. Codebeispiel:React-Native TabNavigator mit Kamera (Kamera ist immer an)
Mein index.android.js
const MainNavigator = TabNavigator({
Home: { screen: QRcreatorScreen },
Contacts: { screen: ContactsScreen },
Camera: { screen: CameraScreen },
Profile: { screen: ProfileScreen },
}, {
tabBarPosition: 'bottom',
lazy: true
});
und meine Kamera Seite:
export default class CameraScreen extends React.Component {
static navigationOptions = {
title: 'Camera',
};
emitContact() {
alert("Contact been added");
}
render() {
return (
<QRCodeScanner onRead={(e) => {
SetNewContact(e.data,() => { this.emitContact() })
}}
topContent={<Text>Just show me another code</Text>}
showMarker={true}
bottomContent={(
<TouchableOpacity style={styles.buttonTouchable}>
<Text style={styles.buttonText}
onPress={() => this.props.navigation.dispatch(resetAction) }>OK. Got it!
</Text>
</TouchableOpacity>
)}
/>
);
};
}
Einfach nur Leser QR-Code.
Das Problem ist, weiter: wenn in TabNavigator
Option gesetzt lazy == false
, TabNavigator
alle seine Szenen machen, wenn die Anwendung gestartet wird.
Bei lazy == true
werden Szenen wiedergegeben, wenn sie aufgerufen werden, aber wenn wir die letzte Szene aufrufen (in unserem Fall Profile
), werden alle Szenen, die sich davor befinden, ebenfalls gerendert.
Wenn ich also auf Profile
tippe, benötigt man etwas Zeit, um alle Szenen zu laden, und es ist wirklich schlecht für die App-Leistung.
Was muss ich tun, um die Kamera-Seite nur gerendert zu machen, wenn sie aufgerufen wird?
Und noch eine Frage: Wenn wir die Kameraszene verlassen, funktioniert die Kamera noch, wie kann ich sie ausschalten, wenn ich die Szene verlasse?
Ich verwende Paket react-native-qrcode-scanner
die react-native-camera: ^0.10.0