Lädt...


🔧 ⚛Os 10 React Hooks Mais Úteis: 06 - useCallback⚛


Nachrichtenbereich: 🔧 Programmierung
🔗 Quelle: dev.to

Este é o sexto artigo de uma série de 10, que explica de forma simplificada e com exemplos, os react hooks mais utilizados em programação.


O useCallback é um hook do React que retorna uma função memorizada. Isso significa que a função só é recriada quando uma de suas dependências mudar.

Caso contrário, a mesma instância de função é retornada em todas as chamadas.

O useCallback é útil quando você tem um componente que precisa passar uma função para um componente filho ou para uma função de gancho, mas quer evitar que a função seja recriada toda vez que o componente pai é renderizado. Isso pode ajudar a evitar o ciclo de atualização de componentes indesejado e aumentar a performance de sua aplicação.

Como usar o useCallback

Aqui está um exemplo da funcionalidade do useCallback:
(Acompanhe em "Show files>src>App.jsx")

O código acima é de uma função chamada App que usa o hook useState para gerenciar o estado de uma variável chamada count. Ele também cria duas funções memorizadas usando o hook useCallback: increment e reset.

A função increment é criada usando o useCallback com uma lista de dependências contendo apenas a variável count. Isso significa que a função só será recriada quando o valor de count mudar. A função increment é usada como um manipulador de cliques para um botão e, quando clicada, incrementa o valor de count em 1.

A função reset é criada de maneira semelhante, usando o useCallback com uma lista de dependências contendo apenas a variável count. Isso significa que a função só será recriada quando o valor de count mudar. A função reset é usada como um manipulador de cliques para outro botão e, quando clicada, define o valor de count como 0.

O objetivo do useCallback é garantir que as funções increment e reset sejam criadas apenas quando necessário, evitando que elas sejam recriadas toda vez que o componente é renderizado. Isso pode ajudar a evitar o ciclo de atualização de componentes indesejado e aumentar a performance de sua aplicação.

Filtro de lista com useCallback em React

Um uso comum do useCallback é no caso em que você tem uma lista e pretende realizar uma busca instantânea nos items dessa lista.

O exemplo abaixo demonstra como implementar um filtro de lista de Pokémons através desse hook:
(Acompanhe em "Show files>src>App.jsx")

1 - A primeira chamada a useState inicializa a variável de estado users com uma lista de objetos de Pokémon e retorna essa lista e a função setUsers.

2 - useState é chamado novamente para inicializar a variável de estado filter com uma string vazia e retornar essa string e a função setFilter.

3 - A função handleFilterChange é criada usando useCallback e só será recriada se o valor de filter mudar. A função handleFilterChange é chamada como um manipulador de evento onChange de entrada e atualiza o valor de filter com o valor da entrada.

4 - useCallback é chamado novamente para criar a função filteredUsers, que filtra a lista de pokémons (users) com base no valor de filter. A função filteredUsers só será recriada se o valor de users ou filter mudar.

5 - O componente App renderiza uma entrada de pesquisa, um botão de reset de filtro e o componente filho ChildComponent. O valor atual de filter é passado como o valor da entrada de pesquisa e a função handleFilterChange é passada como o manipulador de evento onChange. O componente filho é passado a função filteredUsers como uma propriedade, que é usada para renderizar uma lista de cards de Pokémon filtrados.

6 - O componente filho ChildComponent renderiza uma lista de cards de Pokémon usando a propriedade users, que é uma função de callback passada pelo componente pai. Cada card é composto por uma foto do Pokemon correspondente e seu nome. A foto é exibida através de uma tag img e a URL da imagem é obtida da propriedade image do objeto Pokémon. O nome do Pokémon é exibido através de uma tag p. Cada card é exibido em uma lista através de uma tag li. Quando o usuário digita algum valor no input de busca, a função handleFilterChange é chamada para atualizar o valor do filtro. A função filteredUsers, que é criada com o useCallback, é usada para filtrar a lista de Pokémons com base no valor atual do filtro.

