Javascript 在框外单击时尝试取消反应本机模式

Javascript 在框外单击时尝试取消反应本机模式,javascript,react-native,Javascript,React Native,所以我现在可以在框外单击时取消模式,但问题是,当我在框内单击时,它仍然取消模式。我尝试添加pointerEvents=none,但似乎不起作用 这是我的密码: <View> <Modal animationType="slide" transparent={true} style={{width: '100%', alignSelf: 'center', height: '100%',

所以我现在可以在框外单击时取消模式,但问题是,当我在框内单击时,它仍然取消模式。我尝试添加pointerEvents=none,但似乎不起作用

这是我的密码:

<View>
          <Modal
            animationType="slide"
            transparent={true}
            style={{width: '100%', alignSelf: 'center', height: '100%', justifyContent: 'flex-start', backgroundColor:'green'}}
            visible={this.state.modalVisible}
            onRequestClose={() => {
              alert('Modal has been closed.');
            }}>
            <TouchableWithoutFeedback onPress={() => {
              this.setModalVisible(!this.state.modalVisible);
            }}>
            <View style={{ backgroundColor: 'red', flex: 1}} >

                <View pointerEvents="none" style={{alignSelf: 'center', width: '80%', height: '50%', backgroundColor: 'purple', top: 100}}>
                  <Text pointerEvents="none" >Hello World!</Text>


                </View>

            </View>
            </TouchableWithoutFeedback>
          </Modal>
        </View>

React Native提供的模态组件没有提供许多选项来控制其行为。我建议您试试。

React Native提供的模态组件没有提供很多选项来控制其行为。我建议您改为试试。

通过使用和状态来管理可见性,我解决了这个问题。 BackDropPress上的属性将正常工作。对于要触发模态的元素,应该将状态设置为true。请参见下面的代码

constructor(props){
  super(props);
  this.state = {
  isVisible:false
}

<Modal
  isVisible       = {this.state.isVisible}
  onBackdropPress = { () => this.setState({isVisible:false})}
  backdropOpacity = {0.3}
  style           = {styles.modal}>
</Modal>

通过使用和状态来管理可见性,我解决了这个问题。 BackDropPress上的属性将正常工作。对于要触发模态的元素,应该将状态设置为true。请参见下面的代码

constructor(props){
  super(props);
  this.state = {
  isVisible:false
}

<Modal
  isVisible       = {this.state.isVisible}
  onBackdropPress = { () => this.setState({isVisible:false})}
  backdropOpacity = {0.3}
  style           = {styles.modal}>
</Modal>

所以我让它工作了,它只在react-native模式下工作。react附带的模式不适用于此用例。

因此我让它工作,它只适用于react本机模式。react附带的模式不适用于此用例。

这是因为您正在设置onPress={=>{this.setModalVisible!this.state.modalVisible;}}}}您自己的解决方法是什么?onPress={=>{},或者在模式的某个交叉按钮中设置它,不在包装器上尝试仅将pointerEvents=box添加到TouchableWithOutfeedback我的目标是使包装器不可忽略,但包含文本的框中的内容不应忽略。这是因为您正在按设置此onPress={=>{This.setModalVisible!This.state.modalVisible;}你自己那么解决方法是什么呢?按={=>{},或者在模式的某个交叉按钮中设置它,而不是在包装器上尝试仅向Touchable添加pointerEvents=box而不进行反馈我的目标是包装器是可驳回的,但包含文本的框中的内容不应驳回。我已经再次测试,它对我有效。为了供您参考,我添加了完整的代码。我再次测试,它对我有效。为了供您参考,我添加了完整的代码。