1
resposta

Converter componente criado em Classes para componente Hooks do React?

Estou com esta classe feita em react puro e gostaria de converter em hooks react. Comecei a iniciar mas não saiu como esperado. Seguem os códigos:

class Parent extends React.Component {
  constructor(props) {
    super(props);

    this.state = { name: 'Frarthur' };

    this.changeName = this.changeName.bind(this);
  }

  changeName(newName) {
    this.setState({
      name: newName
    });
  }

  render() {
    return <Child name={this.state.name} onChange={this.changeName} />
  }
}
);

Agora segue o código que eu estou tentando fazer a conversão:

function Parent () {
  const [changeName] = React.useState(name);
  const handleIncrement = () => setChange(newName);

return (
  <div>
    <div>
      <div>{name}</div>
      <Parent name={this.state.name} onChange={this.changeName} />
    </div>
  </div>
);
}
1 resposta

Olá, Allan! Tudo bem?

Desculpe por demorar a te responder.

Para que sua conversão funcione, é necessário fazer algumas alterações no seu código.

  1. Utilize o hook useState para criar a variável de estado name e a função setName para atualizá-la. Inicialize name com o valor 'Frarthur', assim como no seu exemplo original.

  2. Altere o nome da função changeName para que seja o mesmo nome da função que atualiza o estado (setName). Assim, quando você chamar changeName no componente Child, a função correta será executada.

  3. Retire a parte do código que não vai mais ser necessária, como o constructor e a chamada para bind.

Essas mudanças devem te deixar no caminho correto.

Todavia, vale ressaltar que como você postou sua pergunta há algum tempo é possível que a constante evolução da tecnologia impacte na resolução da sua dúvida. Sendo assim, caso queira se aprofundar neste tema e com conteúdos atualizados, recomendo os materiais abaixo:

Espero que seja um bom ponto de partida. Abraços!

Espero ter ajudado e bons estudos!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software