【发布时间】:2018-05-28 07:48:24
【问题描述】:
最好先看看我的代码:
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,为组件设置本地状态。
然后在input的onChange函数中更新状态,然后尝试调用webservice端点以Services.setValue()设置新值。
如果我像这样直接通过输入的onChange 设置debounce 会起作用:
<input
value={this.state.value}
onChange={_.debounce((event, value) => this.onChange(value), 1000)}
/>
但随后this.setState 仅每 1000 毫秒调用一次并更新视图。因此,在文本字段中输入最终看起来很奇怪,因为您输入的内容只在一秒钟后显示。
遇到这种情况该怎么办?
【问题讨论】:
标签: javascript reactjs ecmascript-6 lodash debounce