動的なJSONデータがあり、JSONを経由してページ上にフォームを動的にレンダリングするカスタムメソッドがあります。 JSONスキーマの理由は、あらかじめ定義されていないさまざまなフォームを作成するためです。React with Redux状態で再レンダリングされるフォーム全体
以下のスキーマとformValuesがこのクラスの小道具として割り当てられるようにReduxを接続しました。したがって、フォームは正しいラベル、正しい入力フィールドのタイプなどで正しく表示されます。onChangeイベントがフィールドで発生すると、アプリケーションの状態(formDataの下)が正しく更新されています。しかし、私は、アプリケーションの状態でformDataが変更されたときに、フォーム全体が「特定のフィールド」だけではなく、レンダリングされることに気づいています。これはformDataの下にオブジェクトとしてフォームの値を格納するためですか?どうすればこの問題を回避できますか?
formData = {
userName: 'username',
firstName: '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方法
const form = {
"fields":[
{
"label":"Username",
"field_type":"text",
"name":"username"
},
{
"label":"First Name",
"field_type":"text",
"name":"firstName"
}
]
}
(制御されたフォーム入力のためのフィールドを更新しますformDataアプリケーション状態)
onChange(event) {
this.props.dispatch(updateFormData({
field: event.target.name,
value: event.target.value
}));
}
@ rom-grk-はい、value属性は状態。私は冗長さのためにここにすべてのコードを入れなかった。私はshouldComponentUpdate()を使用して上記の提案を行い、小道具が変更されたコンポーネントのみを更新しました。 – Dhana