【发布时间】:2020-11-07 04:31:03
【问题描述】:
我创建了一个带去抖动的搜索字段。一切正常,但是当我尝试用退格键清空搜索字段时,它会不断重新显示所有字符并且不会删除它们(第一个字符始终存在)。
您可以在附加的 gif 中看到它
我的父组件
class ParentComponent extends React.Component {
this.queryParam = {
keyword: ''
}
keywordSearch = value => {
const {
history: { push },
match: { url },
location: { search },
} = this.props;
queryParams = {...queryParams, keyword: value, };
push(`${url}?${queryString})
};
render() {
<SearchComponent
value={this.queryParams.keyword}
onUpdate={this.keywordSearch}
/>
}
}
我的搜索字段组件
const SearchComponent = ({ value, onUpdate }) => {
const [fieldValue, setFieldValue] = useState(value);
const handleChange = ({ target: { value } }) => {
debounceFunc(() => {
onUpdate(value);
}, 300);
setFieldValue(value);
};
return (
<Input
value={fieldValue || value}
disableUnderline
onChange={handleChange}
className={classes.root}
placeholder='Search'
startAdornment={
<InputAdornment position="start">
<Search className={classes.icon} fontSize="small" />
</InputAdornment>
}
/>
}
这是我的自定义去抖动组件
export const debounceFunction = () => {
let timeOut = null;
return (callBack, wait) => {
if (timeOut) clearTimeout(timeOut);
timeOut = setTimeout(() => {
callBack();
}, wait);
};
};
export const debounceFunc = debounceFunction();
问题出在这个去抖动功能上。有人可以在这方面帮助我吗?为什么它不删除第一个字符? 谢谢
【问题讨论】:
-
问题似乎出在
// value update function中,事实上你在debounceFunc之外调用setFieldValue所以你可能有两种方式来更新值,而这两种方式会发生冲突彼此 -
这个搜索字段是一个子组件和父组件的更新函数,它处理值并发送回后端@Aprillion
-
您在此处列出的代码没有重现问题 => 请检查How to create a Minimal, Reproducible Example
-
刚刚更新了我的问题,请看一下@Aprillion
-
只是反馈:我习惯于看到去抖动看起来更像这样...
let dbncd = debounce(fn, delay); ... onchange = dbncd;这样,例如,fn会收到,比如说,Event。跨度>
标签: javascript reactjs search debounce