ReactJS Templates
Construyendo una plataforma de blogs SPA con ReactJS y Back4App
26 min
1\ introducción este tutorial te guiará a través del proceso de construcción de una aplicación de una sola página (spa) completa para una plataforma de blogs utilizando reactjs como el frontend y back4app como el backend cubriremos todo, desde la configuración de tu entorno de desarrollo, la gestión del estado global con redux, la implementación de enrutamiento y navegación, hasta la realización de operaciones crud con back4app objetivo crear una plataforma de blogs completamente funcional donde los usuarios puedan crear, editar y eliminar publicaciones de blog, y los lectores puedan ver y comentar en las publicaciones esta aplicación utilizará reactjs para el frontend y back4app para las operaciones de backend características clave autenticación de usuarios creación, edición y eliminación de publicaciones visualización de publicaciones y comentarios gestión del estado global con redux enrutamiento y navegación utilizando react router requisitos previos conocimientos básicos de javascript, reactjs y redux una cuenta activa de back4app node js y npm instalados en tu entorno local 2\ configuración inicial 2 1 configurando el proyecto reactjs paso 1 crea un nuevo proyecto react usando create react app paso 2 inicia el servidor de desarrollo 2 2 configurando back4app paso 1 inicia sesión en tu cuenta de back4app y crea una nueva aplicación paso 2 en el panel de control de back4app, navega a "core > browser" y crea las siguientes clases publicación (para almacenar publicaciones de blog) comentario (para almacenar comentarios en publicaciones) paso 3 obtén tu id de aplicación y clave de javascript de la sección "configuración de la app > seguridad y claves" 2 3 instalando paquetes necesarios instala las dependencias necesarias para la integración de react, redux y back4app npm install parse @reduxjs/toolkit react redux react router dom 2 4 configurando el sdk de parse paso 1 crea un archivo llamado parseconfig js en la src carpeta y configura el sdk de parse import parse from 'parse'; parse initialize("your app id", "your javascript key"); parse serverurl = 'https //parseapi back4app com/'; export default parse; 3\ desarrollo de la plataforma de blogging 3 1 estructura del proyecto organiza el proyecto con la siguiente estructura src/ \| components/ \| | postlist js \| | postdetails js \| | postform js \| | commentlist js \| redux/ \| | store js \| | postslice js \| | commentslice js \| parseconfig js \| app js \| index js organiza el proyecto con la siguiente estructura 3 2 implementando redux para la gestión del estado global paso 1 configura la tienda de redux en redux/store js import { configurestore } from '@reduxjs/toolkit'; import postreducer from ' /postslice'; import commentreducer from ' /commentslice'; export const store = configurestore({ reducer { posts postreducer, comments commentreducer, }, }); paso 2 crea un slice para gestionar publicaciones en redux/postslice js import { createslice, createasyncthunk } from '@reduxjs/toolkit'; import parse from ' /parseconfig'; export const fetchposts = createasyncthunk('posts/fetchposts', async () => { const query = new parse query('post'); const results = await query find(); return results map(post => ({ id post id, title post get('title'), content post get('content'), })); }); const postslice = createslice({ name 'posts', initialstate { list \[], status null, }, reducers {}, extrareducers { \[fetchposts fulfilled] (state, action) => { state list = action payload; state status = 'success'; }, }, }); export default postslice reducer; paso 3 crea un slice para gestionar comentarios en redux/commentslice js import { createslice, createasyncthunk } from '@reduxjs/toolkit'; import parse from ' /parseconfig'; export const fetchcomments = createasyncthunk('comments/fetchcomments', async (postid) => { const query = new parse query('comment'); query equalto('post', { type 'pointer', classname 'post', objectid postid }); const results = await query find(); return results map(comment => ({ id comment id, content comment get('content'), postid postid, })); }); const commentslice = createslice({ name 'comments', initialstate { list \[], status null, }, reducers {}, extrareducers { \[fetchcomments fulfilled] (state, action) => { state list = action payload; state status = 'success'; }, }, }); export default commentslice reducer; 3 3 implementando el enrutamiento con react router paso 1 configura el enrutamiento en app js import { browserrouter as router, route, switch } from 'react router dom'; import postlist from ' /components/postlist'; import postdetails from ' /components/postdetails'; import postform from ' /components/postform'; function app() { return ( \<router> \<switch> \<route path="/" exact component={postlist} /> \<route path="/post/\ id" component={postdetails} /> \<route path="/new post" component={postform} /> \</switch> \</router> ); } export default app; 3 4 creando componentes paso 1 crea el postlist componente para mostrar todas las publicaciones del blog import react, { useeffect } from 'react'; import { usedispatch, useselector } from 'react redux'; import { fetchposts } from ' /redux/postslice'; import { link } from 'react router dom'; const postlist = () => { const dispatch = usedispatch(); const posts = useselector(state => state posts list); useeffect(() => { dispatch(fetchposts()); }, \[dispatch]); return ( \<div> \<h1>blog posts\</h1> \<link to="/new post">create new post\</link> \<ul> {posts map(post => ( \<li key={post id}> \<link to={`/post/${post id}`}>{post title}\</link> \</li> ))} \</ul> \</div> ); }; export default postlist; paso 2 crear el postdetails componente para mostrar los detalles de una publicación específica import react, { useeffect } from 'react'; import { useparams } from 'react router dom'; import { usedispatch, useselector } from 'react redux'; import { fetchcomments } from ' /redux/commentslice'; const postdetails = () => { const { id } = useparams(); const dispatch = usedispatch(); const comments = useselector(state => state comments list); useeffect(() => { dispatch(fetchcomments(id)); }, \[dispatch, id]); return ( \<div> \<h1>post details\</h1> \<p>comments \</p> \<ul> {comments map(comment => ( \<li key={comment id}>{comment content}\</li> ))} \</ul> \</div> ); }; export default postdetails; paso 3 crear el postform componente para crear y editar publicaciones import react, { usestate } from 'react'; import parse from ' /parseconfig'; import { usehistory } from 'react router dom'; const postform = () => { const \[title, settitle] = usestate(''); const \[content, setcontent] = usestate(''); const history = usehistory(); const handlesubmit = async (e) => { e preventdefault(); const post = parse object extend('post'); const post = new post(); post set('title', title); post set('content', content); try { await post save(); history push('/'); } catch (error) { console error('error creating post ', error); } }; return ( \<div> \<h1>create new post\</h1> \<form onsubmit={handlesubmit}> \<div> \<label>title\</label> \<input type="text" value={title} onchange={(e) => settitle(e target value)} /> \</div> \<div> \<label>content\</label> \<textarea value={content} onchange={(e) => setcontent(e target value)} /> \</div> \<button type="submit">submit\</button> \</form> \</div> ); }; export default postform; 4\ pruebas y despliegue 4 1 probar la aplicación paso 1 prueba la aplicación localmente para asegurarte de que todas las funciones están funcionando prueba crear, editar y eliminar publicaciones verifica que los comentarios se muestren correctamente para cada publicación prueba la navegación entre diferentes rutas 4 2 construir la aplicación para producción paso 1 construye la aplicación para producción npm run build paso 2 despliega la aplicación construida en un servicio de alojamiento como back4app containers 4 3 configurando back4app para producción back4app ya es un entorno listo para producción, pero puedes revisar tu código y actualizar cualquier variable de entorno y claves necesarias 5\ conclusión resumen este tutorial te guió a través de la creación de una plataforma de blogs completa spa utilizando reactjs y back4app aprendiste cómo configurar y gestionar un backend en back4app, manejar el estado global con redux, implementar el enrutamiento con react router y realizar operaciones crud esta plataforma ahora puede ser ampliada con características adicionales como autenticación de usuarios, sistemas de comentarios avanzados y más próximos pasos explora agregar autenticación de usuarios con back4app mejora el sistema de comentarios con actualizaciones en tiempo real implementa características de seo para mejorar la visibilidad en motores de búsqueda 6\ código fuente y recursos adicionales repositorio de github proporciona un enlace al código fuente completo de la aplicación en github recursos adicionales documentación de reactjs https //reactjs org/docs/getting started html documentación de redux https //redux js org/ documentación de react router https //reactrouter com/ documentación de back4app https //www back4app com/docs 7\ preguntas frecuentes / solución de problemas problemas comunes error al conectar a back4app verifica tu id de aplicación y la clave de javascript estado de redux no se actualiza asegúrate de que tus acciones y reductores estén configurados correctamente soporte si encuentras algún problema, puedes contactar al soporte de back4app o hacer preguntas en comunidades de desarrolladores relevantes