
Actividad diagnostica
Objetivo:Identificar los conocimientos previos de los estudiantes en HTML, CSS y lógica básica de diseño web.Instrucciones:Crea una página web simple con un archivo index.html.La página debe contener:Un título principal con tu nombre.Un párrafo donde describas qué entiendes por "aplicaciones web progresivas".Una lista (puede ser ordenada o no ordenada) con 3 aplicaciones web que uses en tu día a día.Una imagen (puede ser de internet o de tu computadora).Aplica algo de estilo con CSS interno o...

App móvil con CRUD conectado a servidor LAMP
Objetivo generalDesarrollar una app móvil en React Native (Expo) capaz de conectarse a una API PHP que realiza operaciones CRUD sobre una tabla en MySQL, todo dentro de una red local.Herramientas necesariasMySQ: Base de datosPHP (Apache o XAMPP): API en backendReact Native + ExpoApp: móvil frontendPostman (opcional): Prueba de endpoints APIVS Code: Editor de códigoExpo Go: Pruebas en el móvil (iOS/Android)Parte 1: Crear la base de datosEn phpMyAdmin o línea de comandos de MySQL:CREATE DATABAS...

La señal que nunca llegó
Lucas tenía una visión: crear una app que ayudara a pequeños productores locales a vender sus cosechas directamente a consumidores urbanos. Nada de intermediarios, solo conexión. La llamó Raíz. Desde su pequeño estudio en Oaxaca, con más corazón que presupuesto, construyó una app limpia, intuitiva y optimista. El diseño estaba listo. Las funciones estaban listas. Los productores estaban listos. Solo faltaba que el mundo se conectara con ella. El día del lanzamiento fue como un amanecer. Lucas...

Actividad diagnostica
Objetivo:Identificar los conocimientos previos de los estudiantes en HTML, CSS y lógica básica de diseño web.Instrucciones:Crea una página web simple con un archivo index.html.La página debe contener:Un título principal con tu nombre.Un párrafo donde describas qué entiendes por "aplicaciones web progresivas".Una lista (puede ser ordenada o no ordenada) con 3 aplicaciones web que uses en tu día a día.Una imagen (puede ser de internet o de tu computadora).Aplica algo de estilo con CSS interno o...

App móvil con CRUD conectado a servidor LAMP
Objetivo generalDesarrollar una app móvil en React Native (Expo) capaz de conectarse a una API PHP que realiza operaciones CRUD sobre una tabla en MySQL, todo dentro de una red local.Herramientas necesariasMySQ: Base de datosPHP (Apache o XAMPP): API en backendReact Native + ExpoApp: móvil frontendPostman (opcional): Prueba de endpoints APIVS Code: Editor de códigoExpo Go: Pruebas en el móvil (iOS/Android)Parte 1: Crear la base de datosEn phpMyAdmin o línea de comandos de MySQL:CREATE DATABAS...

La señal que nunca llegó
Lucas tenía una visión: crear una app que ayudara a pequeños productores locales a vender sus cosechas directamente a consumidores urbanos. Nada de intermediarios, solo conexión. La llamó Raíz. Desde su pequeño estudio en Oaxaca, con más corazón que presupuesto, construyó una app limpia, intuitiva y optimista. El diseño estaba listo. Las funciones estaban listas. Los productores estaban listos. Solo faltaba que el mundo se conectara con ella. El día del lanzamiento fue como un amanecer. Lucas...

Subscribe to Frexus

Subscribe to Frexus
Share Dialog
Share Dialog
<100 subscribers
<100 subscribers


