<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Luísa Corrêa</title>
    <description>The latest articles on DEV Community by Luísa Corrêa (@luisafc).</description>
    <link>https://dev.to/luisafc</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F339643%2F1a0362dc-856c-45a4-b405-8431b2cfe091.png</url>
      <title>DEV Community: Luísa Corrêa</title>
      <link>https://dev.to/luisafc</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/luisafc"/>
    <language>en</language>
    <item>
      <title>Mastering React Query: A Practical Guide to Essential Hooks</title>
      <dc:creator>Luísa Corrêa</dc:creator>
      <pubDate>Fri, 14 Mar 2025 17:08:51 +0000</pubDate>
      <link>https://dev.to/luisafc/mastering-react-query-a-practical-guide-to-essential-hooks-21l6</link>
      <guid>https://dev.to/luisafc/mastering-react-query-a-practical-guide-to-essential-hooks-21l6</guid>
      <description>&lt;p&gt;🇺🇸&lt;br&gt;
Continuing my previous post about React Query, today I bring the two main hooks: useQuery and useMutation:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;useQuery:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Used for data fetching.&lt;/li&gt;
&lt;li&gt;Main configurations:

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;queryKey&lt;/code&gt;: The information key, which uniquely identifies the data you are fetching.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;queryFn&lt;/code&gt;: The asynchronous function that makes the API request, returns the data, and populates the cache.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;How it works:

&lt;ul&gt;
&lt;li&gt;When we need to return data, &lt;code&gt;useQuery&lt;/code&gt; checks for the existence of the data in the &lt;code&gt;QueryCache&lt;/code&gt; using the &lt;code&gt;queryKey&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;If the data exists: &lt;code&gt;useQuery&lt;/code&gt; returns the data directly from the cache, avoiding unnecessary API requests.&lt;/li&gt;
&lt;li&gt;If the data does not exist: The &lt;code&gt;queryFn&lt;/code&gt; is activated, making the API request, returning, and saving the data to the &lt;code&gt;QueryCache&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;useMutation:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Used for operations that modify data (POST, PUT, PATCH, DELETE).&lt;/li&gt;
&lt;li&gt;Main configurations:

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;mutationFn&lt;/code&gt;: Asynchronous function that sends the request to the API, performing the creation, update, or deletion operation on the server.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;onSuccess&lt;/code&gt;: Callback function that allows you to perform specific actions when the mutation is successful, such as updating the cache or displaying a confirmation message.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;onError&lt;/code&gt;: Callback function that allows you to handle errors in a personalized way, displaying error messages or performing other recovery actions.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;invalidateQueries&lt;/code&gt;: Function that makes the data obsolete within the cache, because we changed the data on the server.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;How it works:

&lt;ul&gt;
&lt;li&gt;The &lt;code&gt;mutationFn&lt;/code&gt; function is executed, sending the request to the API.&lt;/li&gt;
&lt;li&gt;After the request is completed, the &lt;code&gt;onSuccess&lt;/code&gt; and &lt;code&gt;onError&lt;/code&gt; callbacks are called, depending on the result of the operation.&lt;/li&gt;
&lt;li&gt;If the mutation changes data that is already in the cache, &lt;code&gt;invalidateQueries&lt;/code&gt; should be used within &lt;code&gt;onSuccess&lt;/code&gt; to make the data obsolete and ensure that the cache is updated through &lt;code&gt;useQuery&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5zp02ke77n5t3klbaqff.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5zp02ke77n5t3klbaqff.png" alt="Image description1" width="702" height="424"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz3eg292bfb9zd3xvwgrz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz3eg292bfb9zd3xvwgrz.png" alt="Image description2" width="688" height="786"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;🇧🇷&lt;/p&gt;

&lt;p&gt;Continuando meu post anterior sobre React Query, hoje trago os dois principais hooks: useQuery e useMutation:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;useQuery:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Utilizado para buscas de dados&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Configurações principais:&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;queryKey&lt;/code&gt;: A chave da informação, que identifica de forma única os dados que você está buscando.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;queryFn&lt;/code&gt;: A função assíncrona que  realiza a requisição à API e retorna os dados e alimenta o cache.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;Funcionamento:&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;Quando precisamos retornar um dado, o &lt;code&gt;useQuery&lt;/code&gt; verifica a existência do dado no &lt;code&gt;QueryCache&lt;/code&gt; por meio da &lt;code&gt;queryKey&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Caso o dado exista:

