reactjs - 导航回我的屏幕时如何关闭模式?
问题描述
所以我有一个呈现模态组件的主屏幕。我使用一些状态来实现模态可见性。但是,问题是当我从模式导航到另一个屏幕然后返回主屏幕时,模式仍然打开,我不知道如何关闭它。我尝试使用 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>
);
};
解决方案
提取 onPress 函数并将其移动到您的页面并将其作为 onSaveClick 回调传递给模态组件。
// on your page
const onSaveClick = () => {
navigation.navigate("AddBookScreen")
setIsModalVisible(false)
}
然后在模态
<TouchableOpacity onPress={onSaveClick}>
<Text>{save}</Text>
</TouchableOpacity>
推荐阅读
- javascript - Javascript 嵌套对象默认回退选项
- amazon-web-services - AWS Lambda 在启用触发器后跳过 dynamo DB 流中的记录
- shell - linux如何存储最后使用的命令?
- ruby-on-rails - Graphql:找不到生成器“graphql:安装”
- r - 如何修复:doTryCatch(return(expr), name, parentenv, handler) 中的错误:输入/输出错误
- python - 如何在套索回归或任何其他方法中生成系数 >0?
- angular - 如何有条件地添加垫升按钮?
- date - 带日期的 awk 从 unix 时间转换为日期
- c - 套接字发送有时只能在无限循环中工作(C)
- xmobar - 如何格式化字符串输出