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.

¿Cómo renderizar pestañas dinámicas y su contenido en React Native?

Necesito representar pestañas dinámicas y cargar un componente de interruptor basado en los datos que estoy obteniendo de firebase.

Mi objeto se ve así:

{
  "Habitación principal": "DI7RACPv",
  "Habitación": "87hashd",
  "Cocina": "PZifopFg",
  "Sala de estar": "6VnNdKZ8"
}

La clave debería ser el título de las pestañas y el valor de la clave se puede utilizar para mostrar mis componentes de interruptor. ¿Hay alguna forma de hacerlo en react-native?

REPRESENTACIÓN DE IMAGEN

Representación de la imagen

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para renderizar pestañas dinámicas y cargar un componente de cambio basado en los datos de Firebase en React Native, puedes seguir estos pasos:

    1. Importa los componentes necesarios de React Native y cualquier biblioteca adicional que puedas necesitar (firebase, react-native-tab-view, etc.).
    import React, { useState, useEffect } from 'react';
    import { View, Text } from 'react-native';
    import { TabView, SceneMap, TabBar } from 'react-native-tab-view';
    import firebase from 'firebase';
    
    1. Crea una variable de estado para almacenar los datos de Firebase e inicialízala como un objeto vacío. Utiliza el gancho useEffect para obtener los datos de Firebase y actualizar la variable de estado una vez que el componente se haya montado.
    const [tabsData, setTabsData] = useState({});
    
    useEffect(() => {
      const firebaseConfig = {
        // Tu configuración de Firebase va aquí
      };
    
      if (!firebase.apps.length) {
        firebase.initializeApp(firebaseConfig);
      }
    
      const firebaseRef = firebase.database().ref('tabsData');
      firebaseRef.once('value', (snapshot) => {
        setTabsData(snapshot.val());
      });
    }, []);
    
    1. Crea una función que reciba un par clave-valor y devuelva un componente con el valor como prop. Este componente se renderizará dentro de un componente de cambio.
    const renderSwitchComponent = (key, value) => {
      // La lógica para crear el componente de cambio basado en el valor va aquí
      return <text>{value}</text>;
    };
    
    1. Crea una matriz de objetos que siga el formato { clave: 'Título de la pestaña', valor: 'Datos del componente de cambio' }. Mapea esta matriz para crear una matriz de pestañas y sus componentes de cambio correspondientes.
    const tabs = Object.keys(tabsData).map((key) => {
      return {
        key: key,
        render: () => renderSwitchComponent(key, tabsData[key]),
      };
    });
    
    1. Pasa la matriz tabs como una prop al componente TabView. Además, pasa un componente TabBar personalizado que muestra el título de cada pestaña.
    return (
      <tabview navigationstate="{{" index,="" routes:="" tabs="" }}="" renderscene="{SceneMap({" ...tabs.reduce((obj,="" item)=""> {
            obj[item.key] = item.render;
            return obj;
          }, {}),
        })}
        renderTabBar={(props) => (
          <tabbar {...props}="" indicatorstyle="{{" backgroundcolor:="" 'white'="" }}="" style="{{" backgroundcolor:="" '#333'="" }}="" renderlabel="{({" route="" })=""> (
              <text style="{{" color:="" 'white',="" margin:="" 8="" }}="">{route.key}</text>
            )}
          />
        )}
        onIndexChange={setIndex}
      />
    );
    

    El resultado final debería ser una vista de pestañas dinámicas que muestra componentes de cambio basados en los datos de Firebase.

Comments are closed.