1
resposta

[Dúvida] Erro no onClick

Porque tive que colocar "aoDeletar()" para que meu onClick funcionase.

import './colaborador.css'

const Colaborador = ({ colaborador, corDeFundo, aoDeletar }) => {
    return (<div className="colaborador">
        <div className="deletar" onClick={aoDeletar()}>Deletar</div>
        <div className="cabecalho" style={{ backgroundColor: corDeFundo }}>
            <img src={colaborador.imagem} alt={colaborador.nome} />
        </div>
        <div className="rodape">
            <h4>{colaborador.nome}</h4>
            <h5>{colaborador.cargo}</h5>
        </div>
    </div>)
}

export default Colaborador
1 resposta

Olá, Eduardo. Tudo bem?

O problema aqui é que, no seu código, você está passando a função aoDeletar diretamente no onClick, mas sem os parênteses. Isso significa que a função só será chamada quando o evento ocorrer.

Se você tivesse escrito assim:


onClick={aoDeletar}

O React apenas referenciaria a função, sem executá-la imediatamente.

Mas, ao escrever assim:


onClick={aoDeletar()}

Você está chamando a função no momento da renderização, o que pode causar problemas.

Para corrigir isso e garantir que a função só execute quando o botão for clicado, você pode fazer assim:


onClick={() => aoDeletar()}

Ou, se a função aoDeletar precisar de um parâmetro, algo como:


onClick={() => aoDeletar(colaborador.id)}

Isso cria uma função anônima que será chamada apenas quando o clique acontecer.

Ajuste seu código assim:


import './colaborador.css'

const Colaborador = ({ colaborador, corDeFundo, aoDeletar }) => {  
  return (
    <div className="colaborador">
      <button onClick={() => aoDeletar()}>Deletar</button>
      <div className="cabecalho" style={{ backgroundColor: corDeFundo }}> 
        {colaborador.nome}
        {colaborador.cargo}
      </div>
    </div>
  );
};

export default Colaborador;

Isso garante que a função aoDeletar só seja executada quando o botão for clicado. Verifique se a função em sí, está correta.

Espero ter ajudado. Conte com o apoio do Fórum. Fico à disposição.

Bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado