React Crash Course para principiantes, Parte 4

En este tutorial final de nuestra serie React, crearemos un nuevo  Componente para agregar nuevas películas manualmente a través de un formulario personalizado. Esto cerrará el desarrollo de la aplicación 'Movie Mojo'.

El código para el proyecto final está disponible para descargar a través del enlace a la derecha de la pantalla (es posible que deba desplazarse hacia abajo). Más adelante, le proporcionaré instrucciones paso a paso sobre cómo poner en marcha el proyecto en su sistema..

Crear el componente AddMovie

los  el componente genera un formulario para permitir a los usuarios ingresar manualmente los detalles de una película individual y agregarla a las películas existentes en la galería una vez que se haya enviado el formulario.

El formulario requiere tres entradas de texto para título, año e imagen de póster; más un área de texto para la descripción de la película. En / src / components /, crear un nuevo archivo llamado AddMovie.js y añade lo siguiente:

importar React, Componente desde 'reaccionar'; La clase AddMovie extiende el componente render () return ( 

Agregar una pelicula

this.title = input type = "text" placeholder = "Title" /> this.year = input type = "text" placeholder = "Year" /> this.poster = input type = "text" placeholder = "Poster" />
); exportar por defecto AddMovie;

El reaccionar árbitro atributo almacena una referencia a cada campo de entrada de formulario como una propiedad de clase de componente. Usaremos estas referencias en breve como una forma de capturar fácilmente los valores del campo de entrada.

En primer lugar, sin embargo, agregue los siguientes estilos a App.css Para hacer la forma un poco más estética:

/ * estilos de forma de película * / .movie-form width: 250px; margen: 0 auto;  entrada de .movie-form, .movie-form textarea width: 250px; tamaño de fuente: 14px; relleno: 5px; margen: 5px;  .movie-form button font-size: 16px; relleno: 4px; margen: 10px 10px 30px 10px; 

En App.js, añade el  componente dentro del cierre

 elemento de envoltura:

Luego, en la parte superior del archivo, importe el  componente para que esté disponible.

importar AddMovie desde './AddMovie';

Tu aplicación 'Movie Mojo' ahora debería mostrar un formulario hacia la parte inferior de la ventana del navegador.

Necesitamos especificar un método de devolución de llamada que se ejecute cada vez que se envíe el formulario, que podemos usar para crear una nueva película. Agrega esto a la

 elemento:

onSubmit = (e) => this.addNewMovie (e)

Luego, agregue el addNewMovie () método a la cima de la  clase de componente:

addNewMovie (e) e.preventDefault (); var movie = title: this.title.value, year: this.year.value, description: this.description.value, poster: this.poster.value; console.log (película); 

La primera tarea es evitar que se active el evento de envío predeterminado, lo que hacemos con e.preventDefault (). De lo contrario, cuando se envíe el formulario, la página web se actualizará automáticamente, lo cual no es lo que queremos.

Luego, creamos un nuevo objeto de película al tomar los valores del campo de entrada del formulario que almacenamos convenientemente como propiedades de clase de componente anteriormente.

UNA console.log () comando sale el película Objeto para que podamos probar que se está creando correctamente al enviar el formulario.

Una vez que esté satisfecho el película objeto se está generando correctamente, siga adelante y elimine el console.log () llamada.

Para poder mostrar la nueva película en nuestra galería, necesitamos agregarla a la película objeto de estado Una vez hecho esto, React se encargará de actualizar el DOM para nosotros.

Para lograr esto, crea un nuevo método en App.js (donde vive el objeto de estado de la aplicación) para manejar la adición de una película al estado actual.

addMovieToGallery (movie) console.log ('mooooooovie', movie); 

No te olvides de enlazar el nuevo método a la esta por lo que está disponible en toda la clase.

this.addMovieToGallery = this.addMovieToGallery.bind (this);

