es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo puedo dividir mi código en dos partes sin escribir el mismo código dos veces?

El código que se muestra a continuación está compuesto por “dos partes”:

  1. El lugar donde se definen todos los estados y manejadores,
  2. La parte del código que se muestra en la pantalla.

Considero que el código quizás es demasiado grande para un solo archivo. Mi pregunta es: ¿cómo puedo dividir el código dado en dos?

Por ejemplo, un archivo contiene la primera parte (de arriba) y el otro contiene la segunda parte (también de arriba).

“`import { useState } from “react”;
import './style.css';

export default function UserInput() {
const [person,setPerson] = useState({firstName:'',age:''});
const [people,setPeople] = useState([]);

const handleChange = (e) => {
const name = e.target.name;
const value = e.target.value;
setPerson({…person, [name]: value});
}
const handleSubmit = (e) => {
e.preventDefault();
if(person.firstName && person.age){
const newPerson = {…person,id: new Date().getDate().toString()}
setPeople([…people,newPerson]);
setPerson({firstName:'',age:''});
}
else{
console.log('¡Campo vacío!');
}
}

const handleDelete = () => {
setPeople([]);
setPerson({firstName:'',age:''});
}

return(
<>
<form classname='container' autocomplete="off">
<div>
<label htmlfor='firstName' classname='label'>Nombre: </label>
<input type='text' classname='input' id='firstName' name='firstName' value="{person.firstName}" onchange="{handleChange}/"> <br>
<label htmlfor='age' classname='label'>Edad: </label>
<input type='text' classname='input-age' id='age' name='age' value="{person.age}" onchange="{handleChange}/"> <br>
<button classname='btn' type='submit' onclick="{handleSubmit}">Agregar</button>
<button classname='btn' type='button' onclick="{handleDelete}">Limpiar</button>
</div>
</form>

<pre><code> {
people.map((person)=>{
return(
<div classname='list' key="{person.id}">
{person.firstName}, {person.age}
</div>
)
})
}
</code></pre>

);
}“`

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para dividir el código proporcionado en dos archivos, podemos separar la sección de estado y controladores de la sección JSX.

    1. En un nuevo archivo, llamémoslo ‘useStateHandlers.js’, podemos definir los estados y controladores como se muestra a continuación:
    import { useState } from "react";
    
    const useStateHandlers = () => {
      const [person, setPerson] = useState({firstName:'',age:''});
      const [people, setPeople] = useState([]);
    
      const handleChange = (e) => {
        const name = e.target.name;
        const value = e.target.value;
        setPerson({...person, [name]: value});
      }
    
      const handleSubmit = (e) => {
        e.preventDefault();
        if(person.firstName && person.age){
          const newPerson = {...person,id: new Date().getDate().toString()}
          setPeople([...people,newPerson]);
          setPerson({firstName:'',age:''});
        }
        else{
          console.log('¡Campo vacío!')
        }
      }
    
      const handleDelete = () => {
        setPeople([]);
        setPerson({firstName:'',age:''});
      }
    
      return { person, people, handleChange, handleSubmit, handleDelete };
    }
    
    export default useStateHandlers;
    
    1. En el archivo original, podemos importar estas funciones de estado y controladores:
    import React from "react";
    import useStatedHandlers from "./useStateHandlers";
    import "./style.css";
    
    export default function UserInput() {
      const { person, people, handleChange, handleSubmit, handleDelete } = useStatedHandlers();
    
      return(
        <>
          <form classname='container' autocomplete="off">
            <div>
              <label htmlfor='firstName' classname='label'>Nombre: </label>
              <input type='text' classname='input' id='firstName' name='firstName' value="{person.firstName}" onchange="{handleChange}/"> <br>
              <label htmlfor='age' classname='label'>Edad: </label>
              <input type='text' classname='input-age' id='age' name='age' value="{person.age}" onchange="{handleChange}/"> <br>
              <button classname='btn' type='submit' onclick="{handleSubmit}">Agregar</button>
              <button classname='btn' type='button' onclick="{handleDelete}">Limpiar</button>
            </div>
          </form>
    
          {
            people.map((person)=>{
              return(
                <div classname='list' key="{person.id}">
                  {person.firstName}, {person.age}
                </div>
              )
            })
          }
    
      );
    }
    

    Ahora hemos separado los estados y controladores de la parte del código que se muestra en la pantalla. Esto resultará en un código más organizado y legible.

Comments are closed.