【发布时间】:2018-09-28 18:48:53
【问题描述】:
当用户在输入字段中键入一些信息时,我在向服务器执行请求时遇到问题。请求已发送,但如果用户快速从字段中删除所有内容,则默认情况下不会发送请求,但会发送最后一封信。所以会发生一些延迟。
例如,当用户快速键入内容并发送一次请求 2 毫秒时,我需要以某种方式实现去抖动
<input type="text"
placeholder="add"
className='input'
onChange={(e) => this.search(e.target.value)}
onKeyDown={this.handleSearchParam}
value={keyword}
/>
处理输入的函数
search(text) {
this.props.onTextInputAdd(text);
if (text) {
this.props.onSearchTypeResult(this.props.tab, text)
} else {
this.props.onLoadDefaultInfo(this.props.tab);
}
}
const mapStateToProps = state => ({
keyword: state.searchReducers.keyword,
});
const mapDispatchToProps = dispatch => ({
onSearchTypeResult: (tabName, query) => dispatch(actionCreators.loadSearchInfo(tab, tabQuery)),
onTextInputAdd: keyword => dispatch(actionCreators.addKeyword(keyword)),
});
下面是动作:
const loadSearchResults = (tabName, query) => axios.get(`testurl?query1=${tabName}&query2=${query}`)
export const loadSearchInfo = (tabName, query) => dispatch => {
loadSearchResults(tabName, query).then(response => {
const data = { ...response.data };
dispatch(updateTabInfo(data));
});
}
export const updateTabInfo = data => ({
type: LOAD_TAB_INFO,
payload: data,
});
我尝试使用自定义去抖动,但它不起作用。每次我输入文本时都会触发它,但不是间隔
【问题讨论】:
-
不,不是,我检查了这些,但事实并非如此
-
您需要在组件实例上创建一个 debounce 方法,然后从 onchange 中调用该方法。实例方法将使您的 api 调用。是一样的。
-
所以请为我的案件提供指导。我不知道如何使用您发送给我的链接来做到这一点。这是发送链接和关闭主题的最简单方法
-
我给你提供了我写的所有代码
标签: javascript reactjs