【发布时间】:2020-02-25 08:31:05
【问题描述】:
我有一个如下所示的 react 组件。
表单输入由onInputChange函数处理,表单提交由onFormSubmit处理
function RegisterForm() {
// formData stores all the register form inputs.
const [formData, setFormData] = useState(registerDefault);
const [errors, posting, postData] = useDataPoster();
function onInputChange(event: ChangeEvent<HTMLInputElement>) {
let update = { [event.target.name]: event.target.value };
setFormData(oldForm => Object.assign(oldForm, update));
}
function onFormSubmit(event: FormEvent<HTMLFormElement>) {
event.preventDefault();
const onSuccess: AxiosResponseHandler = response => {
setFormData(Object.assign(formData, response.data));
};
postData("/api/register", formData, onSuccess);
}
return (
<form onSubmit={onFormSubmit}>
<FormTextInput
name="full_name"
label="Name"
errors={errors.full_name}
onChange={onInputChange}
/>
<FormTextInput
name="email"
label="Email address"
type="email"
errors={errors.email}
onChange={onInputChange}
/>
<button type="submit" className="theme-btn submit" disabled={posting}>
{posting && <span className="fas fa-spin fa-circle-notch"></span>}
Create
</button>
</form>
);
}
我的应用程序有 50 多个类似的表单,我想知道是否必须将这两个功能复制粘贴到所有其他表单上。 onInputChange 不会有任何变化,并且 url 是 onFormSubmit 中唯一的变量。
我正在考虑一种基于类的方法,将setFormData 和postData 作为属性,将相关函数作为类方法。但在这种情况下,我必须 bind 带有类实例的处理程序,以便处理程序具有有效的 this 实例。
还有其他方法可以做到这一点吗?您如何避免在所有表单组件中重复这两个代码块?
谢谢
【问题讨论】:
标签: javascript reactjs