我知道这是一个广泛的问题,但我无法在反应本机中理解事物的正确方式。在导航之间显示微调(反应 - 原生加载 - 微调覆盖)
接下来是我在学习反应本机时做出的一些假设
我的应用程序围绕连接到redux的StackNavigator
构建。 导航器中的第一个屏幕是我的登录屏幕。所以这基本上是总是被加载的'主'屏幕。用户登录(或已经登录)并转发到另一页面。在调度导航时,我可以更新登录页面的状态。我想使用这个逻辑来显示微调,直到导航完成。
问题是,当用户选择通过扫描QR码登录时,会打开一个加载相机视图的新屏幕。这需要几毫秒/秒。我试图找到一种方式来显示使用react-native-loading-spinner-overlay加载动画。
export class Login extends React.Component {
constructor(props) {
super(props);
this.state = {
spinnerVisible: false,
};
}
render() {
return <KeyboardAvoidingView
style={styles.container}
contentContainerStyle={styles.contentContainerStyle}
behavior="position"
>
<Spinner visible={this.state.spinnerVisible} />
<Image
source={images.app.title}
style={styles.titleImage}
/>
<View style={styles.columnForm}>
<Button
title="INLOGGEN MET QR CODE"
wrapperBorderStyle={styles.titleButton}
onPress={this.onScanQRCode.bind(this)}
// disabled={true}
/>
<View style={{flex:0, flexDirection: 'row', marginTop:10, marginBottom:10}}>
// removed other elements
<Button
title="INLOGGEN"
wrapperBorderStyle={styles.titleButton}
onPress={() => alert('de nest werkt')} />
</View>
</KeyboardAvoidingView>
}
onScanQRCode() {
// UPDATE STATE HERE TO SHOW SPINNER?
this.setState({spinnerVisible: true});
this.props.navigation.dispatch(NavigationActions.navigate({ routeName: 'Camera' }));
}
}
这可以正常工作,但是当摄像机视图被渲染时会显示旋钮,而不是在用户按下按钮时显示。 此外,我不知道如何隐藏微调器时,摄像头视图呈现除了setTimeout
以预定义的时间后更改状态。这种方法会觉得“哈克”。
什么是实现此方案的正确方法? 我可以通过this.props
访问调度,导航和路线。