Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Meus Cards ficam em branco ao tirar do estatico

atualizo o formulario e envio para a criação do Card, mas renderiza os cards em branco.

warning do console:

Warning: Each child in a list should have a unique "key" prop.

Check the render method of Time. See https://reactjs.org/link/warning-keys for more information. at Colaborador (http://localhost:3000/static/js/bundle.js:384:5) at Time (http://localhost:3000/static/js/bundle.js:743:28) at div at App (http://localhost:3000/static/js/bundle.js:62:92)

app js

import { useState } from 'react';
import Banner from './componentes/Banner'
import Formulario from './componentes/Formulario/Formulario';
import Time from './componentes/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: '#E06B69',
      corSecundaria: '#FDE7E8'

    },
    {
      nome: 'UX e Design',
      corPrimaria: '#DB6EBF',
      corSecundaria: '#FAE9F5'

    },
    {
      nome: 'Mobile',
      corPrimaria: '#FFBA05',
      corSecundaria: '#FFF5D9'

    },
    {
      nome: 'Inovação e Gestão',
      corPrimaria: '#FF8A09',
      corSecundaria: '#FFEEDF'

    }

  ]

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

  const aoNovoColaboradorAdicionado = (colaborador) => {
    console.log(colaborador);
    colaboradores.push(colaborador)
    setColaboradores([...colaboradores, colaborador])

  }
  return (
    <div className="App">
      <Banner />
      <Formulario nomeDosTimes={times.map(time => time.nome)} aoColaboradorCadastrado={colaborador => aoNovoColaboradorAdicionado(colaborador)} />
      {times.map(time =>
        <Time
          key={time.nome}
          nome={time.nome}
          corPrimaria={time.corPrimaria}
          corSecundaria={time.corSecundaria}
          colaboradores={colaboradores}

        />)}


    </div>
  );
}

export default App;

time js

import Colaborador from '../Colaborador'
import './Time.css'

const Time = (props) => {
    const css = { backgroundColor: props.corSecundaria }
    return (


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


        </section>
    )

}

export default Time

colaborador js

import './Colaborador.css'

const Colaborador = ({Nome, Imagem, Cargo}) => {
    return (<div className='colaborador'>
        <div className='cabecalho'>
            <img src={Imagem} alt={Nome} />
        </div>
        <div className='rodape'>
            <h4>{Nome} </h4>
            <h5>{Cargo}</h5>

        </div>
    </div>
    )
}
export default Colaborador
2 respostas

Salve, Wendel!

Se liga só aqui, onde você passa as props pro colaborador:

                <Colaborador
                    nome={colaborador.nome}
                    cargo={colaborador.cargo}
                    imagem={colaborador.imagem}
                     />)}

Primeiro ponto: é aqui que ele diz que falta a prop key, porque você mapeia cada colaborador do array para um elemento. Pra corrigir o warning, basta alterar para:

                <Colaborador
                    key={colaborador.nome}
                    nome={colaborador.nome}
                    cargo={colaborador.cargo}
                    imagem={colaborador.imagem}
                     />)}

E, além disso, repara que você esta passando as props nome, cargo e imagem todos com letras minúsculas. Mas, no componente, está esperando com a primeira letra maiúscula:

const Colaborador = ({Nome, Imagem, Cargo}) => {
    return (<div className='colaborador'>
        <div className='cabecalho'>
            <img src={Imagem} alt={Nome} />
        </div>
        <div className='rodape'>
            <h4>{Nome} </h4>
            <h5>{Cargo}</h5>

        </div>
    </div>
    )
}

Lembre-se que as letras em maiúsculo e minúsculo fazem diferença. Acredito que se você ajustar para:

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

        </div>
    </div>
    )
}

Deve funcionar :)

Consegue testar? Depois me diz se deu certo ;)

solução!

Realizei as alterações. mas ao criar o card, aparece o card duplicado como se tivesse chamado duas vezes o . o warning continuou.

https://github.com/WendelPaesx/organo

deixei no repositorio para facilitar, se puder ajudar vai salvar muito!!

obrigado!