<?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: Frank Betancur</title>
    <description>The latest articles on DEV Community by Frank Betancur (@unpandadev).</description>
    <link>https://dev.to/unpandadev</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%2F330759%2F36fcf68f-8554-4bfe-a5a9-da5b0095f2e4.jpeg</url>
      <title>DEV Community: Frank Betancur</title>
      <link>https://dev.to/unpandadev</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/unpandadev"/>
    <language>en</language>
    <item>
      <title>Instalación y uso de TanStack Query (antes React Query)</title>
      <dc:creator>Frank Betancur</dc:creator>
      <pubDate>Sat, 25 Jan 2025 16:34:47 +0000</pubDate>
      <link>https://dev.to/unpandadev/instalacion-y-uso-de-tanstack-query-antes-react-query-1g0i</link>
      <guid>https://dev.to/unpandadev/instalacion-y-uso-de-tanstack-query-antes-react-query-1g0i</guid>
      <description>&lt;p&gt;&lt;strong&gt;Introducción&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;TanStack Query (anteriormente conocido como React Query) es una biblioteca para gestionar el estado de las solicitudes de datos en aplicaciones de React. Permite realizar fetching, caching, sincronización y actualización de datos de manera eficiente.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Instalación&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Para comenzar a usar TanStack Query en un proyecto de React, primero debes instalar la biblioteca:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm install @tanstack/react-query
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;O si usas Yarn:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;yarn add @tanstack/react-query
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Adicionalmente, si deseas utilizar DevTools para depurar, instala:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm install @tanstack/react-query-devtools
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Configuración&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Una vez instalada la biblioteca, debes envolver tu aplicación con QueryClientProvider, que proporciona un contexto para manejar las solicitudes de datos.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;QueryClient&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;QueryClientProvider&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@tanstack/react-query&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;queryClient&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;QueryClient&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;App&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;QueryClientProvider&lt;/span&gt; &lt;span class="nx"&gt;client&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;queryClient&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;MyComponent&lt;/span&gt; &lt;span class="o"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/QueryClientProvider&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Si instalaste DevTools, agrégalas dentro de &lt;code&gt;QueryClientProvider&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;ReactQueryDevtools&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@tanstack/react-query-devtools&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;QueryClientProvider&lt;/span&gt; &lt;span class="nx"&gt;client&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;queryClient&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;MyComponent&lt;/span&gt; &lt;span class="o"&gt;/&amp;gt;&lt;/span&gt;
  &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;ReactQueryDevtools&lt;/span&gt; &lt;span class="nx"&gt;initialIsOpen&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="sr"&gt;/&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/QueryClientProvider&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Uso básico&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;El hook &lt;code&gt;useQuery&lt;/code&gt;se usa para obtener datos de una API de forma eficiente.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;useQuery&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@tanstack/react-query&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;fetchData&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://jsonplaceholder.typicode.com/posts/1&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;then&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;MyComponent&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;isLoading&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;error&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useQuery&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;queryKey&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;post&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="na"&gt;queryFn&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;fetchData&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;

  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;isLoading&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;p&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;Cargando&lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/p&amp;gt;&lt;/span&gt;&lt;span class="err"&gt;;
&lt;/span&gt;  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;p&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nb"&gt;Error&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/p&amp;gt;&lt;/span&gt;&lt;span class="err"&gt;;
&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;div&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;h1&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;title&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/h1&amp;gt;&amp;lt;p&amp;gt;{data.body}&amp;lt;/&lt;/span&gt;&lt;span class="nx"&gt;p&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/div&amp;gt;&lt;/span&gt;&lt;span class="err"&gt;;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Mutaciones&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Para realizar mutaciones (POST, PUT, DELETE), usa &lt;code&gt;useMutation&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;useMutation&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@tanstack/react-query&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;createPost&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;newPost&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://jsonplaceholder.typicode.com/posts&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;method&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;POST&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Content-Type&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;application/json&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="na"&gt;body&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stringify&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;newPost&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
  &lt;span class="p"&gt;}).&lt;/span&gt;&lt;span class="nf"&gt;then&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;CreatePost&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;mutation&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useMutation&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;createPost&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;button&lt;/span&gt;
      &lt;span class="nx"&gt;onClick&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;mutation&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;mutate&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;title&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Nuevo Post&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;body&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Contenido del post&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;})}&lt;/span&gt;
    &lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="nx"&gt;Crear&lt;/span&gt; &lt;span class="nx"&gt;Post&lt;/span&gt;
    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/button&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Por qué TanStack Query necesita un fetcher?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;TanStack Query es una librería de JavaScript altamente popular que simplifica la gestión de datos en aplicaciones front-end. Para poder obtener datos de una API o cualquier otra fuente externa, necesita una forma de "traer" esos datos. Ahí es donde entra el fetcher.&lt;/p&gt;

