У меня три одинаковых поля ввода, которые замаскированы под текстовый формат телефона.Все поля ввода одинаковы (поле ввода телефона). Теперь у меня есть три состояния с тремя handlePhoneNumber
методами.Это не очень хорошая практика, так как все эти поля в основном одинаковы.
Я использовал библиотеку пользовательского интерфейса Material-UI
, и я использовал React-Text-Mask
библиотеку для моего компонента маски.
ЧтоУ меня так далеко:
this.state = {
textmask: "( ) - ",
textmask2: "( ) - ",
textmask3: "( ) - ",
}
RenderTextMask(props){
const { inputRef, ...other } = props;
return (
<MaskedInput
{...other}
ref={inputRef}
mask={['(', /[1-9]/, /\d/, /\d/, ')', ' ', /\d/, /\d/, /\d/, '-', /\d/, /\d/, /\d/, /\d/]}
guide={true}
showMask
/>
);
}
Мой компонент OutlienInput (из Material-UI) выглядит так:
<div>
<FormLabel>Phone</FormLabel>
<div>
<OutlinedInput
value={this.state.textmask}
onChange={this.handlePhoneNumber}
inputComponent={this.RenderTextMask}
labelWidth={200}
/>
</div>
</div>
<div>
<FormLabel>Phone</FormLabel>
<div>
<OutlinedInput
value={this.state.textmask2}
onChange={this.handlePhoneNumber2}
inputComponent={this.RenderTextMask}
labelWidth={200}
/>
</div>
</div>
<div>
<FormLabel>Phone</FormLabel>
<div>
<OutlinedInput
value={this.state.textmask3}
onChange={this.handlePhoneNumber3}
inputComponent={this.RenderTextMask}
labelWidth={200}
/>
</div>
</div>
В чем проблема: ПокаМне нужно одно состояние и один метод обработки для каждого телефонного поля, которое у меня есть.Как вы можете видеть, по мере роста приложения код на самом деле не подлежит сопровождению.
Чего я хочу достичь: Я хочу иметь одно состояние и один метод-обработчик, который обрабатывает все три поля.(возможно, больше полей в будущем).Или что-то лучше, чем у меня сейчас.Так что в будущем, если мне нужно будет добавить больше полей, мне не придется каждый раз изменять состояние и добавлять новый метод.
То, что я пробовал до сих пор Я пытался получитьТестовая маска массива как состояние.Проблема в том, что, поскольку я использовал react-text-mask
в качестве моей библиотеки масок.он принимает только строку.Если я заменю «textmask
» на массив строк, появится сообщение об ошибке.