SlideShare uma empresa Scribd logo
1 de 24
Baixar para ler offline
Hooks no React: O novo jeito
de fazer componentes
funcionais
Alberto Berroteran Sanchez
Sobre mim
● Full Stack Developer há 12 anos
● Apaixonado por viajar
● Contribuidor software livre.
● Engenheiro Industrial pela Universidad de Carabobo
(VE)
○ Gerência
○ Investigação operacional
○ Engenharia de métodos
● CTO e pai adotivo da Vivetix.com
Conceitos Chaves
● Componente
● Estado
● Ciclo de vida (Lifecycle)
Componentes
● Dividem a UI em partes independentes
● Reutilizáveis
● Isolados.
● Funções JavaScript.
● Aceitam entradas arbitrárias (“props”)
● Retornam elementos
Componentes
function Welcome(props) {
return <h1>Hello, {props.name}</h1>;
}
class Welcome extends React.Component {
render() {
return <h1>Hello, {this.props.name}</h1>;
}
}
Componentes feito com função
Componente feito com clases
Porque usar componentes funcionais
1. É muito mais fácil de ler e testar
a. São funções simples e puras
b. Não tem estado ou de ciclo de vida
(montagem, atualização, renderização e
desmontagem)
2. Menos Código
3. Ajuda separa componentes de contêiner e de
apresentação
4. Aumento no desempenho
Props e Estados
● Props são Somente Leitura
● Componentes têm que agir como funções
puras em relação ao seus props.
● Dados internos são estados
● O estados são dados mutáveis
● Até React 16.8 não havia jeito de gerenciar
estados em componentes funcionais
Função pura e impura
function sum(a, b) {
return a + b;
}
function sum(a, b) {
a += b;
}
Ciclo de vida
Hooks
● São funções para “ligar-se” aos recursos de
estados e ciclo de vida em componentes.
● Não funcionam dentro de classes
● React fornece alguns Hooks internos como
useState
● Tu também podes criar os teus próprios
Hooks
Motivação
1. É Difícil Reutilizar Lógica com Estado entre
Componentes
a. Render Props e higher-order components
b. Wrapper hells no DevTools
2. Componentes Complexos se tornam difíceis de
Entender
a. Pegar dados em componentDidMount e
componentDidUpdate
b. Lógica espalhada
3. Classes Confundem tanto Pessoas quanto Máquinas
a. Uso de this e bind
b. Não minificam nem optimizam bem
O Grito
Render props is real
Exemplos de Usos
1. useState
2. useEffect
useState
● Hook para gerenciar alguns estados locais
● React preservar este estados entre
re-renderizações
● retorna: o valor do estado atual e uma função que
permite atualizá-lo.
● É parecido com this.setState em uma classe
● O único argumento é o estado inicial.
● O estado inicial é utilizado apenas na primeira
renderização
useEffect
● Permite fazer operações de “efeitos colaterais” (side
effects ou apenas effects) que podem afetar outros
componentes e não podem ser feitos durante a
renderização.
● Recebe como parâmetro uma função, e
opcionalmente um array
○ obtenção de dados (data fetching),
○ subscrições (subscriptions)
○ mudanças manuais no DOM.
● Segue a mesma finalidade do
componentDidMount, componentDidUpdate, e
componentWillUnmount
Outros Hooks
○ useContext
○ useReducer
○ useCallback
○ useMemo
○ useRef
○ useImperativeHandle
○ useLayoutEffect
○ useDebugValue
Regras
● Apenas chame Hooks no nível mais alto. Não
chame Hooks dentro de loops, condições ou
funções aninhadas.
● Apenas chame Hooks de componentes
funcionais.
a. Funções JavaScript comuns. Não
b. Componentes de clases. Não
c. Hooks customizados. Sim
● eslint-plugin-react-hooks
Então preciso de mudar o
meus componentes de
clases para funçoes?
Migração
● Sem breaking changes Hooks são 100%
retrocompatíveis
● Não tem planos de remover classes
● Completamente opcionais
● Disponível desde o release v16.8.0.
● Não substituem conceitos.
Obrigado
@EBethus
Referências
● https://pt-br.reactjs.org/docs/hooks-intro.html
● https://www.slideshare.net/JhonMikeSoares/react-
hooks-232246130
● http://projects.wojtekmaj.pl/react-lifecycle-method
s-diagram/
● https://dev.to/basal/react-hooks-making-it-easier-t
o-compose-reuse-and-share-react-code-5he9