&lt;p&gt;Fetcher como puente: El fetcher actúa como un puente entre tu aplicación y la fuente de datos. Es la función que se encarga de realizar la petición HTTP (o cualquier otro tipo de petición necesaria) y de obtener la respuesta.&lt;br&gt;
Flexibilidad: TanStack Query te permite definir fetchers personalizados para adaptarlos a las necesidades específicas de tu aplicación y a las características de tu API. Esto te da un gran control sobre cómo se obtienen los datos.&lt;br&gt;
Abstracción: Al separar la lógica de obtención de datos en un fetcher, mantienes tu componente limpio y enfocado en la presentación de los datos.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;¿Qué es un fetcher?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;En términos simples, un fetcher es una función que:&lt;/p&gt;

&lt;p&gt;Recibe parámetros: Estos parámetros pueden incluir variables, opciones de la petición, etc.&lt;/p&gt;

&lt;p&gt;Realiza una petición: Utiliza una librería como fetch, axios o cualquier otra para hacer la solicitud a la API.&lt;/p&gt;

&lt;p&gt;Retorna un valor: Este valor suele ser una promesa que se resuelve con los datos obtenidos de la API, o se rechaza si ocurre algún error.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;fetchPosts&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/api/posts&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;json&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;json&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;json&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; 
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Conclusión&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;TanStack Query facilita la gestión de datos en aplicaciones React, mejorando la eficiencia en la obtención y actualización de información desde APIs. Su sistema de caching y revalidación automática optimiza el rendimiento, reduciendo peticiones innecesarias.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Nos leemos pronto!!!&lt;/strong&gt; 🚀&lt;/p&gt;

</description>
      <category>react</category>
      <category>tanstack</category>
      <category>reactquery</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Backend Developer roadmap</title>
      <dc:creator>Frank Betancur</dc:creator>
      <pubDate>Sat, 29 Apr 2023 20:47:07 +0000</pubDate>
      <link>https://dev.to/unpandadev/backend-developer-roadmap-480</link>
      <guid>https://dev.to/unpandadev/backend-developer-roadmap-480</guid>
      <description>&lt;p&gt;Continuamos con los roadmaps en mundo del desarrollo del software, esta vez con el de backend, o la parte del desarrollo de software encargada del procesamiento de datos y la lógica detrás de una aplicación, es un componente crítico en el desarrollo de aplicaciones web y móviles. Un roadmap de backend bien estructurado puede ayudar a los equipos de desarrollo a planificar y ejecutar proyectos de manera eficiente, asegurando la entrega exitosa de productos de alta calidad. En este artículo, exploraremos los elementos clave que componen un roadmap de backend y cómo puede beneficiar a los equipos de desarrollo.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Definir los objetivos y requisitos del proyecto&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;El primer paso en la planificación de un roadmap de backend es establecer los objetivos claros del proyecto y los requisitos específicos que deben cumplirse. Esto implica comprender la naturaleza de la aplicación, las funcionalidades requeridas, las restricciones de rendimiento, la seguridad y cualquier integración con sistemas externos.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Diseñar la arquitectura del backend&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Una vez que se comprenden los requisitos del proyecto, es importante diseñar una arquitectura de backend sólida que cumpla con esos requisitos. Esto puede implicar la selección de tecnologías adecuadas, como el lenguaje de programación, el marco de desarrollo, la base de datos y otras herramientas relevantes. La arquitectura debe ser escalable, segura y capaz de manejar eficientemente las operaciones necesarias para la aplicación.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Crear una API RESTful&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Las API (Interfaces de Programación de Aplicaciones) son fundamentales para permitir la comunicación entre el frontend y el backend de una aplicación. Es importante diseñar y desarrollar una API RESTful bien estructurada que sea fácil de usar, tenga una documentación clara y permita a los desarrolladores del frontend acceder a los datos y funcionalidades del backend de manera eficiente.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Implementar la lógica de negocio&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;La lógica de negocio es el corazón de una aplicación, y en el backend es donde se implementa. Esto incluye el procesamiento de datos, la aplicación de reglas de negocio, la gestión de usuarios, la autenticación y la autorización, entre otros aspectos. Es importante implementar la lógica de negocio de manera modular y escalable, de modo que sea fácil de mantener y extender en el futuro.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Establecer pruebas y asegurar la calidad&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Para garantizar la calidad del backend, se deben establecer pruebas exhaustivas que abarquen diferentes escenarios y casos de uso. Esto puede incluir pruebas unitarias, pruebas de integración, pruebas de rendimiento y pruebas de seguridad. La automatización de pruebas también es recomendable para agilizar el proceso y detectar posibles problemas de manera temprana.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Monitoreo y escalabilidad&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Una vez que el backend está en funcionamiento, es importante implementar mecanismos de monitoreo para recopilar métricas y detectar posibles problemas o cuellos de botella. Además, se debe considerar la escalabilidad del backend, especialmente si se espera un crecimiento en la cantidad de usuarios o la carga de trabajo. Esto puede implicar el uso de servicios en la nube, la configuración de balanceadores de carga y la optimización de la infraestructura.&lt;/p&gt;