&lt;ul&gt;
&lt;li&gt;O &lt;code&gt;useQuery&lt;/code&gt; retorna os dados diretamente do cache, evitando requisições desnecessárias à API.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Caso o dado não exista:

&lt;ul&gt;
&lt;li&gt;A &lt;code&gt;queryFn&lt;/code&gt; é ativada, fazendo a requisição à API, retornando e salvando o dado no &lt;code&gt;QueryCache&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;useMutation:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Utilizado em operações que modificam os dados (POST, PUT, PATCH, DELETE).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Configurações Principais:&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;mutationFn&lt;/code&gt;: Função assíncrona que envia a requisição para a API, realizando a operação de criação, atualização ou exclusão no servidor.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;onSuccess&lt;/code&gt;: Função de callback que permite executar ações específicas quando a mutação é bem-sucedida, como atualizar o cache ou exibir uma mensagem de confirmação.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;onError&lt;/code&gt;: Função de callback que permite tratar erros de forma personalizada, exibindo mensagens de erro ou executando outras ações de recuperação.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;invalidateQueries&lt;/code&gt;: Função que torna os dados obsoletos dentro do cache, pois alteramos os dados no servidor&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;Funcionamento:&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;A função &lt;code&gt;mutationFn&lt;/code&gt; é executada, enviando a requisição para a API.&lt;/li&gt;
&lt;li&gt;Após a conclusão da requisição, os callbacks &lt;code&gt;onSuccess&lt;/code&gt;, &lt;code&gt;onError&lt;/code&gt;  são chamados, dependendo do resultado da operação.&lt;/li&gt;
&lt;li&gt;Caso a mutação altere dados que já estão no cache, o &lt;code&gt;invalidateQueries&lt;/code&gt; deve ser usado dentro do &lt;code&gt;onSuccess&lt;/code&gt; para tornar o dado obsoleto garantir que o cache seja atualizado por meio do &lt;strong&gt;useQuery&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5zp02ke77n5t3klbaqff.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5zp02ke77n5t3klbaqff.png" alt="Image description3" width="702" height="424"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz3eg292bfb9zd3xvwgrz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz3eg292bfb9zd3xvwgrz.png" alt="Image description4" width="688" height="786"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>reactquery</category>
      <category>frontend</category>
      <category>react</category>
    </item>
    <item>
      <title>Boost your application's performance with React Query!</title>
      <dc:creator>Luísa Corrêa</dc:creator>
      <pubDate>Thu, 13 Mar 2025 17:19:41 +0000</pubDate>
      <link>https://dev.to/luisafc/boost-your-applications-performance-with-react-query-10gc</link>
      <guid>https://dev.to/luisafc/boost-your-applications-performance-with-react-query-10gc</guid>
      <description>&lt;p&gt;✨ What if you could eliminate the complexity of asynchronous data management in your React and React Native application? React Query can help you by simplifying and optimizing server state ✨&lt;/p&gt;

&lt;p&gt;How the also known as TanStack Query works:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;📦&lt;strong&gt;Cache(QueryCache):&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;React Query stores data in the cache, avoiding repeated server requests.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;&lt;strong&gt;Data Status:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;👶&lt;strong&gt;Fresh&lt;/strong&gt; → Like the data's validity, after a certain time the data becomes stale.&lt;/li&gt;
&lt;li&gt;👴&lt;strong&gt;Stale&lt;/strong&gt; → Obsolete data, meaning a new server request is needed to update it.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;♻️ &lt;strong&gt;SWR (Stale-While-Revalidate):&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;SWR&lt;/strong&gt; ensures your data is always fresh.&lt;/li&gt;
&lt;li&gt;It displays cached data immediately (even if "stale" or obsolete) while fetching the latest version in the background. Thus, the user sees the content instantly, and the update is smooth.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;&lt;strong&gt;𝗦𝗶𝗺𝗽𝗹𝗶𝗳𝗶𝗲𝗱 𝗗𝗮𝘁𝗮 𝗠𝗮𝗻𝗮𝗴𝗲𝗺𝗲𝗻𝘁&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;React Query eliminates the need to write complex code to fetch, update, and manage server state. It takes care of:

&lt;ul&gt;
&lt;li&gt;⚙️**Automatic cache: **No need to implement manual logic.&lt;/li&gt;
&lt;li&gt;🔁&lt;strong&gt;Revalidation:&lt;/strong&gt; Automatic data update.&lt;/li&gt;
&lt;li&gt;⚠️&lt;strong&gt;Error handling:&lt;/strong&gt; Handles request errors.&lt;/li&gt;
&lt;li&gt;🚀&lt;strong&gt;Optimistic updates:&lt;/strong&gt; Improves perceived performance by updating the interface before server confirmation.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcmdkpnr6eumij9hpqqpy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcmdkpnr6eumij9hpqqpy.png" alt="Image description" width="800" height="214"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmdqxfsqqsawereysdkpt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmdqxfsqqsawereysdkpt.png" alt="Image description" width="800" height="315"&gt;&lt;/a&gt;    &lt;/p&gt;