Mais conteúdo relacionado

Semelhante a Hooks em React: o novo jeito de fazer componentes funcionais

Teste de Integração - Unidade III
Teste de Integração - Unidade IIITeste de Integração - Unidade III
Teste de Integração - Unidade IIIJoão Lourenço
 
Paradigma orientado a objetos - Caso de Estudo C++
Paradigma orientado a objetos - Caso de Estudo C++Paradigma orientado a objetos - Caso de Estudo C++
Paradigma orientado a objetos - Caso de Estudo C++Sérgio Souza Costa
 
Intodução ao React
Intodução ao ReactIntodução ao React
Intodução ao ReactDev PP
 
Apostilava Java EE 5 - 2007
Apostilava Java EE 5 - 2007Apostilava Java EE 5 - 2007
Apostilava Java EE 5 - 2007Rafael Benevides
 
TDC2016SP - Trilha Frameworks JavaScript
TDC2016SP - Trilha Frameworks JavaScriptTDC2016SP - Trilha Frameworks JavaScript
TDC2016SP - Trilha Frameworks JavaScripttdc-globalcode
 
lista de exercícios de estrutura de dados Básico primeira prova
lista de exercícios de estrutura de dados Básico primeira prova lista de exercícios de estrutura de dados Básico primeira prova
lista de exercícios de estrutura de dados Básico primeira prova Rogério Cardoso
 
better faster stronger dagger
better faster stronger daggerbetter faster stronger dagger
better faster stronger daggertdc-globalcode
 
Orientação a Objetos - Da Teoria a Pratica
Orientação a Objetos - Da Teoria a PraticaOrientação a Objetos - Da Teoria a Pratica
Orientação a Objetos - Da Teoria a Praticaelliando dias
 
Orientacao A Objetos Da Teoria A Pratica Em Java
Orientacao A Objetos   Da Teoria A Pratica Em JavaOrientacao A Objetos   Da Teoria A Pratica Em Java
Orientacao A Objetos Da Teoria A Pratica Em Javaelliando dias
 
qualidade de código: boas práticas, princípios e padrões
qualidade de código: boas práticas, princípios e padrõesqualidade de código: boas práticas, princípios e padrões
qualidade de código: boas práticas, princípios e padrõesedgarddavidson.com
 
Projetos reativos com Angular, RxJS e Redux (ngRx)
Projetos reativos com Angular, RxJS e Redux (ngRx)Projetos reativos com Angular, RxJS e Redux (ngRx)
Projetos reativos com Angular, RxJS e Redux (ngRx)Loiane Groner
 
Como escolher o Framework Java para web?
Como escolher o Framework Java para web?Como escolher o Framework Java para web?
Como escolher o Framework Java para web?Anderson Araújo
 
Orientação a objetos da teoria a prática em java
Orientação a objetos   da teoria a prática em java Orientação a objetos   da teoria a prática em java
Orientação a objetos da teoria a prática em java Fabiano Lima
 

Semelhante a Hooks em React: o novo jeito de fazer componentes funcionais (20)

Teste de Integração - Unidade III
Teste de Integração - Unidade IIITeste de Integração - Unidade III
Teste de Integração - Unidade III
 
React Hooks e como adotar
React Hooks e como adotarReact Hooks e como adotar
React Hooks e como adotar
 
Growing oos guided_by_tests entire
Growing oos guided_by_tests entireGrowing oos guided_by_tests entire
Growing oos guided_by_tests entire
 
