3
respostas

[Dúvida] Problemas com colaboradores.map

Ontem eu havia aberto um tópico e resolvido o problema. Hoje fui abrir o projeto e o problema que estava tendo voltou novamente.

Já fiz todas as modificações que encontrei em tópicos passados e não consigo entender onde esta o erro em meu map. Parece que está retornando como indefinido (do nada. Ontem funcionou, dei start no projeto e deu erro hoje).

index (Time)

import React from 'react'
import Colaborador from '../Colaborador';
import './Time.css';


const Time = (props) => {

    const styles = { 
        backgroundColor: props.corSecundaria,
        borderColor: props.corPrimaria,
    }


    return (
         <section className='time' style={styles}>
            <h3 style={{ borderColor: props.corPrimaria }}>{props.nome}</h3>
            <div className='colaboradores'>
                {props.colaboradores.map( colaborador => <Colaborador nome={colaborador.nome} cargo={colaborador.cargo} imagem={colaborador.imagem}/> )}
            </div>
        </section> 
       
    )
}

export default Time;

App:

import { useState } from 'react';
import Banner from './components/Banner';
import Formulario from './components/Formulario';
import Time from './components/Time';


function App() {

  const times = [
    {
      nome: 'Programação',
      corPrimaria: '#57C278',
      corSecundaria: '#D9F7E9',
    },
    {
      nome: 'Front-End',
      corPrimaria: '#82CFFA',
      corSecundaria: '#E8F8FF',
    },
    {
      nome: 'Data Science',
      corPrimaria: '#A6D157',
      corSecundaria: '#F0F8E2',
    },
    {
      nome: 'Devops',
      corPrimaria: '#FFBA05',
      corSecundaria: '#FFF5D9',
    },
    {
      nome: 'UX e Design',
      corPrimaria: '#FF8A29',
      corSecundaria: '#FFEEDF',
    },
    {
      nome: 'Mobile',
      corPrimaria: '#A6D157',
      corSecundaria: '#F0F8E2',
    },
    {
      nome: 'Inovação e Gestão',
      corPrimaria: '#E06B69',
      corSecundaria: '#FDE7E8',
    },
  ];

  const [colaboradores, setColaboradores] = useState([]);

  const aoNovoColaboradorAdicionado = (colaborador) => {
    console.log("Novo colaborador adicionado:", colaborador);
    setColaboradores([...colaboradores, colaborador]);
};


  return (
    <div>
      <Banner />
      <Formulario times={times.map(time => time.nome)} aoColaboradorCadastrado={aoNovoColaboradorAdicionado} />

      {times.map(time =>
        <Time
          key={time.nome}
          nome={time.nome}
          corPrimaria={time.corPrimaria}
          corSecundaria={time.corSecundaria}
          colaborador={colaboradores.filter(colaborador => colaborador.time === time.nome)}
        />
      )} 
    </div>
  )
}

export default App

index (colaborador):

import React from 'react'
import './Colaborador.css';

const Colaborador = (props) => {
  return (
    <div className="colaborador">
        <div className='cabecalho'>
          <img src={props.imagem} alt={props.nome} />
        </div>
        <div className='rodape'>
          <h4>{props.nome}</h4>
          <h5>{props.cargo}</h5>
        </div>
    </div>
  )
}

export default Colaborador;
3 respostas

Evellyn, boa tarde! No seu caso, o erro é muito sutil e está nesta parte do App.js:

<Time
  key={time.nome}
  nome={time.nome}
  corPrimaria={time.corPrimaria}
  corSecundaria={time.corSecundaria}
  colaborador={colaboradores.filter(colaborador => colaborador.time === time.nome)} // <---- aqui
/>

Você está passando a prop com o nome colaborador (singular), mas no componente Time você espera props.colaboradores (plural)

Esse pequeno detalhe faz com que props.colaboradores vire undefined, e quando o React tenta fazer .map() num valor undefined, ele quebra com erro de "Cannot read property 'map' of undefined".

Ola, Evellyn!

No seu componente de Time você esta rodando um map pela variável "colaboradores":

<section className='time' style={styles}>
            <h3 style={{ borderColor: props.corPrimaria }}>{props.nome}</h3>
            <div className='colaboradores'>
                {props.colaboradores.map( colaborador => <Colaborador nome={colaborador.nome} cargo={colaborador.cargo} imagem={colaborador.imagem}/> )}
            </div>
</section> 

E no componente de App você esta passando o array de colaboradores, mas esta chamando ele de colaborador:

{times.map(time =>
        <Time
          key={time.nome}
          nome={time.nome}
          corPrimaria={time.corPrimaria}
          corSecundaria={time.corSecundaria}
          colaborador={colaboradores.filter(colaborador => colaborador.time === time.nome)}
        />
)} 

Mudando o nome da prop pra colaboradores deve resolver o problema!

{times.map(time =>
        <Time
          key={time.nome}
          nome={time.nome}
          corPrimaria={time.corPrimaria}
          corSecundaria={time.corSecundaria}
          colaboradores={colaboradores.filter(colaborador => colaborador.time === time.nome)}
        />
)} 

Oi Patrick! Tudo bem?

Enquanto tentava resolver eu verifiquei que estava errado. Cheguei a corrigir. O erro de undefined deixou de aparecer, contudo na hora de "criar card" o componente não é carregado. Eu recebo as informações via console.log que fiz para ver se estava chegando algo, mas o componente não carrega de jeito nenhum.

Quer dizer, corrigindo: quando seleciono "programação" ele não aparece. Vê ali que ele da como vazio? De inicio achei que por já estar escrito progamação, ele não tenha sido selecionado. Então selecionei novamente e ele da esse erro.

Imagino que deva ser outro problema, mas estou aproveitando o gancho kkkk.

![](Componente programação não carrega )