【发布时间】:2016-12-22 08:41:53
【问题描述】:
我有动态 JSON 数据,并且有一个自定义方法来通过 JSON 在页面上动态呈现表单。 JSON 模式的原因是构建各种未预定义的表单。
我已经连接了 Redux,以便将下面的 schema 和 formValues 分配为这个类的 props。因此,表单使用正确的标签、正确的输入字段类型等正确呈现。当字段上发生 onChange 事件时,应用程序状态(在 formData 下)正在正确更新。但我注意到,当应用程序状态中的 formData 发生变化时,整个表单都会重新呈现,而不仅仅是“特定字段”。这是因为我像这样将表单值存储为 formData 下的对象吗?我该如何避免这个问题?
formData = {
userName: 'username',
firstName: 'firstName
}
示例架构
const form = {
"fields":[
{
"label":"Username",
"field_type":"text",
"name":"username"
},
{
"label":"First Name",
"field_type":"text",
"name":"firstName"
}
]
}
Redux 状态
const reducer = combineReducers({
formSchema: FormSchema,
formData: Form
});
//渲染方法
render() {
const { fields } = this.props.form,
forms = fields.map(({label, name, field_type, required }) => {
const value = value; //assume this finds the correct value from the "formData" state.
return (
<div key={name}>
<label>{label}</label>
<input type={field_type}
onChange={this.onChange}
value={value}
name={name} />
</div>
);
})
}
//onchange方法(对于受控的表单输入,更新formData应用状态中的字段)
onChange(event) {
this.props.dispatch(updateFormData({
field: event.target.name,
value: event.target.value
}));
}
【问题讨论】:
标签: javascript reactjs redux react-redux