Android 将本机-模态作为错误组件进行反应(多次打开)
我创建了一个错误组件以在模式中显示。 我还使用PubSub来获取错误通知,因此我可以激活组件 但是,我有多个屏幕,比如登录,注册,任何形式,另一种形式 因此,每次我有一个组件时,它都会构建一个新组件。。。因此,根据您所处的屏幕,您最多可以看到5个模型以相同的消息打开Android 将本机-模态作为错误组件进行反应(多次打开),android,ios,reactjs,react-native,Android,Ios,Reactjs,React Native,我创建了一个错误组件以在模式中显示。 我还使用PubSub来获取错误通知,因此我可以激活组件 但是,我有多个屏幕,比如登录,注册,任何形式,另一种形式 因此,每次我有一个组件时,它都会构建一个新组件。。。因此,根据您所处的屏幕,您最多可以看到5个模型以相同的消息打开 如果您正在登录,那么您只有一个模式—It self 如果你是在注册,你有两个-登录和它自己 如果你是以任何形式,你有三个:登录,注册(如果你进入该屏幕)和它自己 事情还在继续 所以这个类非常简单 export default
- 如果您正在登录,那么您只有一个模式—It self
- 如果你是在注册,你有两个-登录和它自己
- 如果你是以任何形式,你有三个:登录,注册(如果你进入该屏幕)和它自己
export default class Error extends Component {
constructor(){
super();
this.state = {
modalVisible: false,
errors: []
}
this.setModalVisible = this.setModalVisible.bind(this);
}
setModalVisible(visible) {
this.setState({modalVisible: visible});
}
// Using pubSub to get new error msgs...
componentDidMount() {
PubSub.subscribe("error",function(topic,error){
// Did this to try to stop to show twice
if(this.state.modalVisible)
return;
//Irelevant code here
this.setState({errors: errors});
this.setModalVisible(true);
}.bind(this));
}
render() {
return (
<Modal
animationType={"slide"}
transparent={false}
visible={this.state.modalVisible}
onRequestClose={() => this._setModalVisible(false)}
>
<View style={styles.container}>
<View style={styles.header}>
<View/>
<Text style={styles.headerText}>
An error has occured
</Text>
<Icon
raised
name='close'
color='red'
onPress={() => {
this.setModalVisible(!this.state.modalVisible)
}} />
</View>
<View style={styles.errorContainer}>
{ this.state.errors.map((error, index) => <Text key={index} style={styles.error}>{error}</Text> ) }
</View>
</View>
</Modal>
);
}
}
在Subscribe方法中,我检查是否应该根据屏幕名称使其可见。比如:
if(!this.state.screenName == error.screen)
return;
不管怎么说,这看起来太夸张了。也许有更好的办法
编辑以使用组件:
<Error />
<Error screen='SignUp'/>
是的,就像我在问题上说的。。。我已经做了这个丑陋的解决方案:我仍然在寻找更好的选择
// Checking if the screen is the same
if(this.props.screen !== error.screen)
return;
生成错误对象:
var error = {
screen: 'SignIn',
errors: json.errors || ['Something went wrong.']
}
PubSub.publish("error", error);
并使用错误组件:
<Error />
<Error screen='SignUp'/>
因此,每次出现错误时,它都会弹出当前错误和以前的错误?另一方面,我认为您的onRequestClose中有一个输入错误。\u setModalVisible(false)。您还可以提供一些关于如何使用错误组件的代码吗?谢谢Matt,我更新了问题:)并且没有,它不会上载以前的错误。。。这是以前屏幕上安装的所有错误组件。因此,登录->注册->表单1->表单2->表单3如果您浏览所有这些视图,它将弹出5个具有相同错误的模式。(因为每个实例都会创建一个新实例……所有实例都会“监视”错误通道。
<Error screen='SignUp'/>