当用户单击本机纸张中的屏幕时如何关闭Snackbar

时间:2019-07-19 05:34:14

标签: react-native react-native-paper

我正在使用本机和本机纸开发移动应用程序。 我对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'
  }
});

1 个答案:

答案 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,在我看来,您应该使用“关闭”按钮,方便得多。