<?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>Forem: adams.nxt</title>
    <description>The latest articles on Forem by adams.nxt (@adamsnxt).</description>
    <link>https://forem.com/adamsnxt</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%2F3858492%2F5b0a0855-8056-4729-83f9-0daf6b98c551.jpg</url>
      <title>Forem: adams.nxt</title>
      <link>https://forem.com/adamsnxt</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/adamsnxt"/>
    <language>en</language>
    <item>
      <title>Por qué deberías dominar Fetch nativo (especialmente ahora)</title>
      <dc:creator>adams.nxt</dc:creator>
      <pubDate>Sat, 04 Apr 2026 13:16:58 +0000</pubDate>
      <link>https://forem.com/adamsnxt/por-que-deberias-dominar-fetch-nativo-especialmente-ahora-epc</link>
      <guid>https://forem.com/adamsnxt/por-que-deberias-dominar-fetch-nativo-especialmente-ahora-epc</guid>
      <description>&lt;p&gt;Hace unos años, usar librerías como Axios parecía la opción obvia.&lt;br&gt;
Sintaxis más limpia, parseo automático de JSON, interceptores… simplemente hacía todo más fácil.&lt;/p&gt;

&lt;p&gt;Pero recientemente, con problemas de seguridad y riesgos en el ecosistema (incluyendo casos donde paquetes populares fueron comprometidos), algo quedó muy claro:&lt;/p&gt;

&lt;p&gt;👉 Cuanto más dependes de abstracciones, más frágil se vuelve tu stack.&lt;/p&gt;

&lt;p&gt;Esto no se trata de dejar de usar herramientas.&lt;br&gt;
Se trata de entender la base.&lt;/p&gt;

&lt;p&gt;Y cuando hablamos de hacer peticiones HTTP en el navegador o en Node.js, esa base es fetch.&lt;/p&gt;

&lt;p&gt;🧠 ¿Qué es Fetch?&lt;br&gt;
fetch es una API nativa de JavaScript que te permite hacer peticiones HTTP.&lt;/p&gt;

&lt;p&gt;Sin dependencias&lt;br&gt;
Sin instalaciones&lt;br&gt;
Sin sorpresas&lt;br&gt;
Ya viene incluida en navegadores modernos y en Node.js (v18+).&lt;/p&gt;

&lt;p&gt;En esencia, fetch devuelve una Promise que se resuelve con un objeto Response.&lt;/p&gt;

&lt;p&gt;⚡ El fetch más simple que puedes escribir&lt;br&gt;
&lt;code&gt;fetch("https://jsonplaceholder.typicode.com/users")&lt;br&gt;
  .then(res =&amp;gt; res.json())&lt;br&gt;
  .then(data =&amp;gt; console.log(data))&lt;br&gt;
  .catch(err =&amp;gt; console.error(err));&lt;/code&gt;&lt;br&gt;
Simple, ¿verdad?&lt;/p&gt;

&lt;p&gt;Pero en aplicaciones reales necesitamos algo más estructurado, reutilizable y seguro.&lt;/p&gt;