Paradigma orientado a objetos - Caso de Estudo C++
Paradigma orientado a objetos - Caso de Estudo C++Paradigma orientado a objetos - Caso de Estudo C++
Paradigma orientado a objetos - Caso de Estudo C++
 
Intodução ao React
Intodução ao ReactIntodução ao React
Intodução ao React
 
Aula parte 1 de JSF 2.2
Aula parte 1 de JSF 2.2Aula parte 1 de JSF 2.2
Aula parte 1 de JSF 2.2
 
Apostilava Java EE 5 - 2007
Apostilava Java EE 5 - 2007Apostilava Java EE 5 - 2007
Apostilava Java EE 5 - 2007
 
TDC2016SP - Trilha Frameworks JavaScript
TDC2016SP - Trilha Frameworks JavaScriptTDC2016SP - Trilha Frameworks JavaScript
TDC2016SP - Trilha Frameworks JavaScript
 
Curso de ReactJS
Curso de ReactJSCurso de ReactJS
Curso de ReactJS
 
lista de exercícios de estrutura de dados Básico primeira prova
lista de exercícios de estrutura de dados Básico primeira prova lista de exercícios de estrutura de dados Básico primeira prova
lista de exercícios de estrutura de dados Básico primeira prova
 
Hello ReactJs
Hello ReactJsHello ReactJs
Hello ReactJs
 
better faster stronger dagger
better faster stronger daggerbetter faster stronger dagger
better faster stronger dagger
 
Orientação a Objetos - Da Teoria a Pratica
Orientação a Objetos - Da Teoria a PraticaOrientação a Objetos - Da Teoria a Pratica
Orientação a Objetos - Da Teoria a Pratica
 
Orientacao A Objetos Da Teoria A Pratica Em Java
Orientacao A Objetos   Da Teoria A Pratica Em JavaOrientacao A Objetos   Da Teoria A Pratica Em Java
Orientacao A Objetos Da Teoria A Pratica Em Java
 
01-Paradigmas.pdf
01-Paradigmas.pdf01-Paradigmas.pdf
01-Paradigmas.pdf
 
qualidade de código: boas práticas, princípios e padrões
qualidade de código: boas práticas, princípios e padrõesqualidade de código: boas práticas, princípios e padrões
qualidade de código: boas práticas, princípios e padrões
 
Projetos reativos com Angular, RxJS e Redux (ngRx)
Projetos reativos com Angular, RxJS e Redux (ngRx)Projetos reativos com Angular, RxJS e Redux (ngRx)
Projetos reativos com Angular, RxJS e Redux (ngRx)
 
Vraptor 3
Vraptor 3Vraptor 3
Vraptor 3
 
Como escolher o Framework Java para web?
Como escolher o Framework Java para web?Como escolher o Framework Java para web?
Como escolher o Framework Java para web?
 
Orientação a objetos da teoria a prática em java
Orientação a objetos   da teoria a prática em java Orientação a objetos   da teoria a prática em java
Orientação a objetos da teoria a prática em java
 

Mais de GDGFoz

Apresentação GDG Foz 2023
Apresentação GDG Foz  2023Apresentação GDG Foz  2023
Apresentação GDG Foz 2023GDGFoz
 
Desenvolvimento de um Comedouro para cães com Acionamento Automático e Remoto
Desenvolvimento de um Comedouro para cães com Acionamento Automático e RemotoDesenvolvimento de um Comedouro para cães com Acionamento Automático e Remoto
Desenvolvimento de um Comedouro para cães com Acionamento Automático e RemotoGDGFoz
 
Introdução do DEVSECOPS
Introdução do DEVSECOPSIntrodução do DEVSECOPS
Introdução do DEVSECOPSGDGFoz
 
Aquisição de dados IoT com Event Sourcing e Microservices
Aquisição de dados IoT com Event Sourcing e MicroservicesAquisição de dados IoT com Event Sourcing e Microservices
Aquisição de dados IoT com Event Sourcing e MicroservicesGDGFoz
 
