es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

React Native: ¿Cómo lograr un menú desplegable al hacer clic en los tres puntos en la cabecera superior?

Intenté varios enfoques para lograr esto en mi aplicación. Mi requisito es crear tres puntos clicables en la parte superior de la pantalla y al hacer clic en esos tres puntos abrir un submenú con algunos elementos. Además, al hacer clic en esos elementos, se debe abrir una pantalla separada.

Pero cada vez tengo problemas. Intenté el siguiente enfoque:
1. react-native-popup-menu : no pude implementarlo.

Estoy atascado con esto desde hace varios días, cualquier enfoque / sugerencia es apreciado.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Solución para crear un menú de 3 puntos clicables en react-native

    Para lograr el requisito de crear un menú de 3 puntos clicables en la cabecera de la pantalla y al hacer clic en esos 3 puntos abrir un submenú con algunos elementos y al hacer clic en esos elementos se debe abrir una pantalla separada, podemos utilizar el siguiente enfoque:

    1. Podemos crear un componente de cabecera personalizado utilizando la biblioteca react-navigation.
    2. En el componente de cabecera personalizado, podemos agregar un ícono táctil o un botón para el menú de 3 puntos.
    3. Al hacer clic en el ícono táctil o el botón, podemos mostrar un menú desplegable utilizando la biblioteca react-native-popup-menu.
    4. Podemos agregar elementos al menú y al hacer clic en los elementos, podemos navegar a las pantallas respectivas utilizando la biblioteca react-navigation.

    Pasos:

    1. Instalar las bibliotecas requeridas utilizando el siguiente comando:
    npm install react-navigation react-native-popup-menu
    
    1. Crear un componente de cabecera personalizado:
    import React from 'react';
    import { TouchableWithoutFeedback, View } from 'react-native';
    import Icon from 'react-native-vector-icons/Ionicons';
    import { useNavigation } from '@react-navigation/native';
    
    const Header = () => {
      const navigation = useNavigation();
      const [showMenu, setShowMenu] = React.useState(false);
    
      const onMenuPress = () => {
        setShowMenu(true);
      };
    
      const onDismissMenu = () => {
        setShowMenu(false);
      };
    
      const onNavigateToScreen = (screenName) => {
        setShowMenu(false);
        navigation.navigate(screenName);
      };
    
      return (
        <view>
          <touchablewithoutfeedback onpress="{onMenuPress}">
            <icon name="ellipsis-horizontal" size="{30}"></icon>
          </touchablewithoutfeedback>
          <menu visible="{showMenu}" ondismiss="{onDismissMenu}" anchor=""></menu><view style="{{" height:="" 0="" }}=""></view>}
          >
            <menu.item onpress="{()" ==""> onNavigateToScreen('ScreenOne')}
              title="Pantalla Uno"
            />
            <menu.item onpress="{()" ==""> onNavigateToScreen('ScreenTwo')}
              title="Pantalla Dos"
            />
            <menu.item onpress="{()" ==""> onNavigateToScreen('ScreenThree')}
              title="Pantalla Tres"
            />
    
        </menu.item></menu.item></menu.item></view>
      );
    };
    
    export default Header;
    
    1. Utilizar el componente de cabecera personalizado en la pila de navegación:
    import React from 'react';
    import { createStackNavigator } from '@react-navigation/stack';
    import { NavigationContainer } from '@react-navigation/native';
    import { MenuProvider } from 'react-native-popup-menu';
    import Header from './components/Header';
    import ScreenOne from './screens/ScreenOne';
    import ScreenTwo from './screens/ScreenTwo';
    import ScreenThree from './screens/ScreenThree';
    
    const Stack = createStackNavigator();
    
    const App = () => {
    
      return (
        <menuprovider>
          <navigationcontainer>
            <stack.navigator>
              <stack.screen name="ScreenOne" component="{ScreenOne}" options="{{" headertitle:="" '',="" headerright:="" ()=""> <header></header>,
                }}
              />
              <stack.screen name="ScreenTwo" component="{ScreenTwo}" options="{{" headertitle:="" '',="" headerright:="" ()=""> <header></header>,
                }}
              />
              <stack.screen name="ScreenThree" component="{ScreenThree}" options="{{" headertitle:="" '',="" headerright:="" ()=""> <header></header>,
                }}
              />
            </stack.screen></stack.screen></stack.screen></stack.navigator>
          </navigationcontainer>
        </menuprovider>
      );
    };
    
    export default App;
    

    En el código anterior, hemos agregado el componente de cabecera personalizado en la opción headerRight de las opciones de pantalla.

    Este enfoque resolverá el problema de crear un menú de 3 puntos clicables en react-native.

Comments are closed.