7 - A lista de Pokémons filtrados é passada como propriedade para o componente filho ChildComponent e é exibida através de uma lista. Ao clicar no botão "Reset filter", o filtro é resetado para vazio, exibindo novamente todos os Pokémons.

Hook useCallback para evitar a recriação de funções em componentes React

O hook useCallback do React permite que uma função seja retornada de forma imutável, evitando sua recriação a cada renderização do componente pai. Isso pode ser útil em situações em que uma função é passada como propriedade para um componente filho e pode melhorar a performance da aplicação.

Abaixo, temos um exemplo de código que evita a recriação de funções, o qual continua no caso anterior (lista com pokémons):
(Acompanhe em "Show files>src>App.jsx")

1 - import "./App.css" importa o arquivo de estilo App.css para o componente App.

2 - import { useState, useCallback } from "react" importa os hooks useState e useCallback do pacote react.

3 - function App() define o componente App.

4 - const [selectedType, setSelectedType] = useState(null) define o estado selectedType como null e uma função setSelectedType para atualizar o estado.

5 - const [pokemons, setPokemons] = useState([{ id: 1, name: "Abra", type: "psychic" }, { id: 2, name: "Bellsprout", type: "grass" }, { id: 3, name: "Chansey", type: "normal" }]) define o estado pokemons como um array de objetos e uma função setPokemons para atualizar o estado.

6 - const handleSelectType = useCallback((type) => { setSelectedType(type) }, [selectedType]) cria uma função de callback chamada handleSelectType usando useCallback. A função atualiza o estado selectedType com o argumento type passado para ela. O segundo argumento para useCallback é um array de dependências, no caso apenas o valor de selectedType. Isso significa que, se o valor de selectedType não mudar, a mesma instância de handleSelectType será retornada e pode ser reutilizada sem que o componente seja renderizado novamente.

7 - return (...) retorna JSX que renderiza uma lista de Pokemon e um componente DetailsComponent, se selectedType tiver um valor.

8 - function DetailsComponent({ selectedType }) define o componente DetailsComponent que recebe selectedType como um prop.

9 - return <div className="type"> Pokemon do tipo: {selectedType}
retorna JSX que renderiza o texto "Pokemon do tipo: [selectedType]".

10 - export default App exporta o componente App para ser usado em outros arquivos.

Em resumo, o useCallback no código acima é usado para criar uma função de callback chamada handleSelectType que é passada como um prop para um componente filho.

Quando os argumentos passados para useCallback (no caso, apenas o valor de selectedType) não mudam, a mesma instância de handleSelectType é retornada e pode ser reutilizada pelo componente filho sem que ele seja renderizado novamente. Isso pode ser útil para evitar que um componente filho seja renderizado desnecessariamente, pois a função de callback não mudou.

Conclusão

O hook useCallback do React é uma ferramenta útil para evitar a recriação de funções a cada renderização de um componente, o que garante uma melhor performance à aplicação.

Além disso, ao retornar uma função imutável, o useCallback garante que a função passada como propriedade para um componente filho não mude a cada renderização do componente pai, o que pode ser apropriado em casos em que seja importante garantir a consistência do comportamento da função.

Em suma, o hook useCallback é uma ferramenta valiosa para garantir a eficiência e otimização de aplicações React.

...

🔧 ⚛Os 10 React Hooks Mais Úteis: 07 - useMemo⚛


📈 72.41 Punkte
🔧 Programmierung

🔧 Os 10 React Hooks Mais Úteis: 05 - useReducer


📈 72.41 Punkte
🔧 Programmierung

🔧 ⚛Os 10 React Hooks Mais Úteis: 03 - useContext⚛


📈 72.41 Punkte
🔧 Programmierung

🔧 ⚛Os 10 React Hooks Mais Úteis: 02 - useEffect⚛


📈 72.41 Punkte
🔧 Programmierung

