Solucionado (ver solución)
Solucionado
(ver solución)
2
respuestas

[Duda] No muestra los colaboradores al filtrar

Buen día, no logro que muestre los colaboradores al usar filter. Podrían ayudarme?

Cuando estaba de la siguiente forma funcionaba: Ingrese aquí la descripción de esta imagen para ayudar con la accesibilidad

Pero al usar .filter ya no:

import {useState} from "react";
import './App.css';
import Header from './componentes/header/Header';
import Formulario from './componentes/Formulario/Formulario';
import MiOrg from './componentes/MiOrg';
import Equipo from "./componentes/Equipo";

function App() {
  const [mostrarFormulario, actualizarMostrar] = useState(false); 
  const [colaboradores, actualizarColaboradores] = useState([]);


  const cambiarMostrar = () => {
    actualizarMostrar(!mostrarFormulario) 
    }
  
  const registrarColaborador = (colaborador) => { // recibe todo lo que referencia al colaborador
    console.log("Nuevo colaborador ", colaborador)
    actualizarColaboradores([...colaboradores, colaborador]) 
  }
  
  // Lista de equipos
  const equipos = [
      //abro objeto:
    {
      titulo:"Programación",
      colorPrimario: "#57C278",
      colorSecundario: "#D9F7E9"
    },  
    {
      titulo:"Front End",
      colorPrimario: "#82CFFA",
      colorSecundario: "#E8F8FF"
    },
    {
      titulo:"Data Science",
      colorPrimario: "#A6D157",
      colorSecundario: "#F0F8E2"
    },
    {
      titulo:"Devops",
      colorPrimario: "#E06B69",
      colorSecundario: "#FDE7E8"
    },
    {
      titulo:"UX y Diseño",
      colorPrimario: "#DB6EBF",
      colorSecundario: "#FAE9F5"
    },
    {
      titulo:"Móvil",
      colorPrimario: "#FFBA05",
      colorSecundario: "#FFF5D9"
    },
    {
      titulo:"Innovación y Gestión",
      colorPrimario: "#FF8A29",
      colorSecundario: "#FFEEDF"
    }
      ]

  return (
    <div>
      <Header />
      {
        mostrarFormulario && <Formulario 
        equipos={equipos.map((equipo) => equipo.titulo)} 
        registrarColaborador = {registrarColaborador}
      />}
      <MiOrg cambiarMostrar={cambiarMostrar}/>

        equipos.map( (equipo) => <Equipo 
          datos={equipo} 
          key={equipo.titulo} 
          colaboradores={colaboradores.filter(colaborador => colaborador.equipo === equipo.titulo)} 
          /> 
        )
      }
    </div>
  );
}
export default App;

Ingrese aquí la descripción de esta imagen para ayudar con la accesibilidad

Ingrese aquí la descripción de esta imagen para ayudar con la accesibilidad

2 respuestas

Hola, ¡espero que estés teniendo un buen día! Veo que estás teniendo problemas con el método .filter en tu código de React.

Por lo que puedo ver en tu código y en las imágenes proporcionadas, estás intentando filtrar los colaboradores basándote en el equipo al que pertenecen. Sin embargo, parece que algo no está funcionando como esperabas.

Estás utilizando correctamente el método .filter. Este método crea un nuevo array con todos los elementos que pasen una prueba implementada por la función proporcionada. En tu caso, estás filtrando los colaboradores donde colaborador.equipo === equipo.titulo.

Si este código no está funcionando, podría ser debido a un problema con los datos que estás utilizando. Aquí hay algunas cosas que podrías revisar:

  1. Asegúrate de que colaborador.equipo y equipo.titulo realmente contienen los datos que esperas. Podrías hacer esto con un console.log dentro de tu función de filtro para ver qué datos estás manejando.

  2. Comprueba que los datos que estás comparando son del mismo tipo (ambos strings, por ejemplo) y que están en el mismo formato. Por ejemplo, si uno es "Front End" y el otro es "front end", no serán considerados iguales.

  3. Verifica que estás añadiendo correctamente nuevos colaboradores al estado. Puedes hacer esto comprobando el estado después de añadir un nuevo colaborador.

Por ejemplo:

const registrarColaborador = (colaborador) => {
  console.log("Nuevo colaborador ", colaborador)
  actualizarColaboradores([...colaboradores, colaborador])
  console.log(colaboradores); // Añade esta línea para verificar el estado
}

Espero que estas sugerencias te ayuden a identificar el problema. Recuerda, la depuración es una parte importante del desarrollo de software y estas habilidades mejorarán con el tiempo. ¡Sigue adelante!

¡Saludos!

Si este post te ayudó, por favor marca como solucionado ✓. ¡Continúa con tus estudios!
solución!

Muchas gracias por la respuesta!

Volví al código en App.js dónde tengo el objeto con la lista de equipos y quité el tildé en uno de los títulos para probar si tenia diferente el valor del string. Al actualizarse en el navegador, vi que quitaba el tilde y la mayúscula del primer título y en la lista desplegable, automáticamente... Recargué la página, quité la traducción automática de Chrome y funcionó, con el código tal cual tenía antes! :(