Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

145
Visualizações
¿Cómo puedo agregar controladores de eventos en un componente React reutilizable creado a partir de una matriz de objetos?

Estoy tratando de crear componentes reutilizables para un formulario de dirección dinámica. Necesito agregar controladores de eventos personalizados a los componentes. Actualmente, cada campo de entrada en el formulario de dirección se crea a partir de la siguiente matriz de objetos. ¿Puedo agregar controladores de eventos personalizados a la siguiente matriz o debo considerar otro enfoque para lograrlos?

Campos de direcciones.js

 export const AddressFields =[ {name:"FirstName", type:"text", title:"First Name", id:"AddressFirst" ,validate:(data)=>isNaN(data)}, {name:"LastName", type:"text", title:"Last Name", id:"AddressLast",validate:(data)=>isNaN(data)}, {name:"AddressLine1", type:"text", title:"Address Line 1", id:"Address1",validate:(data)=>isNaN(data)}, {name:"AddressLine2", type:"text", title:"Address Line 2", id:"Address2",validate:(data)=>isNaN(data)}, {name:"City", type:"text", title:"City", id:"AddressCity",validate:(data)=>isNaN(data)}, {name:"Pin", type:"number", title:"Pin Code", id:"AddressPin",validate:(data)=>isNaN(data)}, {name:"State", type:"text", title:"State", id:"AddressState",validate:(data)=>isNaN(data)}, {name:"Phone", type:"number", title:"Phone ", id:"AddressPhone",validate:(data)=>isNaN(data)}, {name:"Email", type:"email", title:"Email ", id:"AddressEmail",validate:(data)=>isNaN(data)},];

AddressForm.js

 import Input from "../UI/Input" import { AddressFields } from "./AddressFields" const AddressForm = () => { return ( <div id="ShippingAddress" className=""> {AddressFields.map((addr)=>{ return <Input name={addr.name} id={addr.id} title={addr.title} type={addr.type}/> })} </div> ) } export default AddressForm

Entrada.js

 import { useState } from "react"; const Input = (props) => { const [isValid,setIsValid]=useState(true); return ( <div> <label for={props.name}>{props.title}</label> <input id={props.id} name={props.name} type={props.type} onBlur={isValid=props.validate()} /> </div> ) } export default Input
about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

Creo que está bien agregar sus funciones de controlador a la matriz de datos, especialmente si es solo un proyecto pequeño. Al menos parece que no es raro.

Pero si prefiere seguir más estrictamente el principio de separar datos y lógica (como hago yo), entonces no debe agregar funciones a la matriz de datos, sino solo 'algo' que identifique lo que sería válido.

Además, tenga en cuenta que si está utilizando funciones dentro de matrices de datos, la matriz de datos ya no se puede encadenar , si eso es importante para usted (por ejemplo, para pasarla por la red, los trabajadores, el almacenamiento, ...).

Si los requisitos se vuelven más complicados , un identificador para el requisito ya no puede ser una clave simple (como "isNaN" ), sino que necesitará algún tipo de 'sintaxis' personalizada, por ejemplo, "shouldBeBetween:10,99" , que necesita ser analizado

Si se vuelve muy complicado , supongo que se debe considerar permanecer con las funciones dentro de la matriz de datos en aras de la simplicidad (si no es necesario stringify), o usar una biblioteca que admita las validaciones deseadas.

ejemplo para separar datos y lógica

(para esto necesitas conocer todos los validadores posibles de antemano)

 export const AddressFields = [ { name: "FirstName", ..., validate: [ 'isNaN', // <-- some 'key' to identify the requirement ... // <-- optionally more additional requirements ] }, ];

Entonces tendría alguna colección de todos los validadores posibles, por ejemplo:

 const validators = { isNaN: ( data ) => isNaN( data ), // ... more additional validators };

Para cada entrada, crearía y llamaría a los validadores necesarios, por ejemplo:

 const createValidator = function( validatorKeys ){ return function( data ){ return validatorKeys.every( key => { const currentValidator = validators.hasOwnProperty( key ) && validators[ key ]; return currentValidator && currentValidator( data ); }) } } const Input = (props) => { const [ isValid, setIsValid ] = useState( true ); const [ value, setValue ] = useState(); const validatorForThisItem = createValidator( props.validate ); return ( <div> <label for={ props.name }>{ props.title }</label> <input id={ props.id } name={ props.name } type={ props.type } onBlur={ () => { setIsValid( validatorForThisItem( value ) ); }} /> </div> ) }
about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda