Это не плохой способ сделать это. Вы, вероятно, должны хранить значения в локальном состоянии компонента (например, setState
) или в хранилище Redux / Mobx / что угодно, если у вас есть это.
Как говорится, если у вас много элементов управления и вы этого не делаете Если вы хотите добавить отдельный обработчик для каждого из них, компоненты Fabri c имеют в основном похожие API для своих обработчиков onChange
, поэтому вы можете иметь один обработчик и добавить идентификатор для элемента, чтобы его было проще хранить.
Что-то вроде:
class MyForm extends React.Component<MyFormProps, MyFormState> {
constructor(props: MyFormProps) {
super(props);
this.state = {
formFields: {...defaultFormValues} // you can imagine having an object of default values
};
}
private _onChangeHandler(ev: React.FormEvent<HTMLElement | HTMLInputElement>, newValue: any) => {
const formFields = {...this.state.formFields};
formFields[ev.target.dataset.id] = newValue;
this.setState({formFields});
}
public render() {
return (
<form>
<TextField data-id="formelem1" onChange={this._onChangeHandler} />
<TextField data-id="formelem2" onChange={this._onChangeHandler} />
<CheckBox data-id="checkbox1" onChange={this._onChangeHandler} />
</form>
);
}
}
Обратите внимание, что единственным исключением является DatePicker
, поскольку его обработчик onChange (onSelectDate
) получает новую выбранную дату в качестве единственного параметра, но Вы можете легко добавить предложение if
для обработки этого случая.