导航到另一个屏幕时关闭模式

Jud*_* M. 5 react-native react-modal react-navigation

我有一个带主屏幕的应用程序,在这个屏幕上我正在渲染一个打开的模态button press,在Modal我有一个按钮应该将我导航到另一个屏幕,它导航正确但是当我导航到另一个屏幕时,模态没有没有消失,怎么隐藏?

添加代码进行演示

家:

import React, { Component } from 'react';
import Modal from './Modal';

class Home extends Component {
  state = {
    isModalVisible: false
  };

  toggleModal = () =>
    this.setState({ isModalVisible: !this.state.isModalVisible });

  render() {
    const { navigate } = this.props.navigation;

    <Modal
    visible={this.state.isModalVisible}
    navigation={this.props.navigation}
    />
    );
  }
}

export default Home;
Run Code Online (Sandbox Code Playgroud)

模态:

import React, { Component } from "react";
import Modal from "react-native-modal";

class Modal extends Component {

  render() {
    const { navigate } = this.props.navigation;

    return (
        <Modal
        isVisible={this.props.visible}>
          <Button onPress={() => {navigate('Main')}}>
            >Button</Text>
          </Button>
        </Modal>
    );
  }
}

export default Modal;
Run Code Online (Sandbox Code Playgroud)

Pri*_*dya 5

理想情况下,您应该等待setState回调内完成,然后导航到屏幕,因为这些方法是异步的,如果在完成navigate之前调用,可能会破坏状态。setState

家长也应该控制孩子的状态。

onNavigate = () => {
  this.setState({isModalVisible: false}, () => this.props.navigation.navigate('Main')
}

<Modal
    visible={this.state.isModalVisible}
    onNavigate={this.onNavigate}
 />
Run Code Online (Sandbox Code Playgroud)

莫代尔

<Modal
  isVisible={this.props.visible}>
    <Button onPress={this.props.onNavigate}>
      <Text>Button</Text>
    </Button>
</Modal>
Run Code Online (Sandbox Code Playgroud)