Robótica Sucational
Robótica SucationalRobótica Sucational
Robótica SucationalGDGFoz
 
A nova era do desenvolvimento mobile
A nova era do desenvolvimento mobile A nova era do desenvolvimento mobile
A nova era do desenvolvimento mobile GDGFoz
 
Qualidade em Testes de Software
Qualidade em Testes de SoftwareQualidade em Testes de Software
Qualidade em Testes de SoftwareGDGFoz
 
WebAssembly além da Web - Casos de Uso em IoT
WebAssembly além da Web - Casos de Uso em IoTWebAssembly além da Web - Casos de Uso em IoT
WebAssembly além da Web - Casos de Uso em IoTGDGFoz
 
Dart e Flutter do Server ao Client Side
Dart e Flutter do Server ao Client SideDart e Flutter do Server ao Client Side
Dart e Flutter do Server ao Client SideGDGFoz
 
UX: O que é e como pode influenciar a vida do desenvolvedor?
UX: O que é e como pode influenciar a vida do desenvolvedor?UX: O que é e como pode influenciar a vida do desenvolvedor?
UX: O que é e como pode influenciar a vida do desenvolvedor?GDGFoz
 
Dicas de como entrar no mundo do DevSecOps
Dicas de como entrar no mundo do DevSecOpsDicas de como entrar no mundo do DevSecOps
Dicas de como entrar no mundo do DevSecOpsGDGFoz
 
Angular >= 2 - One Framework Mobile & Desktop
Angular >= 2 - One Framework Mobile & DesktopAngular >= 2 - One Framework Mobile & Desktop
Angular >= 2 - One Framework Mobile & DesktopGDGFoz
 
Automação Residencial Extrema com Opensource
Automação Residencial Extrema com OpensourceAutomação Residencial Extrema com Opensource
Automação Residencial Extrema com OpensourceGDGFoz
 
Brasil.IO COVID-19: Dados por Municípios. Quais os Desafios?
Brasil.IO COVID-19: Dados por Municípios. Quais os Desafios?Brasil.IO COVID-19: Dados por Municípios. Quais os Desafios?
Brasil.IO COVID-19: Dados por Municípios. Quais os Desafios?GDGFoz
 
Desmistificando a programação funcional
Desmistificando a programação funcionalDesmistificando a programação funcional
Desmistificando a programação funcionalGDGFoz
 
Microsserviços com Kotlin
Microsserviços com KotlinMicrosserviços com Kotlin
Microsserviços com KotlinGDGFoz
 
Autenticação de dois fatores
Autenticação de dois fatores Autenticação de dois fatores
Autenticação de dois fatores GDGFoz
 
Fique em casa seguro (ou tente)!
Fique em casa seguro (ou tente)!Fique em casa seguro (ou tente)!
Fique em casa seguro (ou tente)!GDGFoz
 
Angular, React ou Vue? Comparando os favoritos do JS reativo
Angular, React ou Vue? Comparando os favoritos do JS reativoAngular, React ou Vue? Comparando os favoritos do JS reativo
Angular, React ou Vue? Comparando os favoritos do JS reativoGDGFoz
 
Styled Components - Estilizando components sem stress - Roberto Tauille
Styled Components - Estilizando components sem stress - Roberto TauilleStyled Components - Estilizando components sem stress - Roberto Tauille
Styled Components - Estilizando components sem stress - Roberto TauilleGDGFoz
 

Mais de GDGFoz (20)

Apresentação GDG Foz 2023
Apresentação GDG Foz  2023Apresentação GDG Foz  2023
Apresentação GDG Foz 2023
 
Desenvolvimento de um Comedouro para cães com Acionamento Automático e Remoto
Desenvolvimento de um Comedouro para cães com Acionamento Automático e RemotoDesenvolvimento de um Comedouro para cães com Acionamento Automático e Remoto
Desenvolvimento de um Comedouro para cães com Acionamento Automático e Remoto
 
