Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
3
respuestas

[Bug] la prop eliminar esta undefined

cuando voy a los componente en el navegador con la extersion de las react tools, el eliminar solo aparece en la prop de colaborador ademas que aparece undefined y en el video del instructor la prop trambien esta presente en equipo cosa que ami no. y por ultimo el console log no se ejecuta. paso el codigo trabajado el app.js

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';
import Footer from './componentes/Footer/Index';
function App() {

  const [mostrarFormulario,actualizarMostrar] = useState(false);
  const [colaboradores,actualizarColaboradores] = useState([{
    equipo:"Front End",
    foto: "https://github.com/miguelsotelo01.png",
    nombre:"Miguel A Sotelo",
    puesto:"Programador"
  },
  {
    equipo:"Programacion",
    foto:"https://github.com/miguelsotelo01.png",
    nombre:"Miguel A Sotelo",
    puesto:"Programador"
  },
  {
    equipo:"UX y Diseño",
    foto:"https://github.com/miguelsotelo01.png",
    nombre:"Miguel A Sotelo",
    puesto:"Programador"
  },
  {
    equipo:"Programacion",
    foto:"https://github.com/miguelsotelo01.png",
    nombre:"Miguel A Sotelo",
    puesto:"Programador"
  },
  {
    equipo:"Innocacion y Gestion",
    foto:"https://github.com/miguelsotelo01.png",
    nombre:"Miguel A Sotelo",
    puesto:"Programador"
  }


]);

  const cambiarMostrar = () => {
    actualizarMostrar(!mostrarFormulario)
  }
  const registrarColaborador = (colaborador) => {
    console.log("nuevo colaborador", colaborador)
    actualizarColaboradores([...colaboradores,colaborador])
  }
  //eliminar colaborador
  const eliminarColaborador = () => {
    console.log("eliminar colaborador")
  }
const equipos = [

  {
    titulo:"Programacion",
    colorPrimario: "#57c258",
    colorSecundario: "#d9f7e9"
  },
  {
    titulo:"Front End",
    colorPrimario: "#82cffa",
    colorSecundario: "#e8f8ff"
  },
  {
    titulo:"Data Science",
    colorPrimario: "#57c258",
    colorSecundario: "#f0f8e2"
  },
  {
  titulo:"Devops",
  colorPrimario: "#e06b69",
  colorSecundario: "#fde7e8"
  },

  {
  titulo:"UX y Diseño",
  colorPrimario: "#b86ebf",
  colorSecundario: "#fae9f5"
  },
  {
  titulo:"Movil",
  colorPrimario: "#fbba05",
  colorSecundario: "#fff5d9"
  },
  {
  titulo:"Innocacion y Gestion",
  colorPrimario: "#ff8a29",
  colorSecundario: "#ffeedf"
  }
  ]
  return (
    <div>
      <Header/>
      { /*mostrarFormulario? <Formulario /> : <></>*/ }
      {
      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)}
      eliminarColaborador={eliminarColaborador}
      />
      )
      }
      <Footer/>
    </div>
  );
}

export default App;

el index.js de el componente equipo:

import Colaborador from "../Colaborador";
import "./Equipo.css"

const Equipo = (props) => {

    const {colorPrimario,colorSecundario,titulo}=props.datos
    const {colaboradores, eliminarColaborador} = props
    const obj={
        backgroundColor:colorSecundario
    }


    const estiloTitulo={borderColor:colorPrimario}
    return <>
    {
            colaboradores.length > 0 &&
            <section className="equipo" style={obj}>
                <h3 style={estiloTitulo}>{titulo}</h3>
                <div className="colaboradores">
                    {
                        colaboradores.map((colaborador,index) => <Colaborador 
                        datos={colaborador} 
                        key={index}
                        colorPrimario={colorPrimario}
                        eliminarColaborador={eliminarColaborador}
                        />)
                    }
                </div>
            </section>
    }
    </>
}
export default Equipo

y el index del componente colaborador:

import "./Colaborador.css"
import {AiFillCloseCircle} from "react-icons/ai"
const Colaborador = (props)=>{
    const {nombre,puesto,foto,equipo} = props.datos
    const {colorPrimario, eliminarColaborador} = props
    return <div className="colaborador">
        <AiFillCloseCircle className="eliminar" onClick={eliminarColaborador}/>
        <div className="encabezado" style={{backgroundColor:colorPrimario}}>
            <img src={foto} alt={nombre}/>
        </div>
        <div className="info">
            <h4>{nombre}</h4>
            <h5>{puesto}</h5>
        </div>
    </div>
}
export default Colaborador
3 respuestas

¡Hola Miguel!

Por lo que veo en tu código, la prop eliminarColaborador se está pasando como una función vacía en el componente Equipo, lo que hace que al intentar ejecutarla en el componente Colaborador, no se haga nada. Para solucionar esto, debes pasar la función eliminarColaborador con los datos necesarios para que pueda eliminar el colaborador específico.

En el componente Equipo, debes modificar la función eliminarColaborador para que reciba como parámetro el colaborador que se desea eliminar y luego llamar a la función actualizarColaboradores con un nuevo arreglo de colaboradores que excluya al colaborador que se desea eliminar.

Aquí te dejo el código modificado del componente Equipo:

const Equipo = (props) => {

    const {colorPrimario,colorSecundario,titulo}=props.datos
    const {colaboradores} = props
    const obj={
        backgroundColor:colorSecundario
    }

    const estiloTitulo={borderColor:colorPrimario}

    const eliminarColaborador = (colaborador) => {
        const nuevosColaboradores = colaboradores.filter(c => c.nombre !== colaborador.nombre);
        actualizarColaboradores(nuevosColaboradores);
    }

    return <>
    {
            colaboradores.length > 0 &&
            <section className="equipo" style={obj}>
                <h3 style={estiloTitulo}>{titulo}</h3>
                <div className="colaboradores">
                    {
                        colaboradores.map((colaborador,index) => <Colaborador 
                        datos={colaborador} 
                        key={index}
                        colorPrimario={colorPrimario}
                        eliminarColaborador={() => eliminarColaborador(colaborador)}
                        />)
                    }
                </div>
            </section>
    }
    </>
}

Espero que esto te ayude a solucionar el problema. ¡Buenos estudios!

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

pero esa funcion esta en el app.js no en equipo, llegando al aula 5 en el video 2, "eliminando colaboradores", al hacer la implementacion de esa funcion en el app.js que es donde el instructor lo hace, al hacer la linea actualizarColaboradores(nuevosColaboradores);, rompe la app de alguna manera no se muestran los colaboradores del array por defecto, ni se agregan nuevos.

creo que el error esta en app.js , pusiste : "mostrarFormulario&& <Formulario" sin separacion. Deberia quedar asi: "mostrarFormulario && <Formulario "