Quickstarters
Cómo construir un frontend de Solid.js y conectarlo a un backend
34 min
en esta guía, construirás una aplicación de lista de tareas utilizando solid js y la conectarás a un backend robusto impulsado por back4app este tutorial está diseñado como un punto de partida ideal porque cubre las operaciones crud fundamentales (crear, leer, actualizar, eliminar) y te guía a través del diseño de una interfaz de usuario clara y funcional al final, tendrás una aplicación completamente operativa que demuestra cómo integrar un servicio de backend gestionado mientras aprovechas solid js para un frontend receptivo desarrollar una aplicación de pila completa puede ser un desafío debido a las complejidades de configurar un backend, gestionar una base de datos, manejar la autenticación y desplegar infraestructura para simplificar este proceso, utilizamos back4app, que ofrece una solución de backend como servicio (baas) , permitiéndote concentrarte en crear tu frontend mientras gestiona el alojamiento, las bases de datos y las apis back4app proporciona servicios de backend completos, incluyendo una base de datos lista para usar, autenticación, cloud code para lógica del lado del servidor y sdks para una integración fluida también admite despliegues en contenedores, lo que lo convierte en una opción flexible para alojar aplicaciones de pila completa con estas herramientas, puedes desarrollar y desplegar aplicaciones rápidamente sin preocuparte por el mantenimiento del servidor conclusiones clave siguiendo este tutorial aprenderás a inicializar un proyecto moderno de solid js usando vite integrar sin problemas un servicio backend para manejar los datos de tu aplicación implementar operaciones crud esenciales para una interfaz de usuario dinámica e interactiva desplegar una aplicación completamente funcional lista de tareas utilizando flujos de trabajo en contenedores en back4app requisitos previos asegúrate de tener estas herramientas y habilidades antes de comenzar node js y npm instala node js (se recomienda lts) desde nodejs org https //nodejs org/ y verifica ejecutando node v y npm v en tu terminal conocimientos básicos de solid js se requiere familiaridad con componentes, señales reactivas (usando createsignal ) y sintaxis jsx si eres nuevo en solid js, considera revisar sus fundamentos primero una cuenta de back4app regístrate en back4app https //www back4app com/ para configurar y gestionar tus servicios backend con estos requisitos previos en su lugar, estás listo para configurar tu proyecto y comenzar a construir configuración del proyecto comience configurando su entorno de desarrollo local e inicializando su proyecto solid js utilizando vite para una experiencia de desarrollo rápida verifique que node js (versión lts) esté instalado en su máquina si es necesario, descárguelo e instálelo desde nodejs org https //nodejs org/ confirme la instalación node v npm v inicialice su proyecto solid js utilizando vite ejecute el siguiente comando en su terminal (reemplace todo app con el nombre de proyecto que desee) npm create vite\@latest todo app template solid cámbiese a su directorio de proyecto cd todo app instale todas las dependencias necesarias npm install inicie el servidor de desarrollo para confirmar su configuración npm run dev su aplicación solid js ahora debería estar funcionando localmente abra la url mostrada en su navegador para verificar a continuación, configurará su backend en back4app para gestionar el almacenamiento de datos y las interacciones con la api creando el backend de todo back4app ofrece un servicio de backend totalmente gestionado impulsado por parse , que proporciona una base de datos nosql, autenticación, cloud code y apis autogeneradas desde el primer momento esta sección te guía a través de la creación de un modelo de datos de tarea para almacenar los elementos de tu lista de tareas y vincularlo con tu frontend de solid js configurando tu aplicación backend inicia sesión en tu panel de control de back4app https //www back4app com/ y haz clic en "crear una nueva aplicación " nombra tu aplicación (por ejemplo, todosolidapp ) y elige nodejs/parse como el tipo de backend una vez que la aplicación esté creada, navega a "base de datos" > "navegador" haz clic en "crear una clase" y selecciona "personalizada" nombra la clase tarea y establece los permisos de nivel de clase para permitir lectura y escritura pública (puedes ajustar estas configuraciones más tarde) en la clase tarea , agrega los siguientes campos título (string) – el título de la tarea descripción (string) – detalles de la tarea completado (boolean) – estado que indica si la tarea está terminada fechadevencimiento (fecha) – fecha límite para la tarea haz clic en "guardar" para finalizar tu esquema integrando back4app con solid js integra back4app en tu proyecto de solid js utilizando el parse javascript sdk para comunicarte con tu backend instala el sdk a través de npm npm install parse configura el sdk inicializándolo con tu application id y javascript key recupera estos de tu panel de control de back4app en app settings > security & keys en tu src/index jsx (o archivo de entrada equivalente), importa y configura parse de la siguiente manera import { render } from "solid js/web"; import ' /index css' import app from " /app"; import parse from "parse/dist/parse min js"; const parse app id = 'your application id'; const parse js key = 'your javascript key'; const parse server url = 'https //parseapi back4app com/'; parse initialize(parse app id, parse js key); parse serverurl = parse server url; render(() => \<app />, document getelementbyid("root")); con el backend configurado, estás listo para construir la interfaz de usuario de la lista de tareas en solid js e implementar operaciones crud desarrollando el frontend con solid js ahora que tu backend está conectado, construye la interfaz de usuario para tu aplicación de lista de tareas utilizando solid js crearás componentes para agregar, mostrar, actualizar y eliminar tareas mientras gestionas el estado con señales reactivas organizando tus componentes tu aplicación consistirá en estos componentes clave taskform jsx – gestiona la adición de nuevas tareas tasklist jsx – muestra todas las tareas y ofrece controles para completarlas o eliminarlas taskitem jsx – representa una tarea individual con acciones para marcar como completada o eliminar crea una components carpeta dentro de src y añade estos archivos mkdir src/components touch src/components/taskform jsx src/components/tasklist jsx src/components/taskitem jsx gestionando el estado con solid js utiliza createsignal y createeffect de solid js para la gestión del estado y efectos secundarios comienza configurando el estado en app jsx import { createsignal, onmount } from "solid js"; import taskform from " /components/taskform"; import tasklist from " /components/tasklist"; import parse from "parse/dist/parse min js"; function app() { const \[tasks, settasks] = createsignal(\[]); const fetchtasks = async () => { try { const task = parse object extend("task"); const query = new parse query(task); const results = await query find(); settasks(results map(task => ({ id task id, task tojson() }))); } catch (error) { console error("error fetching tasks ", error); } }; onmount(fetchtasks); return ( \<div class="container"> \<h1>to do list\</h1> \<taskform fetchtasks={fetchtasks} /> \<tasklist tasks={tasks()} fetchtasks={fetchtasks} /> \</div> ); } export default app; construyendo el componente del formulario de tareas en taskform jsx , crea un formulario controlado para agregar tareas gestiona los valores de entrada con createsignal y envía los datos a back4app import { createsignal } from "solid js"; import parse from "parse/dist/parse min js"; function taskform(props) { const \[title, settitle] = createsignal(""); const \[description, setdescription] = createsignal(""); const handlesubmit = async (e) => { e preventdefault(); try { const task = parse object extend("task"); const task = new task(); task set("title", title()); task set("description", description()); task set("completed", false); await task save(); props fetchtasks(); settitle(""); setdescription(""); } catch (error) { console error("error adding task ", error); } }; return ( \<form onsubmit={handlesubmit}> \<input type="text" placeholder="task title" value={title()} oninput={(e) => settitle(e target value)} required /> \<input type="text" placeholder="description" value={description()} oninput={(e) => setdescription(e target value)} required /> \<button type="submit">add task\</button> \</form> ); } export default taskform; mostrando la lista de tareas en tasklist jsx , renderiza la lista de tareas utilizando el taskitem componente para cada entrada import taskitem from " /taskitem"; function tasklist(props) { return ( \<div> {props tasks length === 0 ? ( \<p>no tasks available\</p> ) ( props tasks map(task => ( \<taskitem key={task id} task={task} fetchtasks={props fetchtasks} /> )) )} \</div> ); } export default tasklist; creando el componente de elemento de tarea en taskitem jsx , configura acciones para marcar una tarea como completa o eliminarla import parse from "parse/dist/parse min js"; function taskitem(props) { const handlecomplete = async () => { try { const query = new parse query("task"); const tasktoupdate = await query get(props task id); tasktoupdate set("completed", !props task completed); await tasktoupdate save(); props fetchtasks(); } catch (error) { console error("error updating task ", error); } }; const handledelete = async () => { try { const query = new parse query("task"); const tasktodelete = await query get(props task id); await tasktodelete destroy(); props fetchtasks(); } catch (error) { console error("error deleting task ", error); } }; return ( \<div class={`task item ${props task completed ? "completed" ""}`}> \<h3>{props task title}\</h3> \<p>{props task description}\</p> \<button onclick={handlecomplete}> {props task completed ? "undo" "complete"} \</button> \<button onclick={handledelete}>delete\</button> \</div> ); } export default taskitem; estilizando tu aplicación agrega los siguientes estilos en el index css archivo en la src carpeta / center the content and add spacing / container { max width 600px; margin 40px auto; padding 0 20px; text align center; font family sans serif; } container h1 { margin bottom 20px; } form { display flex; flex direction column; align items center; gap 10px; margin bottom 20px; } form input\[type="text"] { width 80%; max width 400px; padding 8px; box sizing border box; font size 1rem; } form button { padding 8px 16px; cursor pointer; font size 1rem; border none; background color #eaeaea; transition background color 0 2s ease; } form button\ hover { background color #ccc; } container p { font size 1rem; } task item { display flex; flex direction column; align items center; justify content center; gap 12px; border 1px solid #ccc; border radius 6px; padding 15px; margin 10px 0; background color #fafafa; text align center; transition background color 0 2s ease; } task item completed h3, task item completed p { text decoration line through; color #888; } task item h3 { margin 0; font size 1 1rem; } task item p { margin 0; font size 1rem; } task item button { padding 6px 12px; border none; background color #eaeaea; cursor pointer; font size 0 9rem; } task item button\ hover { background color #ccc; } @media (min width 600px) { task item { flex direction row; } } importa el archivo css en tu src/index jsx import " /index css"; finalizando la interfaz de usuario tu aplicación de lista de tareas de solid js ahora cuenta con un frontend dinámico integrado con back4app y un estilo personalizado la aplicación te permite agregar, mostrar, actualizar y eliminar tareas mientras mantiene una comunicación eficiente entre el frontend y el backend a continuación, desplegarás tu aplicación de solid js utilizando la plataforma de despliegue web de back4app desplegando el frontend en el despliegue web de back4app el despliegue web de back4app ofrece un entorno completamente gestionado y containerizado para desplegar tus aplicaciones con despliegues basados en docker, puedes empaquetar tu frontend de solid js y desplegarlo sin esfuerzo configurando vite para producción las aplicaciones de solid js construidas con vite se ejecutan en modo de desarrollo por defecto para producción, construye una versión estática y sírvela con un servidor web ligero como nginx actualiza tu vite config js para establecer la ruta base correcta import { defineconfig } from 'vite'; import solidplugin from 'vite plugin solid'; export default defineconfig({ plugins \[solidplugin()], base ' /', // ensures correct asset paths in containerized environments }); genera archivos listos para producción npm run build creando un dockerfile para tu aplicación crea un dockerfile en la raíz del proyecto para definir cómo se contenedora tu aplicación \# use an official lightweight node js image to build the app from node 18 alpine as build workdir /app copy package json package lock json / run npm install copy run npm run build \# use nginx to serve the static files from nginx\ alpine \# copy custom nginx config for spa routing copy nginx conf /etc/nginx/conf d/default conf \# copy built app from build stage copy from=build /app/dist /usr/share/nginx/html expose 80 cmd \["nginx", " g", "daemon off;"] después de crear tu dockerfile, configura nginx para enrutar correctamente las solicitudes al archivo index html raíz de tu aplicación solid js cuando intentes acceder a las rutas directamente para hacer esto, crea un nginx conf archivo en el directorio raíz de tu proyecto y pega el bloque de código a continuación server { listen 80; server name localhost; root /usr/share/nginx/html; index index html; \# gzip settings for better performance gzip on; gzip vary on; gzip min length 10240; gzip proxied expired no cache no store private auth; gzip types text/plain text/css text/xml text/javascript application/x javascript application/xml application/javascript; gzip disable "msie \[1 6]\\ "; \# handle static file requests location \\ (?\ jpg|jpeg|gif|png|ico|svg|woff2|woff|eot|ttf|css|js)$ { expires 30d; add header cache control "public, max age=2592000"; try files $uri =404; } \# redirect all requests to index html for spa routing location / { try files $uri $uri/ /index html; } \# error pages error page 404 /index html; error page 500 502 503 504 /50x html; location = /50x html { root /usr/share/nginx/html; } } probando el contenedor localmente antes de la implementación, construye y prueba tu contenedor docker docker build t todo solid frontend ejecuta el contenedor docker run p 8080 80 todo solid frontend visita http //localhost 8080 en tu navegador para confirmar que tu aplicación se sirve correctamente subiendo a github y desplegando a través de back4app sube tu proyecto a github git init git add git commit m "initial commit for back4app deployment" git branch m main git remote add origin \<your github repository url> git push u origin main luego, despliega usando back4app web deployment inicia sesión en back4app web deployment https //www back4app com/containers haz clic en "crear nueva aplicación" , proporciona un nombre y selecciona repositorio de github autoriza a back4app a acceder a tu repositorio y selecciona el todo solid repositorio elige despliegue de dockerfile y confirma la configuración de la construcción haz clic en "desplegar" para iniciar el proceso de construcción monitoreo y gestión de despliegues después del despliegue, usa el panel de control de back4app para ver registros para depuración monitorear el rendimiento del contenedor y el uso de recursos activar redeployments con nuevos commits configurar dominios personalizados si lo deseas pruebas y depuración de tu aplicación una vez desplegada, prueba tu aplicación solid js a fondo verificar la conectividad de la api abre la consola de desarrollador del navegador (f12 → red) para verificar las llamadas a la api durante las operaciones de tarea agregar y recuperar tareas usa la interfaz de usuario para agregar tareas, luego actualiza y confirma la persistencia de datos en el navegador de base de datos de back4app operaciones crud prueba marcar tareas como completas y eliminarlas, asegurando que las actualizaciones se reflejen en el backend manejar casos extremos valida las entradas del formulario y simula condiciones de red más lentas utilizando las herramientas de desarrollador del navegador si surgen problemas, consulta los registros de back4app o revisa tu configuración de api mejores prácticas para usar los servicios de back4app mejora el rendimiento y la seguridad de tu aplicación al optimizar las llamadas a la api usa solicitudes por lotes para múltiples operaciones y selecciona solo los campos necesarios en las consultas asegurar las variables de entorno almacena credenciales sensibles en variables de entorno con vite, crea un env archivo vite parse app id=your app id vite parse js key=your js key implementando auto scaling habilitar el auto escalado en la implementación web de back4app para escenarios de alto tráfico mejorando la seguridad utilizar permisos a nivel de clase (clps) para restringir modificaciones de datos y configurar acls según sea necesario aprovechando el código en la nube desviar lógica compleja al código en la nube para mejorar el rendimiento y reducir la exposición de la api conclusión ahora has construido una aplicación de lista de tareas de pila completa utilizando solid js para el frontend y los robustos servicios backend de back4app este tutorial cubrió el viaje desde la inicialización de un proyecto solid js e integración del sdk de parse hasta la implementación de tu aplicación a través de flujos de trabajo en contenedores en back4app a medida que avanzas, considera agregar características como autenticación de usuario avanzada, actualizaciones en tiempo real e integraciones de terceros para mejorar aún más tu aplicación para más detalles y soporte, explora la documentación de back4app https //www back4app com/docs