React Native - text input blinking when using state

后端 未结 2 1158
无人及你
无人及你 2021-01-21 21:19

I\'m adding some validation to the input text of a TextInput component. The TextInput\'s value is handled in the state and is only updated when the value entered is valid.

相关标签:
2条回答
  • 2021-01-21 21:35

    you can try to use '=>' operator

    class TextInputWithValidation extends Component {
    
    constructor(props) {
      super(props);
      this.state = { text: ''}
      this.handleChange = this.handleChange.bind(this);
    }
    //here
    handleChange = (text) => {
      if(isValid) {
          this.setState({text})
      }
    }
    
    render() {
      return (
              <TextInput
                  value={this.state.text}
                  //and here
                  onChangeText={() => this.handleChange}
              />
      )
    }
    }
    
    0 讨论(0)
  • 2021-01-21 21:46

    Based on your comment, a work around could be to use your handleChange method to detect for a decimal point, and then simply set some sort of inputLengthState to the current location of the decimal

    Then you can use the prop for text input maxLength = this.state.inputLengthState + this.state.precision, with precision being your decimal places. Ive written some basic code below

    class TextInputWithValidation extends Component {
    
      constructor(props) {
        super(props);
        this.state = { 
           text: '',
           precision: 2,
           inputLength: 100,
        }
        this.handleChange = this.handleChange.bind(this);
      }
    
     handleChange(text) {
       if(isValid) {
         this.setState({text})
       }
       //somewhere here you would check text for a decimal place
       //and then set the inputLength the decimals' string index. If null,
       //set it to some limit however you would like ( i used 100 ).
     }
    
    render() {
        return (
            <TextInput
                value={this.state.text}
                maxLength={this.state.inputLength + this.state.precision}
                onChangeText={(text) => {this.handleChange(text)}}
            />
        )
    }
    

    }

    Apologies if my code is a bit off syntax wise, it has been a little while. For the algorithm to check for the decimal place, I'm sure this should be pretty straight forward. If not, say.

    0 讨论(0)
提交回复
热议问题