单击按钮上的关闭模式反应本机

Posted

技术标签:

【中文标题】单击按钮上的关闭模式反应本机【英文标题】:Close modal on click button react native 【发布时间】:2019-12-10 06:35:54 【问题描述】:

我有一个在按钮单击时显示的模态,并且该模态是使用 prop 从另一个组件中获取的。

在模态中有一个关闭模态的按钮,如何在单击按钮时关闭模态。我试过了,还是不行。

//InvalidUser

const InvalidUser = (props) => (
<Modal
    visible=props.display
    animationType="slide"
    onRequestClose=() => console.log('closed')
>
    <View style=styles.modalBox>
        <View style=width: 300>
            <Text style=styles.text>
                props.data
            </Text>
            <TouchableOpacity
                onPress=() =>
                    this.closeModal()
                >
                <Text style=styles.buttonOk>Ok</Text>
            </TouchableOpacity>
        </View>
    </View>
</Modal>
);

//登录

export default class LoginFirst extends Component 
constructor(props) 
    super(props);

    this.state = 
        email: '',
        modalVisible: false
    ;


nextBtn = () => 
    let reg = /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w2,3)+$/;

    if (this.state.email !== '') 
        if (reg.test(this.state.email) === false) 

        
        else 
            this.setState(modalVisible: true);
        
    


render() 
    let notRegistered = this.state.email+' is not recognized as a registered user. Please contact us for further assistance.';

    return (
        <View style=styles.container>
            <ScrollView contentContainerStyle=styles.scroller>
                <View
                    style=styles.inputSection
                >
                    <Text style=styles.label>Email Address:</Text>
                    <View style=styles.section>
                        <Image
                            style=styles.icon
                            source=require('../../../../assets/user.png')
                        />
                        <TextInput
                            style=styles.input
                            placeholder='johnsmith@gmail.com'
                            underlineColorandroid='transparent'
                            onChangeText=(text) => this.setState(email:text)
                        />
                    </View>
                    <TouchableOpacity 
                        style=styles.button
                        onPress=() =>
                            this.nextBtn()
                        
                    >
                            <Text style=styles.next>Next</Text>
                    </TouchableOpacity>
                </View>
            </ScrollView>
            <InvalidUserModal
                data=notRegistered
                display=this.state.modalVisible
            />
        </View>
    );


上面的代码完美地显示了模态,但是我无法关闭模态。有什么办法可以关闭。

请看下图。

【问题讨论】:

closeModal() 函数在哪里? 我不知道在哪里添加这个。 【参考方案1】:

从父组件创建 closeModal 函数并将其传递给 InvalidUserModal

closeModal = () => 
  this.setState(modalVisible: false);


<InvalidUserModal
   data=notRegistered
   display=this.state.modalVisible
   closeModal=this.closeModal
/>

并在按下按钮时在 InvalidUserModal 中调用它

<TouchableOpacity onPress=props.closeModal>
  <Text style=styles.buttonOk>Ok</Text>
</TouchableOpacity>

【讨论】:

不显示Uncaught TypeError: Cannot read property 'props' of undefined at Object.onPress @JithinVarghese 抱歉,没注意到你用的是函数组件,把 this.props 改成 props 上述更改不起作用,请检查一下。 我已将console.log 放入closeModal。但它没有显示。 @JithinVarghese 抱歉,忘记将 closeModal 传递给 InvalidUserModal 大声笑,再检查一遍【参考方案2】:

对于父级,将closeModal 方法作为道具传递给您的组件

  class LoginFirst extends Component 
      closeModal = () => 
        this.setState(modalVisible: false);
      
      render() 
        return (
          <InvalidUserModal
            data=notRegistered
            display=this.state.modalVisible
            closeModal=this.closeModal
          />
        )
      
    

对于你的模态组件

<Modal
  visible=props.display
  animationType="slide"
  onRequestClose=() => console.log('closed')
>
  <TouchableOpacity onPress=props.closeModal>
    <Text style=styles.buttonOk>Ok</Text>
  </TouchableOpacity>
</Modal>

【讨论】:

以上是关于单击按钮上的关闭模式反应本机的主要内容,如果未能解决你的问题,请参考以下文章

使用列表视图项单击反应本机模式

反应本机模式未关闭

使用转义键关闭反应引导模式

React 本机模式的行为不符合预期

如何在主页中打开后退按钮 android 以退出应用程序并关闭反应本机导航侧菜单

将本机传递参数反应给其他组件