&lt;p&gt;A continuación les comparto un link donde pueden encontrar el roadmap para Backend Developer en una manera mas detalla &lt;/p&gt;

&lt;p&gt;&lt;a href="https://roadmap.sh/backend"&gt;Backend Developer Roadmap&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Nos leemos pronto!!! 🚀
&lt;/h2&gt;

</description>
      <category>beginners</category>
      <category>javascript</category>
      <category>backend</category>
    </item>
    <item>
      <title>Frontend Developer roadmap</title>
      <dc:creator>Frank Betancur</dc:creator>
      <pubDate>Tue, 28 Feb 2023 15:33:00 +0000</pubDate>
      <link>https://dev.to/unpandadev/frontend-developer-roadmap-52bp</link>
      <guid>https://dev.to/unpandadev/frontend-developer-roadmap-52bp</guid>
      <description>&lt;p&gt;Continuamos con esta serie de post que nos ayudan a como comenzar en el mundo del desarrollo del software. En esta entrega veremos el roadmap para la carrera de Frontend, que necesitamos y donde comenzar. &lt;/p&gt;

&lt;p&gt;Para ser Frontend Developer necesitamos aprender de las bases, las cuales son:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;HTML&lt;/strong&gt;&lt;br&gt;
Es una herramienta que nos ayuda a construir las páginas webs, de como se van a ver, en qué posición estarán las elementos de ella, etc. Debemos tener en cuenta también tener buenas prácticas que nos ayudarán mas adelante en otros temas como SEO, responsive, etc, son temas que veremos a mas detalle en su momento.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CSS&lt;/strong&gt;&lt;br&gt;
Esta herramienta va muy de la mano con HTML, ya que es la que crea la belleza de la página web como tal. Este también es un mundo importante e interesante ya que desde el CSS podemos construir aplicaciones responsive, animaciones, etc. También debemos tener muy buenas prácticas usando herramientas como Sass que nos ayudan a tener un mejor código CSS y poderlo reutilizar en otros archivos, tambíen dentro de CSS hay frameworks y librerías que nos ayudan agilizar la construcción del CSS en una página web como por ejemplo: Boostrap, Tailwind, MaterialUI, etc.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;JavaScript&lt;/strong&gt;&lt;br&gt;
Es un legunaje de programación interpretado, que ayuda en las aplicaciónes web a ejecutar acciones dentro de esta, como por ejemplo: guardar la información de un formulario haciendo click en un botón, la acción de ese click lo hacemos en JavaScript. También dentro de JavaScript existen librerías y frameworks que nos ayudan a crear sitios y aplicaciones web mucho mas cómodos y con buenas practicas, como por ejemplo: React, Angular, Vue.&lt;/p&gt;

&lt;p&gt;Acá tenemos algunos recursos que pueden ayudar en este roadmap:&lt;br&gt;
&lt;a href="https://www.youtube.com/watch?v=XqFR2lqBYPs"&gt;Curso de HTML y CSS&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.youtube.com/watch?v=ivdTnPl1ND0&amp;amp;t=10s"&gt;Curso de JavaScript&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.youtube.com/watch?v=6Jfk8ic3KVk&amp;amp;t=27s"&gt;Curso de React&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.youtube.com/watch?v=i-oYrcNtc2s&amp;amp;t=4425s"&gt;Curso de Angular&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Documentación:&lt;br&gt;
&lt;a href="https://www.w3schools.com/html/default.asp"&gt;HTML&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.w3schools.com/css/default.asp"&gt;CSS&lt;/a&gt;&lt;br&gt;
&lt;a href="https://developer.mozilla.org/es/docs/Web/JavaScript"&gt;JavaScript&lt;/a&gt;&lt;br&gt;
&lt;a href="https://reactjs.org/docs/getting-started.html"&gt;React&lt;/a&gt;&lt;br&gt;
&lt;a href="https://angular.io/docs"&gt;Angular&lt;/a&gt;&lt;br&gt;
&lt;a href="https://vuejs.org/guide/introduction.html"&gt;Vue&lt;/a&gt;&lt;br&gt;
&lt;a href="https://sass-lang.com/documentation/"&gt;Sass&lt;/a&gt;&lt;br&gt;
&lt;a href="https://mui.com/material-ui/getting-started/overview/"&gt;MaterialUI&lt;/a&gt;&lt;br&gt;
&lt;a href="https://material.angular.io/components/categories"&gt;Angular Material&lt;/a&gt;&lt;br&gt;
&lt;a href="https://getbootstrap.com/docs/5.3/getting-started/introduction/"&gt;Bootstrap&lt;/a&gt;&lt;br&gt;
&lt;a href="https://tailwindcss.com/docs/installation"&gt;Tailwind&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;En el siguiente enlace podemos encontrar un roadmap mas completo, el cual recomiendo que miren para profundizar mas en el tema.&lt;br&gt;
&lt;a href="https://roadmap.sh/frontend"&gt;Frontend Developer RoadMap&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Nos leemos pronto!!! 🚀
&lt;/h2&gt;

