Допустим, у меня есть компонент раскрывающегося списка, и когда я выбираю вариант «Другое» в этом раскрывающемся списке, я открываю текстовое поле, чтобы указать параметр, который не указан в вариантах раскрывающегося списка.
Итак, если вы хотите создать такой компонент для разных входных данных для формы, могу ли я использовать HOC? Ниже приведен мой текущий код. Как я могу повторно использовать этот компонент, не переписывая тот же класс для другого ввода, скажем, ввода религии? Есть ли другие способы, кроме извлечения двух FormItem в два компонента.
export class NationalitySelect extends Component {
state = { showFormInput: false };
onSelect = (value) => {
if (value === 'OT') {
this.setState({ showFormInput: true });
} else {
this.setState({ showFormInput: false });
}
};
render() {
const { decorator } = this.props;
const { showFormInput } = this.state;
return (
<FormItem {...layout} label="Nationality" colon required>
<Col span={7}>
<FormItem>
{decorator('nationality', { initialValue: 'JP' })(
<FormSelect onChange={value => this.onSelect(value)}>
<Option value="JP">Japanese</Option>
<Option value="SG">Singaporean</Option>
<Option value="OT">Others</Option>
</FormSelect>,
)}
</FormItem>
</Col>
{/* show text input if nationality is others */}
{showFormInput && (
<Col span={17}>
<FormItem>
{decorator('otherNationality', {
rules: [
{
required: true,
message: 'Please specify your nationality!',
},
],
})(<FormInput type="text" />)}
</FormItem>
</Col>
)}
</FormItem>
);
}
}