0

我正在使用 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'
  }
});
4

1 回答 1

1

根据<SnackBar/>文档,您有一个名为actionwith 的道具,可让您添加所需的标签,在本例中为Dismiss

检查我创建的零食: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,在我看来,你应该使用关闭按钮,更容易。

于 2019-07-19T06:16:11.133 回答