Introdução do DEVSECOPS
Introdução do DEVSECOPSIntrodução do DEVSECOPS
Introdução do DEVSECOPS
 
Aquisição de dados IoT com Event Sourcing e Microservices
Aquisição de dados IoT com Event Sourcing e MicroservicesAquisição de dados IoT com Event Sourcing e Microservices
Aquisição de dados IoT com Event Sourcing e Microservices
 
Robótica Sucational
Robótica SucationalRobótica Sucational
Robótica Sucational
 
A nova era do desenvolvimento mobile
A nova era do desenvolvimento mobile A nova era do desenvolvimento mobile
A nova era do desenvolvimento mobile
 
Qualidade em Testes de Software
Qualidade em Testes de SoftwareQualidade em Testes de Software
Qualidade em Testes de Software
 
WebAssembly além da Web - Casos de Uso em IoT
WebAssembly além da Web - Casos de Uso em IoTWebAssembly além da Web - Casos de Uso em IoT
WebAssembly além da Web - Casos de Uso em IoT
 
Dart e Flutter do Server ao Client Side
Dart e Flutter do Server ao Client SideDart e Flutter do Server ao Client Side
Dart e Flutter do Server ao Client Side
 
UX: O que é e como pode influenciar a vida do desenvolvedor?
UX: O que é e como pode influenciar a vida do desenvolvedor?UX: O que é e como pode influenciar a vida do desenvolvedor?
UX: O que é e como pode influenciar a vida do desenvolvedor?
 
Dicas de como entrar no mundo do DevSecOps
Dicas de como entrar no mundo do DevSecOpsDicas de como entrar no mundo do DevSecOps
Dicas de como entrar no mundo do DevSecOps
 
Angular >= 2 - One Framework Mobile & Desktop
Angular >= 2 - One Framework Mobile & DesktopAngular >= 2 - One Framework Mobile & Desktop
Angular >= 2 - One Framework Mobile & Desktop
 
Automação Residencial Extrema com Opensource
Automação Residencial Extrema com OpensourceAutomação Residencial Extrema com Opensource
Automação Residencial Extrema com Opensource
 
Brasil.IO COVID-19: Dados por Municípios. Quais os Desafios?
Brasil.IO COVID-19: Dados por Municípios. Quais os Desafios?Brasil.IO COVID-19: Dados por Municípios. Quais os Desafios?
Brasil.IO COVID-19: Dados por Municípios. Quais os Desafios?
 
Desmistificando a programação funcional
Desmistificando a programação funcionalDesmistificando a programação funcional
Desmistificando a programação funcional
 
Microsserviços com Kotlin
Microsserviços com KotlinMicrosserviços com Kotlin
Microsserviços com Kotlin
 
Autenticação de dois fatores
Autenticação de dois fatores Autenticação de dois fatores
Autenticação de dois fatores
 
Fique em casa seguro (ou tente)!
Fique em casa seguro (ou tente)!Fique em casa seguro (ou tente)!
Fique em casa seguro (ou tente)!
 
Angular, React ou Vue? Comparando os favoritos do JS reativo
Angular, React ou Vue? Comparando os favoritos do JS reativoAngular, React ou Vue? Comparando os favoritos do JS reativo
Angular, React ou Vue? Comparando os favoritos do JS reativo
 
Styled Components - Estilizando components sem stress - Roberto Tauille
Styled Components - Estilizando components sem stress - Roberto TauilleStyled Components - Estilizando components sem stress - Roberto Tauille
Styled Components - Estilizando components sem stress - Roberto Tauille
 

