<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Aplicaciones Multiplataforma archivos - Frexus</title>
	<atom:link href="https://www.frexus.dev/tag/aplicaciones-multiplataforma/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.frexus.dev/tag/aplicaciones-multiplataforma/</link>
	<description>Generando Valor Agreado</description>
	<lastBuildDate>Fri, 17 Oct 2025 22:18:13 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://www.frexus.dev/wp-content/uploads/2024/03/cropped-Captura-de-Pantalla-2022-12-26-a-las-15.52.42-32x32.png</url>
	<title>Aplicaciones Multiplataforma archivos - Frexus</title>
	<link>https://www.frexus.dev/tag/aplicaciones-multiplataforma/</link>
	<width>32</width>
	<height>32</height>
</image> 
<site xmlns="com-wordpress:feed-additions:1">215529362</site>	<item>
		<title>Ejercicios básico con React Native &#8211; Expo</title>
		<link>https://www.frexus.dev/post/ejercicios-basicos-react-native-expo/</link>
					<comments>https://www.frexus.dev/post/ejercicios-basicos-react-native-expo/#respond</comments>
		
		<dc:creator><![CDATA[Alfredo de Jesús Gutiérrez]]></dc:creator>
		<pubDate>Thu, 11 Sep 2025 19:02:21 +0000</pubDate>
				<category><![CDATA[post]]></category>
		<category><![CDATA[Aplicaciones Multiplataforma]]></category>
		<category><![CDATA[Aprender React Native]]></category>
		<category><![CDATA[desarrollo móvil]]></category>
		<category><![CDATA[Ejercicios React Native]]></category>
		<category><![CDATA[Expo]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[react native]]></category>
		<guid isPermaLink="false">https://www.frexus.dev/?p=4080</guid>

					<description><![CDATA[<p>Si estás comenzando en el mundo del desarrollo móvil, React Native con Expo es una de las mejores formas de dar tus primeros pasos. Gracias a su facilidad de uso y a la rapidez para crear aplicaciones, podrás aprender los fundamentos sin complicaciones. En este post encontrarás 12 ejercicios básicos con React Native y Expo que te llevarán desde mostrar un simple texto en pantalla hasta construir una calculadora funcional. La ruta está pensada para principiantes y cada actividad incluye código listo para probar en tu proyecto. Al terminar este recorrido tendrás una base sólida para desarrollar aplicaciones móviles multiplataforma y continuar con proyectos más avanzados. Ejercicio 1. Hola Mundo Ejercicio 2. Estilos Ejercicio 3. Botón Interactivo Ejercicio 4. Contador Simple Ejercicio 5. Input de Texto (Saludo) Ejercicio 6. Lista de Elementos Ejercicio 7. Navegación Ejercicio 8. Uso de Íconos Ejercicio 10. Consumir API Ejercicio 11. Ejercicio Extra: Suma de Dos Números Ejercicio 12. Número Par o Impar Ejercicio 13. Calculadora Básica</p>
<p>La entrada <a href="https://www.frexus.dev/post/ejercicios-basicos-react-native-expo/">Ejercicios básico con React Native &#8211; Expo</a> se publicó primero en <a href="https://www.frexus.dev">Frexus</a>.</p>
]]></description>
										<content:encoded><![CDATA[<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img fetchpriority="high" decoding="async" width="1024" height="683" src="https://www.frexus.dev/wp-content/uploads/2025/09/react-1024x683.png" alt="Ejercicio básico con React Native - Expo" class="wp-image-4081" style="width:526px;height:auto" srcset="https://www.frexus.dev/wp-content/uploads/2025/09/react-1024x683.png 1024w, https://www.frexus.dev/wp-content/uploads/2025/09/react-300x200.png 300w, https://www.frexus.dev/wp-content/uploads/2025/09/react-768x512.png 768w, https://www.frexus.dev/wp-content/uploads/2025/09/react-1140x760.png 1140w, https://www.frexus.dev/wp-content/uploads/2025/09/react.png 1536w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p>Si estás comenzando en el mundo del desarrollo móvil, <strong>React Native con Expo</strong> es una de las mejores formas de dar tus primeros pasos. Gracias a su facilidad de uso y a la rapidez para crear aplicaciones, podrás aprender los fundamentos sin complicaciones.</p>



<p>En este post encontrarás <strong>12 ejercicios básicos con React Native y Expo</strong> que te llevarán desde mostrar un simple texto en pantalla hasta construir una calculadora funcional. La ruta está pensada para principiantes y cada actividad incluye código listo para probar en tu proyecto.</p>



<p>Al terminar este recorrido tendrás una base sólida para desarrollar aplicaciones móviles multiplataforma y continuar con proyectos más avanzados. </p>



<h3 class="wp-block-heading">Ejercicio 1. <strong>Hola Mundo</strong></h3>



<ul class="wp-block-list">
<li><strong>Objetivo:</strong> Mostrar un texto en pantalla.</li>



<li><strong>Tarea:</strong> Crear un proyecto con <code>npx create-expo-app</code> y mostrar <code>Hello World!</code>.</li>



<li><strong>Concepto:</strong> <code>Text</code>, <code>View</code>.</li>
</ul>



<div class="hcb_wrap"><pre class="prism line-numbers lang-js" data-lang="JavaScript"><code>import React from &#39;react&#39;;
import { View, Text } from &#39;react-native&#39;;

export default function App() {
  return (
    &lt;View style={{ flex:1, justifyContent:&#39;center&#39;, alignItems:&#39;center&#39; }}&gt;
      &lt;Text&gt;Hello World!&lt;/Text&gt;
    &lt;/View&gt;
  );
}
</code></pre></div>



<h3 class="wp-block-heading">Ejercicio 2. <strong>Estilos</strong></h3>



<ul class="wp-block-list">
<li><strong>Objetivo:</strong> Personalizar vistas y textos.</li>



<li><strong>Tarea:</strong> Cambiar color de fondo, tamaño de letra y alinear texto.</li>



<li><strong>Concepto:</strong> <code>StyleSheet</code>.</li>
</ul>



<div class="hcb_wrap"><pre class="prism line-numbers lang-js" data-lang="JavaScript"><code>import React from &#39;react&#39;;
import { View, Text, StyleSheet } from &#39;react-native&#39;;

export default function App() {
  return (
    &lt;View style={styles.container}&gt;
      &lt;Text style={styles.text}&gt;Texto con estilos&lt;/Text&gt;
    &lt;/View&gt;
  );
}

const styles = StyleSheet.create({
  container: { flex:1, justifyContent:&#39;center&#39;, alignItems:&#39;center&#39;, backgroundColor:&#39;#e0f7fa&#39; },
  text: { fontSize:24, fontWeight:&#39;bold&#39;, color:&#39;#00796b&#39; }
});
</code></pre></div>



<h3 class="wp-block-heading">Ejercicio 3. <strong>Botón Interactivo</strong></h3>



<ul class="wp-block-list">
<li><strong>Objetivo:</strong> Manejo de eventos.</li>



<li><strong>Tarea:</strong> Crear un botón que cambie el texto al hacer clic.</li>



<li><strong>Concepto:</strong> <code>Button</code>, <code>useState</code>.</li>
</ul>



<div class="hcb_wrap"><pre class="prism line-numbers lang-js" data-lang="JavaScript"><code>import React, { useState } from &#39;react&#39;;
import { View, Text, Button } from &#39;react-native&#39;;

export default function App() {
  const [mensaje, setMensaje] = useState(&quot;Texto inicial&quot;);

  return (
    &lt;View style={{ flex:1, justifyContent:&#39;center&#39;, alignItems:&#39;center&#39; }}&gt;
      &lt;Text&gt;{mensaje}&lt;/Text&gt;
      &lt;Button title=&quot;Cambiar Texto&quot; onPress={() =&gt; setMensaje(&quot;¡Texto cambiado!&quot;)} /&gt;
    &lt;/View&gt;
  );
}
</code></pre></div>



<h3 class="wp-block-heading">Ejercicio 4. <strong>Contador Simple</strong></h3>



<ul class="wp-block-list">
<li><strong>Objetivo:</strong> Estados dinámicos.</li>



<li><strong>Tarea:</strong> Dos botones <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2795.png" alt="➕" class="wp-smiley" style="height: 1em; max-height: 1em;" /> y <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2796.png" alt="➖" class="wp-smiley" style="height: 1em; max-height: 1em;" /> que actualicen un contador.</li>



<li><strong>Concepto:</strong> <code>useState</code>.</li>
</ul>



<div class="hcb_wrap"><pre class="prism line-numbers lang-js" data-lang="JavaScript"><code>import React, { useState } from &#39;react&#39;;
import { View, Text, Button } from &#39;react-native&#39;;

export default function App() {
  const [contador, setContador] = useState(0);

  return (
    &lt;View style={{ flex:1, justifyContent:&#39;center&#39;, alignItems:&#39;center&#39; }}&gt;
      &lt;Text style={{ fontSize:30 }}&gt;{contador}&lt;/Text&gt;
      &lt;Button title=&quot;&#x2795;&quot; onPress={() =&gt; setContador(contador+1)} /&gt;
      &lt;Button title=&quot;&#x2796;&quot; onPress={() =&gt; setContador(contador-1)} /&gt;
    &lt;/View&gt;
  );
}
</code></pre></div>



<h3 class="wp-block-heading">Ejercicio 5. <strong>Input de Texto (Saludo</strong>)</h3>



<ul class="wp-block-list">
<li><strong>Objetivo:</strong> Capturar texto.</li>



<li><strong>Tarea:</strong> Escribir el nombre en un <code>TextInput</code> y mostrar <em>Hola [nombre]</em>.</li>



<li><strong>Concepto:</strong> <code>TextInput</code>, binding.</li>
</ul>



<div class="hcb_wrap"><pre class="prism line-numbers lang-js" data-lang="JavaScript"><code>import React, { useState } from &#39;react&#39;;
import { View, Text, TextInput } from &#39;react-native&#39;;

export default function App() {
  const [nombre, setNombre] = useState(&quot;&quot;);

  return (
    &lt;View style={{ flex:1, justifyContent:&#39;center&#39;, alignItems:&#39;center&#39; }}&gt;
      &lt;TextInput 
        placeholder=&quot;Escribe tu nombre&quot; 
        style={{ borderWidth:1, padding:8, marginBottom:10, width:200 }}
        onChangeText={setNombre}
      /&gt;
      &lt;Text&gt;Hola {nombre}&lt;/Text&gt;
    &lt;/View&gt;
  );
}
</code></pre></div>



<h3 class="wp-block-heading">Ejercicio 6. <strong>Lista de Elementos</strong></h3>



<ul class="wp-block-list">
<li><strong>Objetivo:</strong> Renderizar arrays.</li>



<li><strong>Tarea:</strong> Mostrar frutas/tareas en una lista.</li>



<li><strong>Concepto:</strong> <code>FlatList</code>.</li>
</ul>



<div class="hcb_wrap"><pre class="prism line-numbers lang-js" data-lang="JavaScript"><code>import React from &#39;react&#39;;
import { View, Text, FlatList } from &#39;react-native&#39;;

export default function App() {
  const frutas = [&quot;Manzana&quot;, &quot;Plátano&quot;, &quot;Naranja&quot;, &quot;Uvas&quot;];

  return (
    &lt;View style={{ flex:1, padding:20 }}&gt;
      &lt;FlatList 
        data={frutas}
        keyExtractor={(item, index) =&gt; index.toString()}
        renderItem={({ item }) =&gt; &lt;Text style={{ fontSize:20, margin:5 }}&gt;{item}&lt;/Text&gt;}
      /&gt;
    &lt;/View&gt;
  );
}
</code></pre></div>



<h3 class="wp-block-heading">Ejercicio 7. <strong>Navegación</strong></h3>



<ul class="wp-block-list">
<li><strong>Objetivo:</strong> Moverse entre pantallas.</li>



<li><strong>Tarea:</strong> Pantallas: <em>Inicio</em> y <em>Perfil</em>.</li>



<li><strong>Concepto:</strong> <code>React Navigation</code>.</li>



<li><strong>Requiere</strong>: npm install @react-navigation/native @react-navigation/stack react-native-screens react-native-safe-area-context react-native-gesture-handler react-native-reanimated</li>
</ul>



<div class="hcb_wrap"><pre class="prism line-numbers lang-js" data-lang="JavaScript"><code>import * as React from &#39;react&#39;;
import { Button, View, Text } from &#39;react-native&#39;;
import { NavigationContainer } from &#39;@react-navigation/native&#39;;
import { createStackNavigator } from &#39;@react-navigation/stack&#39;;

function HomeScreen({ navigation }) {
  return (
    &lt;View style={{ flex:1, justifyContent:&#39;center&#39;, alignItems:&#39;center&#39; }}&gt;
      &lt;Text&gt;Pantalla Inicio&lt;/Text&gt;
      &lt;Button title=&quot;Ir a Perfil&quot; onPress={() =&gt; navigation.navigate(&#39;Perfil&#39;)} /&gt;
    &lt;/View&gt;
  );
}

function PerfilScreen() {
  return (
    &lt;View style={{ flex:1, justifyContent:&#39;center&#39;, alignItems:&#39;center&#39; }}&gt;
      &lt;Text&gt;Pantalla Perfil&lt;/Text&gt;
    &lt;/View&gt;
  );
}

const Stack = createStackNavigator();

export default function App() {
  return (
    &lt;NavigationContainer&gt;
      &lt;Stack.Navigator&gt;
        &lt;Stack.Screen name=&quot;Inicio&quot; component={HomeScreen} /&gt;
        &lt;Stack.Screen name=&quot;Perfil&quot; component={PerfilScreen} /&gt;
      &lt;/Stack.Navigator&gt;
    &lt;/NavigationContainer&gt;
  );
}
</code></pre></div>



<h3 class="wp-block-heading">Ejercicio 8. <strong>Uso de Íconos</strong></h3>



<ul class="wp-block-list">
<li><strong>Objetivo:</strong> Mejorar UI.</li>



<li><strong>Tarea:</strong> Colocar íconos en botones o listas.</li>



<li><strong>Concepto:</strong> <code>@expo/vector-icons</code>.</li>
</ul>



<div class="hcb_wrap"><pre class="prism line-numbers lang-js" data-lang="JavaScript"><code>import React from &#39;react&#39;;
import { View, Text } from &#39;react-native&#39;;
import { Ionicons } from &#39;@expo/vector-icons&#39;;

export default function App() {
  return (
    &lt;View style={{ flex:1, justifyContent:&#39;center&#39;, alignItems:&#39;center&#39; }}&gt;
      &lt;Text&gt;Icono de React Native:&lt;/Text&gt;
      &lt;Ionicons name=&quot;logo-react&quot; size={64} color=&quot;blue&quot; /&gt;
    &lt;/View&gt;
  );
}
</code></pre></div>



<h3 class="wp-block-heading">Ejercicio 10. <strong>Consumir API</strong></h3>



<ul class="wp-block-list">
<li><strong>Objetivo:</strong> Traer datos externos.</li>



<li><strong>Tarea:</strong> Mostrar títulos desde <code>https://jsonplaceholder.typicode.com/posts</code>.</li>



<li><strong>Concepto:</strong> <code>useEffect</code>, <code>fetch</code>.</li>
</ul>



<div class="hcb_wrap"><pre class="prism line-numbers lang-js" data-lang="JavaScript"><code>import React, { useEffect, useState } from &#39;react&#39;;
import { View, Text, FlatList } from &#39;react-native&#39;;

export default function App() {
  const [posts, setPosts] = useState([]);

  useEffect(() =&gt; {
    fetch(&quot;https://jsonplaceholder.typicode.com/posts&quot;)
      .then(res =&gt; res.json())
      .then(data =&gt; setPosts(data.slice(0,10))); // solo 10
  }, []);

  return (
    &lt;View style={{ flex:1, padding:20 }}&gt;
      &lt;FlatList 
        data={posts}
        keyExtractor={item =&gt; item.id.toString()}
        renderItem={({ item }) =&gt; &lt;Text style={{ margin:5 }}&gt;{item.title}&lt;/Text&gt;}
      /&gt;
    &lt;/View&gt;
  );
}
</code></pre></div>



<h3 class="wp-block-heading">Ejercicio 11. <strong>Ejercicio Extra: Suma de Dos Números</strong></h3>



<ul class="wp-block-list">
<li><strong>Objetivo:</strong> Practicar inputs + lógica básica.</li>



<li><strong>Tarea:</strong> Dos <code>TextInput</code> donde se ingresen números y un botón que muestre la suma.</li>



<li><strong>Concepto:</strong> Manejo de <code>TextInput</code> con valores numéricos, conversión <code>parseInt</code>.</li>
</ul>



<div class="hcb_wrap"><pre class="prism line-numbers lang-js" data-lang="JavaScript"><code>import React, { useState } from &#39;react&#39;;
import { View, Text, TextInput, Button } from &#39;react-native&#39;;

export default function App() {
  const [num1, setNum1] = useState(&quot;&quot;);
  const [num2, setNum2] = useState(&quot;&quot;);
  const [resultado, setResultado] = useState(null);

  const sumar = () =&gt; {
    setResultado(parseInt(num1) + parseInt(num2));
  };

  return (
    &lt;View style={{ flex:1, justifyContent:&#39;center&#39;, alignItems:&#39;center&#39; }}&gt;
      &lt;TextInput placeholder=&quot;Número 1&quot; keyboardType=&quot;numeric&quot; style={{ borderWidth:1, padding:8, margin:5, width:200 }} onChangeText={setNum1}/&gt;
      &lt;TextInput placeholder=&quot;Número 2&quot; keyboardType=&quot;numeric&quot; style={{ borderWidth:1, padding:8, margin:5, width:200 }} onChangeText={setNum2}/&gt;
      &lt;Button title=&quot;Sumar&quot; onPress={sumar} /&gt;
      {resultado !== null && &lt;Text style={{ marginTop:10 }}&gt;Resultado: {resultado}&lt;/Text&gt;}
    &lt;/View&gt;
  );
}
</code></pre></div>



<h3 class="wp-block-heading"><strong>Ejercicio 12. Número Par o Impar</strong></h3>



<ul class="wp-block-list">
<li><strong>Objetivo:</strong> Uso de condicionales.</li>



<li><strong>Tarea:</strong> Ingresar un número en <code>TextInput</code> y mostrar si es par o impar.</li>



<li><strong>Concepto:</strong> Operador módulo <code>%</code>, condicionales.</li>
</ul>



<div class="hcb_wrap"><pre class="prism line-numbers lang-js" data-lang="JavaScript"><code>import React, { useState } from &#39;react&#39;;
import { View, Text, TextInput, Button } from &#39;react-native&#39;;

export default function App() {
  const [numero, setNumero] = useState(&quot;&quot;);
  const [resultado, setResultado] = useState(&quot;&quot;);

  const verificar = () =&gt; {
    const n = parseInt(numero);
    if (isNaN(n)) {
      setResultado(&quot;Ingresa un número válido&quot;);
    } else {
      setResultado(n % 2 === 0 ? &quot;Es par&quot; : &quot;Es impar&quot;);
    }
  };

  return (
    &lt;View style={{ flex:1, justifyContent:&#39;center&#39;, alignItems:&#39;center&#39; }}&gt;
      &lt;TextInput placeholder=&quot;Escribe un número&quot; keyboardType=&quot;numeric&quot; style={{ borderWidth:1, padding:8, margin:5, width:200 }} onChangeText={setNumero}/&gt;
      &lt;Button title=&quot;Verificar&quot; onPress={verificar} /&gt;
      &lt;Text style={{ marginTop:10 }}&gt;{resultado}&lt;/Text&gt;
    &lt;/View&gt;
  );
}
</code></pre></div>



<h3 class="wp-block-heading"><strong>Ejercicio 13. Calculadora Básica</strong></h3>



<ul class="wp-block-list">
<li><strong>Objetivo:</strong> Combinar inputs + operaciones.</li>



<li><strong>Tarea:</strong> Dos <code>TextInput</code> y botones para sumar, restar, multiplicar y dividir. Mostrar el resultado.</li>



<li><strong>Concepto:</strong> Manejo de múltiples eventos y estados.</li>
</ul>



<div class="hcb_wrap"><pre class="prism line-numbers lang-js" data-lang="JavaScript"><code>import React, { useState } from &#39;react&#39;;
import { View, Text, TextInput, Button } from &#39;react-native&#39;;

export default function App() {
  const [num1, setNum1] = useState(&quot;&quot;);
  const [num2, setNum2] = useState(&quot;&quot;);
  const [resultado, setResultado] = useState(null);

  const calcular = (op) =&gt; {
    const n1 = parseFloat(num1);
    const n2 = parseFloat(num2);
    if (isNaN(n1) || isNaN(n2)) {
      setResultado(&quot;Error: Ingresa números válidos&quot;);
      return;
    }
    if (op === &quot;sumar&quot;) setResultado(n1 + n2);
    if (op === &quot;restar&quot;) setResultado(n1 - n2);
    if (op === &quot;multiplicar&quot;) setResultado(n1 * n2);
    if (op === &quot;dividir&quot;) setResultado(n2 !== 0 ? n1 / n2 : &quot;No se puede dividir entre 0&quot;);
  };

  return (
    &lt;View style={{ flex:1, justifyContent:&#39;center&#39;, alignItems:&#39;center&#39; }}&gt;
      &lt;TextInput placeholder=&quot;Número 1&quot; keyboardType=&quot;numeric&quot; style={{ borderWidth:1, padding:8, margin:5, width:200 }} onChangeText={setNum1}/&gt;
      &lt;TextInput placeholder=&quot;Número 2&quot; keyboardType=&quot;numeric&quot; style={{ borderWidth:1, padding:8, margin:5, width:200 }} onChangeText={setNum2}/&gt;
      
      &lt;View style={{ flexDirection:&#39;row&#39;, marginTop:10 }}&gt;
        &lt;Button title=&quot;&#x2795;&quot; onPress={() =&gt; calcular(&quot;sumar&quot;)} /&gt;
        &lt;Button title=&quot;&#x2796;&quot; onPress={() =&gt; calcular(&quot;restar&quot;)} /&gt;
        &lt;Button title=&quot;&#x2716;&quot; onPress={() =&gt; calcular(&quot;multiplicar&quot;)} /&gt;
        &lt;Button title=&quot;&#x2797;&quot; onPress={() =&gt; calcular(&quot;dividir&quot;)} /&gt;
      &lt;/View&gt;

      {resultado !== null && &lt;Text style={{ marginTop:10 }}&gt;Resultado: {resultado}&lt;/Text&gt;}
    &lt;/View&gt;
  );
}
</code></pre></div>



<p></p>
<p>La entrada <a href="https://www.frexus.dev/post/ejercicios-basicos-react-native-expo/">Ejercicios básico con React Native &#8211; Expo</a> se publicó primero en <a href="https://www.frexus.dev">Frexus</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.frexus.dev/post/ejercicios-basicos-react-native-expo/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">4080</post-id>	</item>
	</channel>
</rss>
