【发布时间】:2022-01-08 06:19:24
【问题描述】:
我正在尝试为动态地址表单创建可重复使用的组件。我需要向组件添加自定义事件处理程序。目前,地址表单中的每个输入字段都是从以下对象数组创建的,我可以将自定义事件处理程序添加到以下数组还是需要考虑另一种方法来实现这些。
AddressFields.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
Input.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
【问题讨论】:
-
当然您可以添加处理程序,您已经使用
onBlur。你希望你的处理程序做什么?即,您有什么问题? -
@windowsill 这是创建可重用组件的正确方法它有什么缺点吗,我该如何处理 onChange 处理和输入验证?
标签: javascript reactjs dynamic components reusability