1
resposta

[Bug] Erro no código

Professor eu estou adaptando o projeto do curso anterior para esse , isso juntamente com a diferença que eu fiz do meu projeto organo para o original,

A principio meu projeto estava um pouco diferente estava ultilizando muitas props , e acabou por dar um erro Warning: Expected onClick listener to be a function, instead got a value of object type. então eu mudei algumas partes do código para deixar igual ao do novo projeto, só que mesmo assim ta dando algum erro que eu não to conseguindo achar quando eu clico pra criar o card.

Segue meu código e o erro abaixo :

import { useState } from 'react';
import Banner from './componentes/Banner/index.js';
import Formulario from './componentes/Formulario/index.js';
import Time from './componentes/Time/index.js';
import Rodapé from './componentes/Rodapé/index.js';


function App() {

  const times = [ 
  {
    nome: 'League Of Legends',
    corDoCard: '#daa520',
    corDeFundo: '#255adf',
  },
 //RESTO DOS TIMES OMITIDOS//
]

  const [jogadores, setJogadores] = useState([]) 

  const aoNovoJogadorAdicicionado = (jogador) => 
  setJogadores([...jogadores, jogador]) 
}
    function deletarJogadores() {
      console.log('Deletando Jogadores');
    }

return (
    <div className="App">
      <Banner/>
      <Formulario NomeDosTimes={times.map(time => time.nome)} aoJogadorCadastrado={jogador => aoNovoJogadorAdicicionado(jogador)} />
      {times.map((time,indice) => 
      <Time
        key={indice} 
        time={time}
        jogadores={jogadores.filter(jogador => jogador.time === time.nome )}
        aoDeletar={deletarJogadores}
      />)}
      <Rodapé/>
    </div>
  ); 
}

export default App;



import Jogador from '../Jogadores'
import './Time.css'

const Time = ({time , jogadores , aoDeletar}) => {

    return (
        (jogadores.length > 0) ? 
        <section className='time' style={time.corDeFundo}>
            <h3 style={{color: time.corDoCard}}>{time.nome}</h3>
            <div className='jogadores'>
                {jogadores.map((jogador, indice)  => {
                    return <Jogador key={indice} jogador={jogador} aoDeletar={aoDeletar} corDoNome={time.corDoCard} corDoCard={time.corDoCard}/>;
                })}
            </div>
        </section>
        : ''
    )
} 

export default Time

import './Jogador.css'

const Jogador = ({ jogador,corDoCard, corDoNome, aoDeletar}) => {
    return (
    <div className='Jogador'>
        <div className='deletar' onClick={aoDeletar}>deletar</div>
        <div className='cabecalho' style={{backgroundColor: corDoCard}}>
            <img className='icone__jogador' src={jogador.imagem} alt={jogador.nome}></img>
        </div>

        <div className='rodape'>
            <h4 style={{color: corDoNome}}>{jogador.nome}</h4>
            <h5>{jogador.função}</h5>
        </div>

        <div className='rodape' id='card'>
            <img className='imagem__avatar' src={jogador.avatar} alt={jogador.avatar}></img>
        </div>

        <div style={{backgroundColor: corDoCard}} className='Card__Avatar' id='personagem'>
            <h4>{jogador.personagem}</h4>
        </div>

    </div>)
}

export default Jogador

Código de erro não indentificado

1 resposta

Olá, Marcos! Tudo bem com você?

Peço desculpas pela demora em obter um retorno.

Parece que você está enfrentando um erro porque não está passando uma função válida para o evento onClick do componente Jogador. O erro "Expected onClick listener to be a function, instead got a value of object type" indica que o valor passado para onClick não é uma função, mas sim um objeto.

Isso provavelmente está ocorrendo porque você está passando a propriedade aoDeletar diretamente para o componente Jogador, e quando você tenta acioná-la através do onClick, ela não é uma função. O que você precisa fazer é passar uma função que lide com a exclusão do jogador para o componente Jogador.

Aqui está como você pode ajustar seu código para corrigir esse problema:

No componente Time, atualize o loop map onde você renderiza os jogadores:

{jogadores.map((jogador, indice)  => {
    return <Jogador 
               key={indice} 
               jogador={jogador} 
               aoDeletar={() => aoDeletar(jogador)} 
               corDoNome={time.corDoCard} 
               corDoCard={time.corDoCard} 
           />;
})}

No trecho acima, estamos passando uma função anônima para a propriedade aoDeletar do componente Jogador. Quando o botão "deletar" é clicado, essa função será executada, chamando aoDeletar(jogador).

Depois dessa alteração, o erro que você estava enfrentando deve ser resolvido. Certifique-se também de que a função aoDeletar esteja tratando a exclusão do jogador corretamente. Se o erro persistir ou se você encontrar outros problemas, sinta-se à vontade para perguntar!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!