我想让用户输入电话号码1234567888
该电话号码将更改为1234 567 888
我和<TextInput />
一起尝试
constructor(props) {
super(props);
this.state = {
phoneNumber: '',
};
}
<TextInput
style={styles.textInput}
keyboardType='numeric'
onChangeText={(tex) => this.adjustPhoneNumber(tex)}
value={phoneNumber}
placeholder={'1234 567 888 '}
autoFocus={true}
placeholderTextColor='rgba(33, 33, 33, 0.41)'
/>
adjustPhoneNumber = (tex) => {
let editedPhoneNumber = tex;
if (tex.length === 4) {
editedPhoneNumber = tex.concat(' ');
} else if (tex.length === 8) {
editedPhoneNumber = tex.concat(' ');
}
this.setState({ phoneNumber: editedPhoneNumber });
}
当用户输入手机时,首先正常。
但是如果用户单击键盘上的返回按钮,TextInput
将在tex.length === 8
时卡住
当我使用this.setState
时,有人知道如何修复它吗?
提前谢谢。
问题是,当length
为 4 或 8 时,您总是将phoneNumber
设置为前一个值加上一个空格。
您需要检查phoneNumber
是否已被您编辑,然后不要附加空格。
一个粗略的解决方案是这个检查:
if (this.state.phoneNumber !== editedPhoneNumber) {
this.setState({ phoneNumber: editedPhoneNumber });
} else {
this.setState({ phoneNumber: tex });
}
比较新旧 vaule 之间的长度,如果新小于旧值应跳过,当长度等于 4 或 8 时,添加空格操作(或删除最后一个字符)。