【发布时间】:2018-12-12 21:01:07
【问题描述】:
我有三个相同的输入字段,它们被屏蔽为电话格式文本。所有输入字段都完全相同(电话输入字段)。现在我有三个状态,三个handlePhoneNumber 方法。这不是一个好的做法,因为所有这些字段基本上都完全相同。
我使用的 UI 库是 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>
问题是什么: 到目前为止,对于我拥有的每个电话字段,我都需要一种状态和一种处理方法。如您所见,随着应用程序的增长,代码实际上是不可维护的。
我想要达到的目标: 我想要一种状态和一种处理所有三个字段的句柄方法(将来可能会有更多字段)。或者比我目前拥有的更好的东西。所以以后如果我要添加更多的字段,我不必每次都修改状态和添加新方法。
到目前为止我所尝试的
我试图将数组 testmask 作为状态。问题是因为我使用react-text-mask 作为我的掩码库。它只接受字符串。如果我把“textmask”改成字符串数组,会提示错误。
【问题讨论】:
标签: javascript reactjs material-design material-ui