</description>
      <category>webdev</category>
      <category>beginners</category>
      <category>programming</category>
      <category>career</category>
    </item>
    <item>
      <title>Recursos para iniciar como developer</title>
      <dc:creator>Frank Betancur</dc:creator>
      <pubDate>Mon, 20 Feb 2023 22:27:59 +0000</pubDate>
      <link>https://dev.to/unpandadev/recursos-para-iniciar-como-developer-10a3</link>
      <guid>https://dev.to/unpandadev/recursos-para-iniciar-como-developer-10a3</guid>
      <description>&lt;p&gt;Siempre que alguien quiere comenzar en el mundo del desarrollo de software las preguntas que surgen por lo general son: cómo puedo comenzar? a quién le puedo preguntar? quién puede ser mi mentor?, etc.&lt;/p&gt;

&lt;p&gt;Hoy intentaré solucionar esas preguntas y ayudar un poco con algunos recursos en internet que nos pueden ayudar a mejorar, aprender y retar nuestros skills.&lt;/p&gt;

&lt;h2&gt;
  
  
  Documentación 📚
&lt;/h2&gt;

&lt;p&gt;Siempre debemos apoyarnos mucho en las documentación de las herramientas que utilicemos, acá les dejo algunas:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript"&gt;JavaScript&lt;/a&gt;&lt;br&gt;
&lt;a href="https://reactjs.org/docs/getting-started.html"&gt;React&lt;/a&gt;&lt;br&gt;
&lt;a href="https://angular.io/"&gt;Angular&lt;/a&gt;&lt;br&gt;
&lt;a href="https://vuejs.org/guide/introduction.html"&gt;Vue&lt;/a&gt;&lt;br&gt;
&lt;a href="https://nodejs.org/api/"&gt;NodeJS&lt;/a&gt;&lt;br&gt;
&lt;a href="https://docs.python.org/3/"&gt;Python&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Canales en youtube 📺
&lt;/h2&gt;

&lt;p&gt;Al día de hoy, hay muchas personas que les gusta compartir conocimiento por medio de youtube, donde explican un tema en particular, el manejo de un frameworks y/o librería, y hasta hacen bootcamps completos, algunos de ellos son:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/@FaztCode"&gt;Fazt&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.youtube.com/@CarlosAzaustre"&gt;Carlos Azaustre&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.youtube.com/@midudev"&gt;MiduDev&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.youtube.com/@LeiferMendez"&gt;Leifer Mendez&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.youtube.com/@DominiCode"&gt;Dominicode&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.youtube.com/@khriztianmoreno"&gt;Khristian Moreno&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.youtube.com/@julianduque"&gt;Julian Duque&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.youtube.com/@gndx"&gt;Oscar Barajas&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.youtube.com/@mouredev"&gt;Mouredev&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.youtube.com/@HolaMundoDev"&gt;Hola Mundo&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Platafromas de pago 💵
&lt;/h2&gt;

&lt;p&gt;En lo personal uso mucho Udemy y Plazi, y la vdd me han ayudado mucho a mejorar mis skills:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://platzi.com/home"&gt;Platzi&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.udemy.com/"&gt;Udemy&lt;/a&gt;&lt;br&gt;
En Udemy siempre recomiendo mucho a Fernando Herrera, explica muy bien los temas, acá les dejo su sitio web, frecuentemente regala bonos de sus cursos:&lt;br&gt;
&lt;a href="https://fernando-herrera.com/#/"&gt;Fernando Herrera&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Estos son algunos recursos que nos pueden ayudar, existen muchos mas que por el momento se me pueden estar pasando, pero a medida que encuentre iré actualizando este post, así que don't worries 😉 &lt;/p&gt;

