⊗jsrxPmRDEF 24 of 57 menu

Formulario para editar datos en Redux

Ahora tenemos un reductor para cambiar datos en el store. En esta lección crearemos un formulario con el cual podremos editar los datos del producto.

Abramos nuestra aplicación de productos y creemos en la carpeta products el archivo EditProductForm.jsx. La creación del componente EditProductForm será análoga a NewProductForm, con la excepción de algunas diferencias en las que nos detendremos. Por lo tanto, copie completamente el código de NewProductForm.jsx y péguelo en el archivo creado EditProductForm.jsx. Ahora comencemos en orden.

Elimine de la importación nanoid, aquí no necesitamos generar id. Reemplace la importación productAdded por productUpdated, porque aquí usaremos la action para actualizar, y no para agregar producto.

A continuación, cambiaremos el nombre de la función de nuestro componente de NewProductForm a EditProductForm.

Antes de que establezcamos los estados locales en la función EditProductForm para name, desc, price y amount, insertemos unas cuantas líneas de código más. Como mencionamos anteriormente, aquí no necesitamos generar id. Ahora nuestra tarea es obtenerlo de los datos del producto a modificar. Ya hemos hecho esto al crear una página separada para el producto. Entonces, obtengamos el id usando el hook useParams, y luego encontremos el producto que necesitamos, usando el hook useSelector (no olvide importar ambos hooks al principio del archivo):

let params = useParams() const { productId } = params const product = useSelector((state) => state.products.find((product) => product.id === productId) )

Después de esto, cambiaremos el bloque con la declaración de los estados locales. Ahora necesitamos establecer como valor inicial los datos del producto obtenidos del store. Así se verá el primer estado, modifique los tres restantes usted mismo:

const [name, setName] = useState(product.name)

Después de asignar la variable para useDispatch agreguemos una línea más de código esta vez para el hook useNavigate. Lo usaremos para regresar a la página del producto cuando el usuario guarde los cambios realizados en el formulario:

const navigate = useNavigate()

También importe este hook al principio del archivo:

import { useNavigate, useParams } from 'react-router-dom'

A continuación tenemos los manejadores para los campos de entrada. Y después de ellos necesitamos ajustar la función onSaveProductClick. Ahora en ella, al hacer clic, enviaremos la acción productUpdated con el id obtenido y los datos modificados en forma de objeto. Después agregaremos nuestro navigate, para transitar a la página del producto modificado:

const onSaveProductClick = () => { if (name && desc && price && amount) { dispatch( productUpdated({ id: productId, name, desc, price, amount, }) ); navigate(`/products/${productId}`); } }

Solo queda en nuestro retorno de marcado encontrar la línea:

<h2>Add a New Product</h2>

Y reemplazarla por:

<h2>Edit Product</h2>

Abra su aplicación de estudiantes. Cree el archivo EditStudentForm.jsx por analogía con NewStudentForm.jsx. Introduzca en él los cambios, como se muestra en la lección.

Español
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Usamos cookies para el funcionamiento del sitio, análisis y personalización. El procesamiento de datos se realiza de acuerdo con la Política de privacidad.
aceptar todas configurar rechazar