Crear una aplicación móvil sencilla que permita:
Registrar productos (nombre y precio).
Almacenarlos en una base de datos local.
Listarlos en pantalla.
Tener instalado Node.js
Tener instalado el entorno de React Native:
npx react-native init GestorProductos
Instalar el emulador de Android Studio o conectar un dispositivo real.
Entrar al proyecto:
cd GestorProductos
npm install react-native-sqlite-storage
npx pod-install # (solo en iOS)
Estructura del proyecto:
/GestorProductos
├── App.js
├── db.js
├── productoDao.js
// db.js
import SQLite from 'react-native-sqlite-storage';
SQLite.enablePromise(true);
const db = SQLite.openDatabase(
{
name: 'miapp.db',
location: 'default',
},
() => console.log('Base de datos abierta'),
error => console.log('Error: ', error)
);
export default db;
// productoDao.js
import db from './db';
export const crearTablaProducto = () => {
db.transaction(tx => {
tx.executeSql(
`CREATE TABLE IF NOT EXISTS productos (
id INTEGER PRIMARY KEY AUTOINCREMENT,
nombre TEXT,
precio REAL
);`
);
});
};
export const insertarProducto = (nombre, precio, callback) => {
db.transaction(tx => {
tx.executeSql(
'INSERT INTO productos (nombre, precio) VALUES (?, ?);',
[nombre, precio],
(_, resultado) => callback(true, resultado),
(_, error) => {
callback(false, error);
return false;
}
);
});
};
export const obtenerProductos = callback => {
db.transaction(tx => {
tx.executeSql(
'SELECT * FROM productos;',
[],
(_, { rows }) => callback(rows._array),
(_, error) => {
console.log(error);
return false;
}
);
});
};
import React, { useEffect, useState } from 'react';
import { View, Text, TextInput, Button, FlatList, StyleSheet } from 'react-native';
import {
crearTablaProducto,
insertarProducto,
obtenerProductos,
} from './productoDao';
export default function App() {
const [nombre, setNombre] = useState('');
const [precio, setPrecio] = useState('');
const [productos, setProductos] = useState([]);
useEffect(() => {
crearTablaProducto();
cargarProductos();
}, []);
const cargarProductos = () => {
obtenerProductos(data => setProductos(data));
};
const guardar = () => {
if (!nombre || !precio) return;
insertarProducto(nombre, parseFloat(precio), (ok) => {
if (ok) {
setNombre('');
setPrecio('');
cargarProductos();
}
});
};
return (
<View style={styles.container}>
<Text style={styles.title}>Gestor de Productos</Text>
<TextInput placeholder="Nombre" value={nombre} onChangeText={setNombre} style={styles.input} />
<TextInput placeholder="Precio" value={precio} onChangeText={setPrecio} style={styles.input} keyboardType="decimal-pad" />
<Button title="Guardar" onPress={guardar} />
<Text style={styles.subtitle}>Listado:</Text>
<FlatList
data={productos}
keyExtractor={item => item.id.toString()}
renderItem={({ item }) => (
<Text>{item.nombre} - ${item.precio.toFixed(2)}</Text>
)}
/>
</View>
);
}
const styles = StyleSheet.create({
container: { padding: 20, marginTop: 50 },
title: { fontSize: 20, marginBottom: 10 },
subtitle: { marginTop: 20, fontWeight: 'bold' },
input: { borderWidth: 1, marginBottom: 10, padding: 8 },
});
En Android:
npx react-native run-android
En iOS:
npx react-native run-ios
Más información en:
Crear una aplicación móvil sencilla que permita:
Registrar productos (nombre y precio).
Almacenarlos en una base de datos local.
Listarlos en pantalla.
Tener instalado Node.js
Tener instalado el entorno de React Native:
npx react-native init GestorProductos
Instalar el emulador de Android Studio o conectar un dispositivo real.
Entrar al proyecto:
cd GestorProductos
npm install react-native-sqlite-storage
npx pod-install # (solo en iOS)
Estructura del proyecto:
/GestorProductos
├── App.js
├── db.js
├── productoDao.js
// db.js
import SQLite from 'react-native-sqlite-storage';
SQLite.enablePromise(true);
const db = SQLite.openDatabase(
{
name: 'miapp.db',
location: 'default',
},
() => console.log('Base de datos abierta'),
error => console.log('Error: ', error)
);
export default db;
// productoDao.js
import db from './db';
export const crearTablaProducto = () => {
db.transaction(tx => {
tx.executeSql(
`CREATE TABLE IF NOT EXISTS productos (
id INTEGER PRIMARY KEY AUTOINCREMENT,
nombre TEXT,
precio REAL
);`
);
});
};
export const insertarProducto = (nombre, precio, callback) => {
db.transaction(tx => {
tx.executeSql(
'INSERT INTO productos (nombre, precio) VALUES (?, ?);',
[nombre, precio],
(_, resultado) => callback(true, resultado),
(_, error) => {
callback(false, error);
return false;
}
);
});
};
export const obtenerProductos = callback => {
db.transaction(tx => {
tx.executeSql(
'SELECT * FROM productos;',
[],
(_, { rows }) => callback(rows._array),
(_, error) => {
console.log(error);
return false;
}
);
});
};
import React, { useEffect, useState } from 'react';
import { View, Text, TextInput, Button, FlatList, StyleSheet } from 'react-native';
import {
crearTablaProducto,
insertarProducto,
obtenerProductos,
} from './productoDao';
export default function App() {
const [nombre, setNombre] = useState('');
const [precio, setPrecio] = useState('');
const [productos, setProductos] = useState([]);
useEffect(() => {
crearTablaProducto();
cargarProductos();
}, []);
const cargarProductos = () => {
obtenerProductos(data => setProductos(data));
};
const guardar = () => {
if (!nombre || !precio) return;
insertarProducto(nombre, parseFloat(precio), (ok) => {
if (ok) {
setNombre('');
setPrecio('');
cargarProductos();
}
});
};
return (
<View style={styles.container}>
<Text style={styles.title}>Gestor de Productos</Text>
<TextInput placeholder="Nombre" value={nombre} onChangeText={setNombre} style={styles.input} />
<TextInput placeholder="Precio" value={precio} onChangeText={setPrecio} style={styles.input} keyboardType="decimal-pad" />
<Button title="Guardar" onPress={guardar} />
<Text style={styles.subtitle}>Listado:</Text>
<FlatList
data={productos}
keyExtractor={item => item.id.toString()}
renderItem={({ item }) => (
<Text>{item.nombre} - ${item.precio.toFixed(2)}</Text>
)}
/>
</View>
);
}
const styles = StyleSheet.create({
container: { padding: 20, marginTop: 50 },
title: { fontSize: 20, marginBottom: 10 },
subtitle: { marginTop: 20, fontWeight: 'bold' },
input: { borderWidth: 1, marginBottom: 10, padding: 8 },
});
En Android:
npx react-native run-android
En iOS:
npx react-native run-ios
Más información en:
No activity yet