&lt;h2&gt;
  
  
  Nos leemos pronto!!! 🚀
&lt;/h2&gt;

</description>
      <category>beginners</category>
      <category>programming</category>
      <category>tutorial</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Comezando en el desarrollo de software y mantenerse motivado</title>
      <dc:creator>Frank Betancur</dc:creator>
      <pubDate>Sat, 11 Feb 2023 23:54:33 +0000</pubDate>
      <link>https://dev.to/unpandadev/comezando-en-el-desarrollo-de-software-y-mantenerse-motivado-2g8h</link>
      <guid>https://dev.to/unpandadev/comezando-en-el-desarrollo-de-software-y-mantenerse-motivado-2g8h</guid>
      <description>&lt;p&gt;Muchas veces cuando alguien comienza a aprender de programación por cuanta propia o los que ya tienen experiencia quieren aprender algo nuevo, siempre se empieza con alguna motivación que lamentablemente con el paso del tiempo la vamos perdiendo, y esto es normal, lo que si no puede ser normal es dejar que esa desmotivación se vuelva una constante, o aún peor, algo definitivo en nuestro ciclo de aprendizaje. Por esto quiero recomendar algunos tips que pueden ayudarnos a mantenernos motivados.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tener claro qué es lo queremos
&lt;/h2&gt;

&lt;p&gt;Puede ser muy común cuando comenzamos a estudiar algo que no tenemos un norte definido, que solo lo estudiamos por que está siendo hype o trading ese tema, herramienta, librería, framework, etc, para este caso es importante saber que valor agregado nos brinda aprender ese tema, si nos puede ayudar a mejorar nuestro stack profesional, si lo podemos aplicar en corto o mediano plazo, o simplemente lo vamos a estudiar por gusto propio.&lt;/p&gt;

&lt;h2&gt;
  
  
  Definir un alcance
&lt;/h2&gt;

&lt;p&gt;Una vez que tengamos definido qué es lo que queremos, debemos revisar el alcance, es decir, comenzar poco a poco, desde lo mas básico e ir incrementando la complejidad. No es recomendable comenzar a estudiar algo que no tienes la mínima idea de que se trata y sin saber como podes abordarlo, esto puedo llevarnos muy rápido a la frustración y muy seguramente a renunciar al estudio del tema.&lt;/p&gt;

&lt;h2&gt;
  
  
  Constancia y disciplina
&lt;/h2&gt;

&lt;p&gt;Debemos tomar una rutina, que tengas definido los tiempos y espacios de dedicación a estudiar, esto nos ayudará muy seguramente a llegar a la meta del aprendizaje. Ir creando este hábito es muy esencial e importante en el desarrollo de software, porque en esta área se debe estar en constante actualización por las seguidas actualizaciones de las herramientas que útilizamos y por las nuevas que surgen, esto nos ayudará a estar vigentes en el mercado.&lt;/p&gt;

&lt;h2&gt;
  
  
  Crear un grupo de estudio
&lt;/h2&gt;

&lt;p&gt;Muy importante tener un grupo de amigos con los cuales puedas hablar, debatir y darse feedback, esto ayuda mucho al crecimiento y entre todos pueden brindarse apoyo y motivación.&lt;/p&gt;

&lt;h2&gt;
  
  
  Unirse a las comunidades de software
&lt;/h2&gt;

&lt;p&gt;En casi todas las ciudades existen comunidades de software las cuales son grupos de muchas personas que les gusta compartir conocimiento con altruismo, muchas de ellas son patrocinadas por grandes empresas, te invito a que investigues cuáles existen en tu ciudad.&lt;/p&gt;

&lt;h2&gt;
  
  
  Subscribirse a canales en youtube
&lt;/h2&gt;

&lt;p&gt;Hoy en día existen muchos canales en youtube en las cuales hay personas que explican y comparten conocimiento por medio de cursos gratuitos, clips, live coding, y ejemplos de proyectos que pueden servir para que comiences aprender y posteriormente crear tu portafolio.     &lt;/p&gt;

&lt;p&gt;En próximos posts te recomendaré algunos recursos en los cuales aprenderás mucho y que te mantendrán motivado a seguir aprendiendo de este universo del desarrollo de software.&lt;/p&gt;

&lt;h2&gt;
  
  
  Nos leemos pronto!!!
&lt;/h2&gt;

</description>
      <category>gratitude</category>
      <category>career</category>
      <category>productivity</category>
    </item>
  </channel>
</rss>