Por cierto, puede que se pregunte por qué necesitábamos hacer esto aquí, pero no para el addNewMovie () método que hemos añadido a la  componente de arriba Este es un efecto secundario de usar una función de flecha ES6, ya que se enlaza automáticamente esta para ti. Vale la pena recordar este pequeño truco, ya que reduce la complejidad del código, al tiempo que mejora la legibilidad de su código..

Usar addMovieToGallery () en nuestro  código de componente secundario, simplemente le transmitimos una referencia mediante props. En App.js, actualizar el  llama a ser

De nuevo en AddMovie.js, actualizar el addNewMovie () Método para pasar el objeto de la película a la addMovieToGallery () método a través del addMovie apoyo que acabamos de crear.

addNewMovie (e) e.preventDefault (); var movie = title: this.title.value, year: this.year.value, description: this.description.value, poster: this.poster.value; this.props.addMovie (película); 

Ahora, cuando completamos el formulario, obtenemos el objeto de la película en la consola, como antes, pero esta vez es a través de addMovieToGallery () método en el  componente.

Eliminar el console.log () comando en addMovieToGallery () y reemplácelo con el siguiente código para agregar los detalles de la película ingresados ​​a la películas objeto de estado:

addMovieToGallery (movie) var ts = Date.now (); var newMovie = ; newMovie ['movie' + ts] = movie; var currentMovies = … this.state.movies; var newMovies = Object.assign (currentMovies, newMovie); this.setState (movies: newMovies); 

Esto es bastante similar a lo que hicimos en la tercera parte para el loadAdditionalMovies () método. La principal diferencia es que se debe generar una clave única, sobre la marcha, para cada entrada de película adicional. Esto se logra utilizando la marca de tiempo actual como clave única y agregándola a película.

Esto dará como resultado que cada película adicional, agregada a través del formulario, tenga claves únicas.

movie1501686019706 movie1501686027906 movie1501686032929

… y así.

Abra la aplicación 'Movie Mojo' en el navegador y agregue dos nuevas películas a la galería a través del formulario. Hay imágenes adicionales de póster de película añadidas a la ./ public / posters / carpeta para mayor comodidad, para que pueda probar fácilmente agregar películas a la galería. Puedes acceder a estos descargando el proyecto de aplicación finalizado..

Cada vez que envíe el formulario, se agregará una película adicional a la galería.!

Instalando Movie Mojo

Haga clic en el enlace a la derecha (aproximadamente a la mitad de la página) para descargar el archivo zip del proyecto 'Movie Mojo' finalizado. Una vez extraído, abra una ventana de línea de comando y navegue hasta película-mojo directorio, y escriba:

npm instalar

Esto tomará unos minutos para descargar todos los módulos 'Node.js' necesarios para ejecutar el proyecto.

Luego escriba:

npm start

Esto compilará la aplicación React y la abrirá en un navegador a través de un mini servidor web dedicado.

Conclusión

Hemos cubierto mucho en esta serie de tutoriales de cuatro partes, así que felicitaciones si lo ha hecho todo el tiempo y ha seguido el código.

Ahora deberías sentirte cómodo con los conceptos básicos de React, y esto te dará la confianza para continuar y construir aplicaciones más complicadas..

Recomiendo descargar el proyecto 'Movie Mojo' y examinar el código fuente para asegurarse de que entiendes cómo encaja todo.

Hay muchas posibilidades de ampliar la aplicación, así que, ¿por qué no intentar crear algunas funciones adicionales? Esta es también una excelente manera de consolidar su aprendizaje, al intentar implementar nuevos elementos React en la aplicación..

Aquí hay algunas ideas que podría considerar agregar:

  • Añadir interfaz de usuario y código para eliminar películas de la galería.
  • Permitir la clasificación por título de película, año, etc..
  • Introducir un sistema de calificación..

Me encantaría escuchar cualquier comentario que pueda tener sobre este tutorial a través de los comentarios a continuación. ¿Le resultó fácil de seguir o hubo partes con las que tuvo dificultades? Siempre estoy buscando mejorar mis tutoriales, por lo que los comentarios siempre son bienvenidos.

Happy React codificar!