1

onTextChange当我通过状态更改为它设置文本时,我想被触发。我正在构建我的屏幕数字键盘以输入密码,并且我想TextInput在用户按下这些键时捕捉文本更改。

this.setState({text})

我的TextInput样子是这样的:

<TextInput
  editable={false}
  onChangeText={text => Alert.alert(text)}
  secureTextEntry={true}
  value={this.state.text}

UPD:我发现了某种相关的问题,但它也没有答案:TextInput not working as expected when programmatically enter text

4

6 回答 6

2

您将editable道具设置为falsethenTextInput的文本将永远不会改变,onChangeText也永远不会调用...

于 2018-05-28T06:17:55.927 回答
1

我最终使用了onContentSizeChange,当文本更改时会调用它。我确实发现某些 TextInput 方法在以编程方式设置文本时无法正常工作。

于 2018-05-28T08:58:55.327 回答
1

我认为 onChangeText 的事件处理函数是异步的,因此你应该使用 async/await

<Input onChangeText={(val) => { this.changeHandler(val) }} />

并且更改处理程序方法应该是

changeHandler = async (val) =>{
  await this.setState({
    [someKey]: val
 })
  .
  .
  .
  do other stuff that depends on val
}

它以前用于发出 http 请求,该请求在输入值更改时触发,并使用输入值。

于 2018-10-18T04:08:39.500 回答
0

你可以像下面这样使用它。

class MyComponent extends Component{
  constructor(props){
    super(props)
    this.state = { text: null }   //By default it will be null.
    this._handleChange = this._handleChange.bind(this)  //You need to bind your function here.
  }

  _handleChange(e) {
        const { name, value } = e.target;  //it will destructure your name and value where ever you are using _handleChange method.
        this.setState({
            [name]: value // here we are setting the state dynamically.
        });
        alert(value)
    }

   render() {
     return(
       <View>
         <TextInput
           editable={true}
           onChangeText={this._handleChange}  // this will call _handleChange method.
           secureTextEntry={true}
           value={this.state.text}/>       
       </View>
     )
   }
}
于 2018-05-28T06:31:23.607 回答
0

此代码可能会帮助您:

     this.state = {Alert.alert(
                         'Update available //your Title',
                         'Keep your app up to date to enjoy the latest 
                          features //your Message',
                          [
                            {
                             text: 'Cancel',
                             onPress: () => console.log('Cancel Pressed'),
                             style: 'cancel',
                             }
                           ]
                      )
    }
    <TextInput
      editable={false}
      onChangeText={text => Alert.alert(text)}
      secureTextEntry={true}
      value={this.state.text}
    />
于 2018-05-28T07:04:34.267 回答
0

因为你没有绑定它:

onChangeText={text => Alert.alert(text)}

应该改变:

onChangeText={this.changeFunction.bind(this)}

然后添加一个函数:

changeFunction(text){
   alert(text);
}

=> 如果它不起作用,你可以测试然后投票给我:)

于 2021-09-21T19:30:14.653 回答