如何检查在本机反应中完成的 TextInput 更改

How can I check the TextInput change completed in react native

基本上,我需要在文本更改时点击搜索 API,但在 TextInput 的每次更改时调用 API 并不是一件好事。那么,这个组件中是否存在任何回调函数,当用户完成编辑(停止输入)时触发?如果我们在用户停止输入时触发 API,那将是最好的。

我试过onEndEditing,但是停止写入后没有触发

如果你想自动检测用户何时完成编辑,你可以这样做

 const [value, setValue] = React.useState('');
 const timeout = React.useRef(null);

 const onChangeHandler = (value) => {
   clearTimeout(timeout.current);
   setValue(value);
   timeout.current = setTimeout(()=>{
      searchFunction(value)
   }, 2000);
 }

  return (
    <View>
      <TextInput
        value={value}
        onChangeText={ (value) => {onChangeHandler(value)} }
      />
    </View>

这将在用户完成输入后 2 秒调用搜索功能,并且会在用户输入内容时刷新持续时间

或者您可以试试 onBlur,一旦输入不再聚焦,它们就会触发,而不会仅仅因为您完成输入而触发

请参考:

另外:

Debounce 函数应该在 render 方法之外的某个地方定义,因为每次调用它时它都必须引用同一个函数实例,而不是像现在这样创建一个新实例你把它放在 onChangeText 处理函数中。

定义去抖功能最常见的地方就在组件的对象上。这是一个例子:

CLASS 组件:

class MyComponent extends React.Component {
   constructor() {
     this.onChangeTextDelayed = _.debounce(this.onChangeText, 2000);
   }

   onChangeText(text) {
     console.log("debouncing");
   }

   render() {
     return <Input onChangeText={this.onChangeTextDelayed} />
   }
 }

功能组件:

 function MyComponent(props) {
   const onTextChange = (text) => {
     console.log(text)
   };

   const _onTextChangeHandler = _.debounce(onTextChangeHandler, 1000, []);

    return <Input onChangeText={_onTextChangeHandler} />

 }