Как отключить Snackbar, когда пользователь нажимает на экран в реагировать на родной бумаге

Я разрабатываю мобильное приложение с реактивной и реактивной бумагой. И у меня проблема с Snackbar компонент предоставлен реактивно-родной бумагой. Как сделать снек-бар скрытым, когда пользователь где-нибудь касается?

Это 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 ответ

Согласно <SnackBar/> документы у вас есть опора называется action с помощью позволяет вам добавить метку, которую вы хотите, в данном случае, 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, на мой взгляд, вы должны использовать кнопку отклонения, намного проще.

Другие вопросы по тегам