最好先看看我的代码:
import React, { Component } from 'react';
import _ from 'lodash';
import Services from 'Services'; // Webservice calls
export default class componentName extends Component {
constructor(props) {
super(props);
this.state = {
value: this.props.value || null
}
}
onChange(value) {
this.setState({ value });
// This doesn't call Services.setValue at all
_.debounce(() => Services.setValue(value), 1000);
}
render() {
return (
<div>
<input
onChange={(event, value) => this.onChange(value)}
value={this.state.value}
/>
</div>
)
}
}
只是一个简单的输入。在构造函数中,它从道具(如果可用)处获取 value
为组件设置本地状态。
然后在 onChange
函数 input
更新状态,然后尝试调用 web 服务端点以使用 Services.setValue()
设置新值。
如果我直接通过输入的 onChange
设置 debounce
,就像这样:
<input
value={this.state.value}
onChange={_.debounce((event, value) => this.onChange(value), 1000)}
/>
但是随后 this.setState
每 1000 毫秒才被调用一次并更新视图。因此,在文本字段中键入最终看起来很奇怪,因为您键入的内容只会在一秒钟后显示。
在这种情况下我该怎么办?
原文由 user818700 发布,翻译遵循 CC BY-SA 4.0 许可协议
出现问题是因为你没有调用 debounce 函数,你可以通过以下方式进行