Hooks em React: o novo jeito de fazer componentes funcionais

  • 1. Hooks no React: O novo jeito de fazer componentes funcionais Alberto Berroteran Sanchez
  • 2. Sobre mim ● Full Stack Developer há 12 anos ● Apaixonado por viajar ● Contribuidor software livre. ● Engenheiro Industrial pela Universidad de Carabobo (VE) ○ Gerência ○ Investigação operacional ○ Engenharia de métodos ● CTO e pai adotivo da Vivetix.com
  • 3. Conceitos Chaves ● Componente ● Estado ● Ciclo de vida (Lifecycle)
  • 4. Componentes ● Dividem a UI em partes independentes ● Reutilizáveis ● Isolados. ● Funções JavaScript. ● Aceitam entradas arbitrárias (“props”) ● Retornam elementos
  • 5. Componentes function Welcome(props) { return <h1>Hello, {props.name}</h1>; } class Welcome extends React.Component { render() { return <h1>Hello, {this.props.name}</h1>; } }
  • 8. Porque usar componentes funcionais 1. É muito mais fácil de ler e testar a. São funções simples e puras b. Não tem estado ou de ciclo de vida (montagem, atualização, renderização e desmontagem) 2. Menos Código 3. Ajuda separa componentes de contêiner e de apresentação 4. Aumento no desempenho
  • 9. Props e Estados ● Props são Somente Leitura ● Componentes têm que agir como funções puras em relação ao seus props. ● Dados internos são estados ● O estados são dados mutáveis ● Até React 16.8 não havia jeito de gerenciar estados em componentes funcionais
  • 10. Função pura e impura function sum(a, b) { return a + b; } function sum(a, b) { a += b; }
  • 12. Hooks ● São funções para “ligar-se” aos recursos de estados e ciclo de vida em componentes. ● Não funcionam dentro de classes ● React fornece alguns Hooks internos como useState ● Tu também podes criar os teus próprios Hooks
  • 13. Motivação 1. É Difícil Reutilizar Lógica com Estado entre Componentes a. Render Props e higher-order components b. Wrapper hells no DevTools 2. Componentes Complexos se tornam difíceis de Entender a. Pegar dados em componentDidMount e componentDidUpdate b. Lógica espalhada 3. Classes Confundem tanto Pessoas quanto Máquinas a. Uso de this e bind b. Não minificam nem optimizam bem
  • 15. Exemplos de Usos 1. useState 2. useEffect
  • 16. useState ● Hook para gerenciar alguns estados locais ● React preservar este estados entre re-renderizações ● retorna: o valor do estado atual e uma função que permite atualizá-lo. ● É parecido com this.setState em uma classe ● O único argumento é o estado inicial. ● O estado inicial é utilizado apenas na primeira renderização
  • 17. useEffect ● Permite fazer operações de “efeitos colaterais” (side effects ou apenas effects) que podem afetar outros componentes e não podem ser feitos durante a renderização. ● Recebe como parâmetro uma função, e opcionalmente um array ○ obtenção de dados (data fetching), ○ subscrições (subscriptions) ○ mudanças manuais no DOM. ● Segue a mesma finalidade do componentDidMount, componentDidUpdate, e componentWillUnmount
  • 18. Outros Hooks ○ useContext ○ useReducer ○ useCallback ○ useMemo ○ useRef ○ useImperativeHandle ○ useLayoutEffect ○ useDebugValue
  • 19. Regras ● Apenas chame Hooks no nível mais alto. Não chame Hooks dentro de loops, condições ou funções aninhadas. ● Apenas chame Hooks de componentes funcionais. a. Funções JavaScript comuns. Não b. Componentes de clases. Não c. Hooks customizados. Sim ● eslint-plugin-react-hooks
  • 20. Então preciso de mudar o meus componentes de clases para funçoes?
  • 21.
  • 22. Migração ● Sem breaking changes Hooks são 100% retrocompatíveis ● Não tem planos de remover classes ● Completamente opcionais ● Disponível desde o release v16.8.0. ● Não substituem conceitos.
  • 24. Referências ● https://pt-br.reactjs.org/docs/hooks-intro.html ● https://www.slideshare.net/JhonMikeSoares/react- hooks-232246130 ● http://projects.wojtekmaj.pl/react-lifecycle-method s-diagram/ ● https://dev.to/basal/react-hooks-making-it-easier-t o-compose-reuse-and-share-react-code-5he9