我正在使用本机和本机纸开发移动应用程序。
我对Snackbar
组件提供的react-native-paper有疑问。
当用户触摸任何地方时如何隐藏小吃栏?
这是GIF,当小吃栏位于屏幕底部时,我尝试点击许多。我想在点击屏幕时将其隐藏。
https://gyazo.com/a279a5e9a1b8270e7303446d20c238dc
这是我的代码。
import React, { Component } from 'react';
import { Text, View, StyleSheet } from 'react-native';
import { Provider, Snackbar } from 'react-native-paper';
export default class MainScreen extends Component {
constructor(props) {
super(props);
this.state = {
visible: true,
};
this.onDismissSnack = this.onDismissSnack.bind(this);
}
onDismissSnack() {
this.setState({
visible: false
})
}
render() {
return (
<Provider>
<Snackbar
visible={this.state.visible}
onDismiss={() => this.onDismissSnack()}>
<Text>Hello Snackbar</Text>
</Snackbar>
</Provider>
)
}
}
const styles = StyleSheet.create({
container: {
flex: 1,
flexDirection: 'row',
justifyContent: 'center',
alignItems: 'center'
}
});
答案 0 :(得分:0)
根据<SnackBar/>
docs,您有一个名为action
的道具,可让您添加所需的标签,在本例中为关闭。
检查我制作的小吃:https://snack.expo.io/@abranhe/snackbar-rn-paper
import React, { useState } from 'react';
import { View, Text, Button } from 'react-native';
import { Snackbar } from 'react-native-paper';
export default () => {
const [visible, setVisible] = useState(false);
return (
<View style={{ flex: 1, justifyContent: 'center' }}>
<Button title="Show SnackBar" onPress={() => setVisible(true)} />
<Snackbar
visible={visible}
onDismiss={() => setVisible(false)}
action={{
label: 'Dismiss',
onPress: () => setVisible(false),
}}>
<Text>Hello Snackbar</Text>
</Snackbar>
</View>
);
};
在问题的作者请求后更新
要消除这种情况,您可以将组件放入模态中,如下所示:
import React, { useState } from 'react';
import {
View,
Text,
Button,
Modal,
StyleSheet,
TouchableWithoutFeedback,
} from 'react-native';
import { Snackbar } from 'react-native-paper';
export default () => {
const [visible, setVisible] = useState(true);
return (
<View style={styles.container}>
<Button title="Show SnackBar" onPress={() => setVisible(true)} />
<Modal
transparent={!visible}
visible={visible}
onRequestClose={() => setVisible(false)}>
<TouchableWithoutFeedback onPress={() => setVisible(false)}>
<View style={styles.modal}>
<Snackbar visible={visible}>
<Text>Hello Snackbar</Text>
</Snackbar>
</View>
</TouchableWithoutFeedback>
</Modal>
</View>
);
};
const styles = StyleSheet.create({
container: {
flex: 1,
justifyContent: 'center',
},
modal: {
width: '100%',
height: '100%',
position: 'relative',
},
});
解决方法小吃https://snack.expo.io/@abranhe/workaround-snackbar,在我看来,您应该使用“关闭”按钮,方便得多。