代码之家  ›  专栏  ›  技术社区  ›  Morton

使用此.setState时如何解决电话格式?

  •  0
  • Morton  · 技术社区  · 6 年前

    我想用户输入电话号码 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 ?

    事先谢谢。

    2 回复  |  直到 6 年前
        1
  •  1
  •   Nick Wang    6 年前

    比较新旧之间的长度,如果新的小于旧的应跳过,当长度等于4或8_

        2
  •  2
  •   maazadeeb    6 年前

    问题是你 总是 设置 phoneNumber 到上一个值加上一个空格,当 length 是4还是8。

    你需要检查一下 音素 已被您编辑,请不要追加空格。

    一个粗略的解决方案是这种检查:

    if (this.state.phoneNumber !== editedPhoneNumber) {
      this.setState({ phoneNumber: editedPhoneNumber });
    } else {
      this.setState({ phoneNumber: tex });
    }