&lt;p&gt;With React Query, you focus only on application logic!&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>reactquery</category>
      <category>frontend</category>
      <category>react</category>
    </item>
    <item>
      <title>Estrutura de um Projeto React</title>
      <dc:creator>Luísa Corrêa</dc:creator>
      <pubDate>Fri, 15 Oct 2021 00:01:03 +0000</pubDate>
      <link>https://dev.to/luisafc/estrutura-de-um-projeto-react-2d5k</link>
      <guid>https://dev.to/luisafc/estrutura-de-um-projeto-react-2d5k</guid>
      <description>&lt;p&gt;Quem nunca teve um pouco de dificuldade para entender cada pasta e arquivo de um projeto? Então, meu objetivo aqui é esclarecer um pouco qual a funcionalidade de alguns diretórios.&lt;/p&gt;

&lt;h2&gt;
  
  
  Package.json
&lt;/h2&gt;

&lt;p&gt;É aqui onde encontramos as principais informações do projeto, como:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Nome&lt;/li&gt;
&lt;li&gt;Versão&lt;/li&gt;
&lt;li&gt;Arquivo de inicialização&lt;/li&gt;
&lt;li&gt;Licença&lt;/li&gt;
&lt;li&gt;Dependências&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Node Modules
&lt;/h2&gt;

&lt;p&gt;Assim como o package.json, está presente em todos os projetos javascript. É nessa pasta que fica armazenado todos os códigos das dependências que instalamos em nossa aplicação.&lt;/p&gt;

&lt;p&gt;Inicialmente podemos estranhar o tamanho da pasta se comparado ao que está sendo declarado no package.json, mas isso ocorre pois as dependencias do nosso projeto também possuem dependencias e isso vai causando um efeito cascata, um depende de outro e assim por diante.&lt;/p&gt;

&lt;p&gt;O comum é deixar o node_modules dentro do .gitignore, pois as dependencias já estão declaradas dentro do package.json, logo não é necessário que a pasta seja traqueada &lt;/p&gt;

&lt;h2&gt;
  
  
  SRC
&lt;/h2&gt;

&lt;p&gt;Todo o código criado por nós deve ficar nessa pasta source&lt;br&gt;
Onde encontramos o código bruto&lt;/p&gt;

&lt;h2&gt;
  
  
  Public
&lt;/h2&gt;

&lt;p&gt;Aqui fica os aquivos públicos,arquivos que precisam ser acessados pelo meio externo, como os assets e o index.html&lt;/p&gt;

&lt;h2&gt;
  
  
  Babel
&lt;/h2&gt;

&lt;p&gt;Ferramenta que converte o código para uma maneira que todos os browsers e todo ambiente da nossa aplicação consiga entender. Isso é necessário, pois o JS é uma linguagem que se atualiza muito e o React possui muitas funcionalidades que o navegadores ainda não consegue entender, então assim o babel compila para versão compatível com todos os navegadores.&lt;/p&gt;

&lt;h2&gt;
  
  
  Webpack
&lt;/h2&gt;

&lt;p&gt;Na maioria das vezes é utilizado juntamente do babel&lt;/p&gt;

&lt;p&gt;Estipula uma series se configurações(Loaders) que ensinam a aplicação a tratar cada tipo de arquivo(.png, .sass, .jpg, js) que pode ser importado e assim os converte para arquivos entendíveis pelo browser.&lt;/p&gt;

&lt;h2&gt;
  
  
  Source Maps
&lt;/h2&gt;

&lt;p&gt;Forma de conseguir visualizar o código da aplicação mesmo quando o código está tofo bagunçando do bundle.js&lt;/p&gt;

&lt;h2&gt;
  
  
  Sass
&lt;/h2&gt;

&lt;p&gt;Pré processador de css que nos permite ter mais funcionalidades, como:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Encadeamento&lt;/li&gt;
&lt;li&gt;Clarear&lt;/li&gt;
&lt;li&gt;Escurecer&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>react</category>
      <category>javascript</category>
      <category>beginners</category>
      <category>programming</category>
    </item>
  </channel>
</rss>
