导航回我的屏幕时如何关闭模式?

Posted

技术标签:

【中文标题】导航回我的屏幕时如何关闭模式?【英文标题】:How to close modal when navigating back to my screen? 【发布时间】:2021-11-02 14:01:06 【问题描述】:

所以我有一个呈现模态组件的主屏幕。我使用一些状态来实现模态可见性。但是,问题是当我从模式导航到另一个屏幕然后返回主屏幕时,模式仍然打开,我不知道如何关闭它。我尝试使用 useEffect 但它没有做任何事情。有什么建议吗?

这是主屏幕。 AddButton 组件是一个简单的 TouchableOpacity,onPress 调用了 toggleModal 函数

const [isModalVisible, setIsModalVisible] = useState(false);

 const toggleModal = () => 
      setIsModalVisible(!isModalVisible);
  ;

useEffect(() => 
    setIsModalVisible(false)
  , [navigation])

return (
    <AddButton
      title="ADD BOOK"
      toggleModal=toggleModal
    />
)

模态组件是这样的:

const ModalComponent = (navigation, isModalVisible, toggleModal, title, author, save, onNavigate ) => 
  
  return (
    <Modal isVisible=isModalVisible>
      <View style=styles.container>
        <Text>Modal</Text>

        <View style=styles.footer>
          <TouchableOpacity onPress=toggleModal>
            <Text>Cancel</Text>
          </TouchableOpacity>

          <TouchableOpacity onPress=() => navigation.navigate("AddBookScreen")>
            <Text>save</Text>
          </TouchableOpacity>
        </View>
        
      </View>
    </Modal>
  );
;

【问题讨论】:

【参考方案1】:

修改这段代码

 <TouchableOpacity onPress=() => navigation.navigate("AddBookScreen")>
            <Text>save</Text>
          </TouchableOpacity>

<TouchableOpacity onPress=() => 
    navigation.navigate("AddBookScreen")
    toggleModal();
  >
            <Text>save</Text>
          </TouchableOpacity>

【讨论】:

所以你是对的,我在切换模式中没有使用 () 之前尝试过这种方法。非常感谢,我总是把简单的事情搞砸【参考方案2】:

提取 onPress 函数并将其移至您的页面并将其作为 onSaveClick 回调传递给模态组件。

// on your page
const onSaveClick = () => 
  navigation.navigate("AddBookScreen")
  setIsModalVisible(false)

然后在模态中

<TouchableOpacity onPress=onSaveClick>
  <Text>save</Text>
</TouchableOpacity>

【讨论】:

以上是关于导航回我的屏幕时如何关闭模式?的主要内容,如果未能解决你的问题,请参考以下文章

如何关闭其中包含多个屏幕的 React Navigation 模式

手机屏幕关闭时Android导航架构无法导航

SwiftUI 模式表在关闭后重新打开

屏幕关闭时如何在 iOS 应用程序中检测 iBeacon?

触摸导航栏时关闭 PopOver 屏幕

如何导航到另一个页面关闭模式?