Finalmente llegamos a la última parte de esta pequeña introducción para reaccionar. Lógicamente, hemos dejado muchas cosas en preparación, por lo que no excluyo más publicaciones en el futuro en las que nos centraremos en diferentes aspectos de la pila de desarrollo JS, pero creo que con esta última publicación ya tendrá las nociones necesarias para crecer y mejorar solo. La semana pasada llegué a un punto muy interesante. Nuestro objetivo era crear una pequeña aplicación con múltiples contadores, que puede agregar o eliminar según lo desee:
Múltiples medidores implementados con componentes React y un PlayPress basado en Redux.
Hasta el final de la última publicación, teníamos una tienda increíble para seguir el estado de nuestra aplicación. Esto significa que ya tenemos todos los elementos básicos que necesitamos finalmente para construir la interfaz de usuario.
Hoy veremos cómo conectar los componentes React con nuestra tienda de WordPress en función de Redux, para que la interfaz muestre la condición que tenemos en la tienda y para que las interacciones del usuario actualicen la condición respectiva. Solución en la tarea de la semana pasada, pero antes de hacerlo, revisemos rápidamente los temas que lo dejamos la semana pasada. Esencialmente, le pedí que restableciera la tienda, para no usar un diccionario, sino varios objetos: Constitestore = {x: 1, y: 2,}; const Noves = [{id: ‘x’, valor: 1}, {id: ‘y’, valor: 2},]; ¿Qué cambios hizo para aplicar esta actualización a su tienda? Bueno, ¡revisemos todos rápidamente!
Acciones Las acciones en la tienda son exactamente las mismas que las que ya tenía, así que espero que no hayas cambiado nada aquí, porque no había necesidad. Como ha visto la semana pasada, las acciones no actualizan (ni acceden) la tienda directa y, por lo tanto, cualquier modificación de la estructura básica de nuestra tienda no tendrá ningún efecto aquí. La acción son funciones simples que generan un objeto que indica una “solicitud de actualización” y eso es exactamente lo que tenemos en nuestros archivos.js: exportación de funciones addcounter (contraid) {return {type: ‘add_counter’, contraid,}; } Exportar función removeCounter (contraid) {return {type: ‘remove_counter’, contraid,}; } Exportar función setCounterValue (contraid, valor) {return {type: ‘set_counter_value’, contraid, valor,}; } Reductor Reductor es la función responsable de actualizar el estado en función del estado anterior y una acción enviada. En este caso, debido a que queremos cambiar la estructura de datos que almacena el estado de nuestra aplicación, debemos reiniciar el reductor:
Importar {mapa, encontrar, sin} de ‘lodash’; Exportar Función predeterminada Reducer (state = [], Action) {switch (action.type) {Houses ‘add_counter’: return [… state, {id: action.counterid, valor: 0},]; casas ‘remve_counter’: return sin (estado, find (estado, {id: action.counterid})); Houses ‘set_counter_value’: return map (state, (contador) => action.id === Action.counterid? {… contador, valor: action.value}: contador); } Estados de retorno; } Como puede imaginar, todo lo que tuvimos que hacer aquí era cambiar el valor predeterminado del objeto vacío {} en una matriz vacía []. Luego, simplemente debemos configurar cada casa en nuestro bloque Switch, para que las acciones actualicen correctamente la nueva tienda. Esencialmente, esto significa agregar, eliminar o actualizar objetos de la matriz. Como vimos la semana pasada, un selector recibe el estado actual de nuestra aplicación y cualquier otro parámetro que pudiéramos necesitar y se hace cargo del valor solicitado de este estado. Debido a que hemos cambiado la forma en que se almacena el estado, también debemos cambiar el cuerpo de nuestros selectores: import {map, encontrar} de ‘lodash’; Exportar función getCounterids (estado) {return map (estado, ‘id’); } Función de exportación getCounterValue (State, CounterId) {const contador = find (state, {id: contraid}) || {}; Contador de retorno. Valor; } De nuevo, no es gran cosa … pero espero que lo entiendas bien
En nuestro ejemplo, solo teníamos dos selectores, por lo que tenemos que volver a establecer solo dos funciones. El primero es responsable de devolver los identificadores de todos nuestros medidores, que podemos hacer muy fácilmente con MAP. El segundo devuelve el valor del medidor especificado (o no se puede encontrar contra CounterId en nuestra tienda), por lo que todo lo que tiene que hacer es buscar el medidor cuya identificación es CounterId utilizando la función de ayuda de LODASH y devolver el controte relacionado con el contador relacionado con (Si alguna). Una última razón por la que le pedí que cambiara su tienda fue para aprender la siguiente lección: la principal ventaja de usar tiendas como esta es que se comporta como cajas negras: puede cambiar completamente la forma en que se organiza internamente y todo funcionará según Expectativas. , siempre que su interfaz (es decir, acciones y selectores) no cambie. Haciendo que los componentes de nuestra interfaz de uso queremos que nuestros usuarios agregen y eliminen los medidores a voluntad:
La aplicación que queremos construir hoy.
y administrar cada medidor independiente entre sí. ¿Qué cambios debemos aplicar a lo que tuvimos en la interfaz de usuario que hemos implementado en la Parte 2? Bueno, obviamente debe (1) cambiar cada medidor para incluir un botón de borrado y (2) cambiar la aplicación para que haya un nuevo botón para agregar nuevos contadores. ¡Hagamos eso! Primero, abra el archivo SRC/Components/Counter.js y agregue el nuevo botón Eliminar y un nuevo propuesta para que cuando el usuario haga clic en el botón, se elimine el medidor:
Const contador = ({value, MorryCreas, OnDecrease, OnDelete) => (
contador: {valor}
Copyright statement: Unless otherwise noted, this article is Collected from the Internet, please keep the source of the article when reprinting.