🔧 React Hooks - Top7 Most Commonly Used React Hooks for Efficient Component Management


📈 42.37 Punkte
🔧 Programmierung

🔧 Regra 1: O mais simples possível, mas não mais simples do que isso


📈 41.86 Punkte
🔧 Programmierung

🔧 Mais dados é melhor que um algoritmo mais eficiente


📈 41.86 Punkte
🔧 Programmierung

🔧 Deep Dive into React 🚀🚀Hooks: useState, useEffect, and Custom Hooks 🔍


📈 35.55 Punkte
🔧 Programmierung

🔧 Deep Dive into React Hooks: useState, useEffect, and Custom Hooks


📈 35.55 Punkte
🔧 Programmierung

🔧 Learn React Hooks – Common Hooks Explained with Code Examples


📈 35.55 Punkte
🔧 Programmierung

🔧 scriptkavi/hooks: Customizable and Open Source React Hooks


📈 35.55 Punkte
🔧 Programmierung

🔧 Bloodline of Hooks: Custom Hooks in React for Advanced Devs


📈 35.55 Punkte
🔧 Programmierung

🔧 React Hooks – How to Use the useState & useEffect Hooks in Your Project


📈 35.55 Punkte
🔧 Programmierung

🔧 React Hooks – How to Use the useState & useEffect Hooks in Your Project


📈 35.55 Punkte
🔧 Programmierung

🔧 10 Extensões úteis para o seu VSCode


📈 30.3 Punkte
🔧 Programmierung

🔧 Flutter Hooks Tutorial: Flutter Animation Using Hooks (useEffect and useAnimationController)


📈 28.73 Punkte
🔧 Programmierung

🔧 Mastering React: A Guide to the Most Important React Hooks


📈 28 Punkte
🔧 Programmierung

🔧 Unlocking React's Power: Understanding React's Core Hooks


📈 28 Punkte
🔧 Programmierung

🔧 Form Validation in React: An In-Depth Tutorial with Hooks and React Hook Form


📈 28 Punkte
🔧 Programmierung

🔧 Optimizing React Performance with Redux and React Hooks


📈 28 Punkte
🔧 Programmierung

🔧 Optimizing React Performance with Redux and React Hooks


📈 28 Punkte
🔧 Programmierung

🔧 Optimizing React Performance with Redux and React Hooks


📈 28 Punkte
🔧 Programmierung

🔧 Revolutionizing React: Unveiling the New Hooks in React 19🚀


📈 28 Punkte
🔧 Programmierung

🔧 Como deixar componentes React mais organizados mesmo com Tailwind CSS?!


📈 27.75 Punkte
🔧 Programmierung

🔧 This Week In React #185: React Conf, React Query, refs, Next.js after, mini-react...


📈 27.28 Punkte
🔧 Programmierung

🔧 This Week In React #185: React Conf, React Query, refs, Next.js after, mini-react...


📈 27.28 Punkte
🔧 Programmierung

🔧 Data Pagination in React (Nextjs) with Custom Hooks


📈 21.18 Punkte
🔧 Programmierung

🔧 Fun with React and Git Hooks


📈 21.18 Punkte
🔧 Programmierung

🔧 React Hooks: A Detailed Explanation


📈 21.18 Punkte
🔧 Programmierung

🔧 React Hooks and Cryptocurrency Dashboards


📈 21.18 Punkte
🔧 Programmierung

🔧 React Hooks 🎣


📈 21.18 Punkte
🔧 Programmierung

🔧 Créez des Composants React Puissants avec les Hooks : Un Guide Pratique 🌟


📈 21.18 Punkte
🔧 Programmierung

🔧 React Hooks


📈 21.18 Punkte
🔧 Programmierung

🔧 How to Use React Hooks – Full Tutorial for Beginners


📈 21.18 Punkte
🔧 Programmierung

🔧 Common Pitfalls When Using React Hooks


📈 21.18 Punkte
🔧 Programmierung

matomo