&lt;p&gt;🔧 Paso a paso: creando una función limpia con fetch&lt;br&gt;
Vamos a construir una función bien hecha desde cero.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Definir una base URL
Esto mantiene tus endpoints limpios y fáciles de mantener.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;code&gt;const baseUrl = "https://jsonplaceholder.typicode.com";&lt;/code&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Crear una función async
Usar async/await hace el código más claro.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;code&gt;export async function getUsers() {&lt;/code&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Hacer la petición&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;code&gt;const response = await fetch(&lt;/code&gt;${baseUrl}/users&lt;code&gt;);&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;En este punto, response no es tu data todavía — es un objeto con información como status, headers, etc.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Procesar la respuesta&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;code&gt;const processedResponse = await response.json();&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Esto convierte la respuesta en datos utilizables en JavaScript.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Manejar errores correctamente
Nunca confíes en la red.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;code&gt;try {&lt;br&gt;
  // lógica&lt;br&gt;
} catch (err) {&lt;br&gt;
  console.error("Error fetching users:", err);&lt;br&gt;
  return [];&lt;br&gt;
}&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;✅ Versión final (base lista para producción)&lt;/p&gt;

&lt;p&gt;&lt;code&gt;const baseUrl = "https://jsonplaceholder.typicode.com";&lt;br&gt;
export async function getUsers() {&lt;br&gt;
  try {&lt;br&gt;
    const response = await fetch(&lt;/code&gt;${baseUrl}/users&lt;code&gt;);&lt;br&gt;
    const processedResponse = await response.json();&lt;br&gt;
    console.log(processedResponse);&lt;br&gt;
    return processedResponse;&lt;br&gt;
  } catch (err) {&lt;br&gt;
    console.error("Error fetching users:", err);&lt;br&gt;
    return [];&lt;br&gt;
  }&lt;br&gt;
}&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;⚠️ Mejora importante (que muchos ignoran)&lt;br&gt;
fetch NO lanza errores automáticamente en fallos HTTP (como 404 o 500).&lt;/p&gt;

&lt;p&gt;Become a Medium member&lt;br&gt;
Es decir, esto:&lt;/p&gt;

&lt;p&gt;fetch("/wrong-url")&lt;br&gt;
👉 NO entra al catch.&lt;/p&gt;

&lt;p&gt;Por eso siempre deberías validar:&lt;br&gt;
&lt;code&gt;&lt;br&gt;
if (!response.ok) {&lt;br&gt;
  throw new Error(&lt;/code&gt;HTTP error! status: ${response.status}&lt;code&gt;);&lt;br&gt;
}&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;🔐 Versión más segura&lt;/p&gt;

&lt;p&gt;&lt;code&gt;export async function getUsers() {&lt;br&gt;
  try {&lt;br&gt;
    const response = await fetch(&lt;/code&gt;${baseUrl}/users&lt;code&gt;);&lt;br&gt;
if (!response.ok) {&lt;br&gt;
      throw new Error(&lt;/code&gt;HTTP error! status: ${response.status}&lt;code&gt;);&lt;br&gt;
    }&lt;br&gt;
    const processedResponse = await response.json();&lt;br&gt;
    return processedResponse;&lt;br&gt;
  } catch (err) {&lt;br&gt;
    console.error("Error fetching users:", err);&lt;br&gt;
    return [];&lt;br&gt;
  }&lt;br&gt;
}&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;🚀 Por qué esto importa más que nunca&lt;br&gt;
Cuando dependes totalmente de librerías como Axios:&lt;/p&gt;

&lt;p&gt;Heredas sus vulnerabilidades&lt;br&gt;
Dependes de su mantenimiento&lt;br&gt;
Pierdes visibilidad de lo que realmente pasa&lt;br&gt;
Y cuando algo falla… te quedas sin control.&lt;/p&gt;

&lt;p&gt;Pero cuando entiendes fetch:&lt;/p&gt;

&lt;p&gt;Debuggeas más rápido&lt;br&gt;
Reduces dependencias&lt;br&gt;
Mantienes el control&lt;br&gt;
Y siendo honestos…&lt;/p&gt;

&lt;p&gt;👉 Para la mayoría de casos, ya no necesitas Axios.&lt;/p&gt;

&lt;p&gt;⚖️ ¿Cuándo sí usar Axios?&lt;br&gt;
Para ser justos, Axios sigue siendo útil cuando necesitas:&lt;/p&gt;

&lt;p&gt;Interceptores de request/response&lt;br&gt;
Transformaciones automáticas&lt;br&gt;
Soporte para navegadores antiguos&lt;br&gt;
Pero incluso así, entender fetch te hace mejor desarrollador.&lt;/p&gt;

&lt;p&gt;💭 Conclusión&lt;br&gt;
Los frameworks cambian.&lt;br&gt;
Las librerías van y vienen.&lt;/p&gt;

&lt;p&gt;Pero los fundamentos…&lt;/p&gt;

&lt;p&gt;👉 se acumulan.&lt;/p&gt;

&lt;p&gt;Aprender fetch no es solo hacer requests — es tener control sobre tu stack.&lt;/p&gt;

&lt;p&gt;Y en un mundo donde las dependencias pueden romperse de un día para otro…&lt;/p&gt;

&lt;p&gt;👉 eso ya no es opcional.&lt;/p&gt;

&lt;p&gt;👋 Sígueme para más&lt;br&gt;
Comparto tips simples, snippets y buenas prácticas de programación.&lt;/p&gt;

&lt;p&gt;Sígueme como &lt;a href="https://www.instagram.com/adams.nxt/" rel="noopener noreferrer"&gt;@adams.nxt&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;🔗 Código&lt;br&gt;
Puedes encontrar más ejemplos en mi GitHub:&lt;br&gt;
&lt;a href="https://github.com/adamsnxt" rel="noopener noreferrer"&gt;https://github.com/adamsnxt&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>nextjs</category>
      <category>react</category>
    </item>
    <item>
      <title>Why You Should Know Vanilla Fetch (Especially Now)</title>
      <dc:creator>adams.nxt</dc:creator>
      <pubDate>Sat, 04 Apr 2026 13:06:50 +0000</pubDate>
      <link>https://forem.com/adamsnxt/why-you-should-know-vanilla-fetch-especially-now-330b</link>
      <guid>https://forem.com/adamsnxt/why-you-should-know-vanilla-fetch-especially-now-330b</guid>
      <description>&lt;p&gt;A few years ago, using libraries like Axios felt like the obvious choice. Cleaner syntax, built-in JSON parsing, interceptors… it just made life easier.&lt;/p&gt;

&lt;p&gt;But recently, after security concerns and ecosystem risks (including incidents where popular packages were compromised), one thing became very clear:&lt;/p&gt;

&lt;p&gt;👉 The more you depend on abstractions, the more fragile your stack becomes.&lt;/p&gt;

&lt;p&gt;This isn’t about abandoning tools. It’s about understanding the foundation.&lt;/p&gt;

&lt;p&gt;And when it comes to making HTTP requests in the browser or Node.js, that foundation is fetch.&lt;/p&gt;

&lt;p&gt;What is Fetch?&lt;br&gt;
fetch is a native JavaScript API that allows you to make HTTP requests.&lt;/p&gt;

&lt;p&gt;No dependencies. No installs. No surprises.&lt;/p&gt;

&lt;p&gt;It’s already available in modern browsers and in Node.js (v18+).&lt;/p&gt;

&lt;p&gt;At its core, fetch returns a Promise that resolves to a Response object.&lt;/p&gt;

&lt;p&gt;The Simplest Fetch You Can Write&lt;/p&gt;

&lt;p&gt;&lt;code&gt;fetch("https://jsonplaceholder.typicode.com/users")&lt;br&gt;
  .then(res =&amp;gt; res.json())&lt;br&gt;
  .then(data =&amp;gt; console.log(data))&lt;br&gt;
  .catch(err =&amp;gt; console.error(err));&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Simple, right?&lt;/p&gt;

&lt;p&gt;But for real-world apps, we need something more structured, reusable, and safe.&lt;/p&gt;

&lt;p&gt;Step-by-Step: Building a Clean Fetch Function&lt;br&gt;
Let’s build a proper data-fetching function from scratch.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Define a Base URL
This keeps your endpoints clean and maintainable.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;code&gt;const baseUrl = "https://jsonplaceholder.typicode.com";&lt;/code&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Create an Async Function
Using async/await makes the code easier to read and reason about.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;export async function getUsers() {&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Make the Request&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;code&gt;const response = await fetch(&lt;/code&gt;${baseUrl}/users&lt;code&gt;);&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;At this point, response is not your data yet — it's a wrapper with metadata (status, headers, etc).&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Parse the Response&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;code&gt;const processedResponse = await response.json();&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;This converts the raw response into usable JavaScript data.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Handle Errors Properly
Never trust the network.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;code&gt;try {&lt;br&gt;
  // request logic&lt;br&gt;
} catch (err) {&lt;br&gt;
  console.error("Error fetching users:", err);&lt;br&gt;
  return [];&lt;br&gt;
}&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Final Version (Production-Ready Baseline)&lt;br&gt;
Here’s the complete function:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;const baseUrl = "https://jsonplaceholder.typicode.com";&lt;br&gt;
export async function getUsers() {&lt;br&gt;
  try {&lt;br&gt;
    const response = await fetch(&lt;/code&gt;${baseUrl}/users&lt;code&gt;);&lt;br&gt;
    const processedResponse = await response.json();&lt;br&gt;
    console.log(processedResponse);&lt;br&gt;
    return processedResponse;&lt;br&gt;
  } catch (err) {&lt;br&gt;
    console.error("Error fetching users:", err);&lt;br&gt;
    return [];&lt;br&gt;
  }&lt;br&gt;
}&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Important Improvement (That Most People Miss)&lt;br&gt;
fetch does NOT throw errors for HTTP failures (like 404 or 500).&lt;/p&gt;

&lt;p&gt;Join The Writer's Circle event&lt;br&gt;
That means this:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;fetch("/wrong-url")&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;👉 will NOT go to catch.&lt;/p&gt;

&lt;p&gt;So you should always check:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;if (!response.ok) {&lt;br&gt;
  throw new Error(&lt;/code&gt;HTTP error! status: ${response.status}&lt;code&gt;);&lt;br&gt;
}&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Safer Version&lt;/p&gt;

&lt;p&gt;&lt;code&gt;export async function getUsers() {&lt;br&gt;
  try {&lt;br&gt;
    const response = await fetch(&lt;/code&gt;${baseUrl}/users&lt;code&gt;);&lt;br&gt;
    if (!response.ok) {&lt;br&gt;
      throw new Error(&lt;/code&gt;HTTP error! status: ${response.status}&lt;code&gt;);&lt;br&gt;
    }&lt;br&gt;
    const processedResponse = await response.json();&lt;br&gt;
    return processedResponse;&lt;br&gt;
  } catch (err) {&lt;br&gt;
    console.error("Error fetching users:", err);&lt;br&gt;
    return [];&lt;br&gt;
  }&lt;br&gt;
}&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Why This Matters More Than Ever&lt;br&gt;
When you rely entirely on libraries like Axios:&lt;/p&gt;

&lt;p&gt;You inherit their vulnerabilities&lt;br&gt;
You depend on their maintenance&lt;br&gt;
You abstract away critical knowledge&lt;br&gt;
When something breaks… you’re stuck.&lt;/p&gt;

&lt;p&gt;But when you understand fetch:&lt;/p&gt;

&lt;p&gt;You can debug faster&lt;br&gt;
You reduce dependencies&lt;br&gt;
You stay in control&lt;br&gt;
And honestly?&lt;/p&gt;

&lt;p&gt;For most use cases, you don’t need Axios anymore.&lt;/p&gt;

&lt;p&gt;When Should You Still Use Axios?&lt;br&gt;
To be fair, Axios still shines when you need:&lt;/p&gt;

&lt;p&gt;Request/response interceptors&lt;br&gt;
Automatic transforms&lt;br&gt;
Older browser support&lt;br&gt;
But even then — knowing fetch makes you a better engineer.&lt;/p&gt;

&lt;p&gt;Final Thought&lt;br&gt;
Frameworks change. Libraries come and go.&lt;/p&gt;

&lt;p&gt;But fundamentals?&lt;/p&gt;

&lt;p&gt;They compound.&lt;/p&gt;

&lt;p&gt;Learning fetch isn’t just about making requests — it’s about owning your stack.&lt;/p&gt;

&lt;p&gt;And in a world where dependencies can break overnight…&lt;/p&gt;

&lt;p&gt;That’s not optional anymore.&lt;/p&gt;

&lt;p&gt;👋 Follow for more&lt;br&gt;
I share simple, real-world programming tips and snippets.&lt;/p&gt;

&lt;p&gt;Follow me as &lt;a href="https://www.instagram.com/adams.nxt/" rel="noopener noreferrer"&gt;@adams.nxt&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can find more code examples on my GitHub:&lt;br&gt;
&lt;a href="https://github.com/adamsnxt" rel="noopener noreferrer"&gt;https://github.com/adamsnxt&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>react</category>
      <category>nextjs</category>
    </item>
    <item>
      <title>How to Loop Through Arrays in React (The Right Way)</title>
      <dc:creator>adams.nxt</dc:creator>
      <pubDate>Fri, 03 Apr 2026 01:01:12 +0000</pubDate>
      <link>https://forem.com/adamsnxt/how-to-loop-through-arrays-in-react-the-right-way-6li</link>
      <guid>https://forem.com/adamsnxt/how-to-loop-through-arrays-in-react-the-right-way-6li</guid>
      <description>&lt;p&gt;If you’re learning React, at some point you’ll hit this question:&lt;/p&gt;

&lt;p&gt;“How do I properly loop through arrays?”&lt;/p&gt;

&lt;p&gt;And yeah… you can use a for loop — but that’s not how React is meant to work.&lt;/p&gt;

&lt;p&gt;Let’s break it down simply.&lt;/p&gt;

&lt;p&gt;🧠 The React Way: map()&lt;br&gt;
In React, the correct way to render lists is using JavaScript’s .map() method.&lt;/p&gt;

&lt;p&gt;Why?&lt;/p&gt;

&lt;p&gt;Because React is declarative — you describe what the UI should look like based on data.&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
const users = ["Adam", "Sophia", "Lucas"];&lt;br&gt;
function App() {&lt;br&gt;
  return (&lt;br&gt;
    &lt;/p&gt;
&lt;br&gt;
      {users.map((user, index) =&amp;gt; (&lt;br&gt;
        &lt;p&gt;{user}&lt;/p&gt;
&lt;br&gt;
      ))}&lt;br&gt;
    &lt;br&gt;
  );&lt;br&gt;
}&lt;br&gt;
👉 This takes each item in the array and turns it into UI.

&lt;p&gt;⚠️ The Key Problem (Most Devs Ignore This)&lt;br&gt;
React needs a way to identify each element in the list.&lt;/p&gt;

&lt;p&gt;Become a Medium member&lt;br&gt;
That’s where the key comes in.&lt;/p&gt;

&lt;p&gt;❌ Bad:&lt;br&gt;
{users.map((user, index) =&amp;gt; (&lt;br&gt;
  &lt;/p&gt;
&lt;p&gt;{user}&lt;/p&gt;
&lt;br&gt;
))}&lt;br&gt;
✅ Better:&lt;br&gt;
const users = [&lt;br&gt;
  { id: 1, name: "Adam" },&lt;br&gt;
  { id: 2, name: "Sophia" },&lt;br&gt;
];&lt;br&gt;
{users.map((user) =&amp;gt; (&lt;br&gt;
  &lt;p&gt;{user.name}&lt;/p&gt;
&lt;br&gt;
))}&lt;br&gt;
👉 Always use a unique and stable value.

&lt;p&gt;🚫 Why NOT use for or forEach&lt;br&gt;
You might think:&lt;/p&gt;

&lt;p&gt;“Why not just loop like normal?”&lt;/p&gt;

&lt;p&gt;Because:&lt;/p&gt;

&lt;p&gt;forEach() does not return anything → React can’t render it&lt;br&gt;
for loops break the declarative pattern&lt;br&gt;
You end up writing more code for worse results&lt;br&gt;
🔁 Real World Example&lt;br&gt;
Let’s say you fetch data from an API:&lt;/p&gt;

&lt;p&gt;const [users, setUsers] = useState([]);&lt;br&gt;
useEffect(() =&amp;gt; {&lt;br&gt;
  fetch("/api/users")&lt;br&gt;
    .then(res =&amp;gt; res.json())&lt;br&gt;
    .then(data =&amp;gt; setUsers(data));&lt;br&gt;
}, []);&lt;br&gt;
Rendering it:&lt;/p&gt;

&lt;p&gt;return (&lt;br&gt;
  &lt;/p&gt;
&lt;br&gt;
    {users.map(user =&amp;gt; (&lt;br&gt;
      &lt;br&gt;
        &lt;h3&gt;{user.name}&lt;/h3&gt;
&lt;br&gt;
        &lt;p&gt;{user.email}&lt;/p&gt;
&lt;br&gt;
      &lt;br&gt;
    ))}&lt;br&gt;
  &lt;br&gt;
);&lt;br&gt;
💥 Common Mistakes&lt;br&gt;
Forgetting the key&lt;br&gt;
Using index when the list can change&lt;br&gt;
Trying to use forEach&lt;br&gt;
Mutating the array before rendering&lt;br&gt;
⚡ Clean Pattern (Pro Tip)&lt;br&gt;
Extract components:

&lt;p&gt;function UserCard({ user }) {&lt;br&gt;
  return (&lt;br&gt;
    &lt;/p&gt;
&lt;br&gt;
      &lt;h3&gt;{user.name}&lt;/h3&gt;
&lt;br&gt;
      &lt;p&gt;{user.email}&lt;/p&gt;
&lt;br&gt;
    &lt;br&gt;
  );&lt;br&gt;
}&lt;br&gt;
{users.map(user =&amp;gt; (&lt;br&gt;
  &lt;br&gt;
))}&lt;br&gt;
👉 Cleaner, reusable, scalable.

&lt;p&gt;🚀 Final Thoughts&lt;br&gt;
If you remember one thing:&lt;/p&gt;

&lt;p&gt;React doesn’t “loop” — it transforms data into UI.&lt;/p&gt;

&lt;p&gt;Mastering .map() is one of the first steps to thinking like a React developer.&lt;/p&gt;

&lt;p&gt;👋 Follow for more&lt;br&gt;
I share simple, real-world programming tips and snippets.&lt;/p&gt;

&lt;p&gt;Follow me as &lt;a href="https://www.instagram.com/adams.nxt" rel="noopener noreferrer"&gt;@adams.nxt&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can find more code examples on my GitHub:&lt;br&gt;
&lt;a href="https://github.com/adamsnxt" rel="noopener noreferrer"&gt;https://github.com/adamsnxt&lt;/a&gt;&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>javascript</category>
      <category>react</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Cómo recorrer arrays en React (La forma correcta)</title>
      <dc:creator>adams.nxt</dc:creator>
      <pubDate>Fri, 03 Apr 2026 00:59:27 +0000</pubDate>
      <link>https://forem.com/adamsnxt/como-recorrer-arrays-en-react-la-forma-correcta-18e8</link>
      <guid>https://forem.com/adamsnxt/como-recorrer-arrays-en-react-la-forma-correcta-18e8</guid>
      <description>&lt;p&gt;Si estás aprendiendo React, en algún punto te vas a hacer esta pregunta:&lt;/p&gt;

&lt;p&gt;“¿Cómo recorro arrays correctamente?”&lt;/p&gt;

&lt;p&gt;Y sí… puedes usar un for, pero esa no es la forma en la que React está pensado para trabajar.&lt;/p&gt;

&lt;p&gt;Vamos a explicarlo simple.&lt;/p&gt;

&lt;p&gt;🧠 La forma en React: map()&lt;br&gt;
En React, la manera correcta de renderizar listas es usando el método .map() de JavaScript.&lt;/p&gt;

&lt;p&gt;¿Por qué?&lt;/p&gt;

&lt;p&gt;Porque React es declarativo — tú describes cómo debe verse la UI a partir de los datos.&lt;/p&gt;

&lt;p&gt;Ejemplo:&lt;br&gt;
&lt;code&gt;const users = ["Adam", "Sophia", "Lucas"];&lt;br&gt;
function App() {&lt;br&gt;
  return (&lt;br&gt;
    &amp;lt;div&amp;gt;&lt;br&gt;
      {users.map((user, index) =&amp;gt; (&lt;br&gt;
        &amp;lt;p key={index}&amp;gt;{user}&amp;lt;/p&amp;gt;&lt;br&gt;
      ))}&lt;br&gt;
    &amp;lt;/div&amp;gt;&lt;br&gt;
  );&lt;br&gt;
}&lt;/code&gt;&lt;br&gt;
👉 Esto toma cada elemento del array y lo convierte en UI.&lt;/p&gt;

&lt;p&gt;⚠️ El problema de las key (que muchos ignoran)&lt;br&gt;
React necesita una forma de identificar cada elemento en la lista.&lt;/p&gt;

&lt;p&gt;Become a Medium member&lt;br&gt;
Ahí es donde entra la key.&lt;/p&gt;

&lt;p&gt;❌ Mal:&lt;br&gt;
&lt;code&gt;{users.map((user, index) =&amp;gt; (&lt;br&gt;
  &amp;lt;p key={index}&amp;gt;{user}&amp;lt;/p&amp;gt;&lt;br&gt;
))}&lt;/code&gt;&lt;br&gt;
✅ Mejor:&lt;br&gt;
&lt;code&gt;const users = [&lt;br&gt;
  { id: 1, name: "Adam" },&lt;br&gt;
  { id: 2, name: "Sophia" },&lt;br&gt;
];&lt;br&gt;
{users.map((user) =&amp;gt; (&lt;br&gt;
  &amp;lt;p key={user.id}&amp;gt;{user.name}&amp;lt;/p&amp;gt;&lt;br&gt;
))}&lt;/code&gt;&lt;br&gt;
👉 Siempre usa un valor único y estable.&lt;/p&gt;

&lt;p&gt;🚫 Por qué NO usar for o forEach&lt;br&gt;
Puede que pienses:&lt;/p&gt;

&lt;p&gt;“¿Por qué no recorrer como siempre?”&lt;/p&gt;

&lt;p&gt;Porque:&lt;/p&gt;

&lt;p&gt;forEach() no retorna nada → React no puede renderizarlo ()&lt;br&gt;
Los for rompen el patrón declarativo&lt;br&gt;
Terminas escribiendo más código para peores resultados&lt;br&gt;
🔁 Ejemplo real&lt;br&gt;
Imagina que haces una petición a una API:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;const [users, setUsers] = useState([]);&lt;br&gt;
useEffect(() =&amp;gt; {&lt;br&gt;
  fetch("/api/users")&lt;br&gt;
    .then(res =&amp;gt; res.json())&lt;br&gt;
    .then(data =&amp;gt; setUsers(data));&lt;br&gt;
}, []);&lt;/code&gt;&lt;br&gt;
Renderizando:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;return (&lt;br&gt;
  &amp;lt;div&amp;gt;&lt;br&gt;
    {users.map(user =&amp;gt; (&lt;br&gt;
      &amp;lt;div key={user.id}&amp;gt;&lt;br&gt;
        &amp;lt;h3&amp;gt;{user.name}&amp;lt;/h3&amp;gt;&lt;br&gt;
        &amp;lt;p&amp;gt;{user.email}&amp;lt;/p&amp;gt;&lt;br&gt;
      &amp;lt;/div&amp;gt;&lt;br&gt;
    ))}&lt;br&gt;
  &amp;lt;/div&amp;gt;&lt;br&gt;
);&lt;/code&gt;&lt;br&gt;
💥 Errores comunes&lt;br&gt;
Olvidar la key&lt;br&gt;
Usar index cuando la lista puede cambiar&lt;br&gt;
Intentar usar forEach&lt;br&gt;
Mutar el array antes de renderizar&lt;br&gt;
⚡ Patrón limpio (Pro tip)&lt;br&gt;
Extrae componentes:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;function UserCard({ user }) {&lt;br&gt;
  return (&lt;br&gt;
    &amp;lt;div&amp;gt;&lt;br&gt;
      &amp;lt;h3&amp;gt;{user.name}&amp;lt;/h3&amp;gt;&lt;br&gt;
      &amp;lt;p&amp;gt;{user.email}&amp;lt;/p&amp;gt;&lt;br&gt;
    &amp;lt;/div&amp;gt;&lt;br&gt;
  );&lt;br&gt;
}&lt;br&gt;
{users.map(user =&amp;gt; (&lt;br&gt;
  &amp;lt;UserCard key={user.id} user={user} /&amp;gt;&lt;br&gt;
))}&lt;/code&gt;&lt;br&gt;
👉 Más limpio, reutilizable y escalable.&lt;/p&gt;

&lt;p&gt;🚀 Conclusión&lt;br&gt;
Si te quedas con una sola idea:&lt;/p&gt;

&lt;p&gt;React no “recorre” — transforma datos en UI.&lt;/p&gt;

&lt;p&gt;Dominar .map() es uno de los primeros pasos para pensar como un desarrollador en React.&lt;/p&gt;

&lt;p&gt;👋 Sígueme para más&lt;br&gt;
Comparto tips simples, snippets y buenas prácticas de programación.&lt;/p&gt;

&lt;p&gt;Sígueme como &lt;a href="https://www.instagram.com/adams.nxt" rel="noopener noreferrer"&gt;@adams.nxt&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Puedes encontar mas ejemplos de codigo en mi GitHub:&lt;br&gt;
&lt;a href="https://github.com/adamsnxt" rel="noopener noreferrer"&gt;https://github.com/adamsnxt&lt;/a&gt;&lt;/p&gt;

</description>
      <category>react</category>
      <category>javascript</category>
      <category>typescript</category>
      <category>frontend</category>
    </item>
  </channel>
</rss>
