我在React中创建了一个Autocomplete
组件,当您在文本框中键入时,它会显示建议完成的下拉列表。单击建议应触发回调,当文本框失去焦点时,下拉列表应消失。问题是文本框的onBlur
事件会在建议的onClick
事件之前触发,所以会发生什么:
this.setState(this.getInitialState())
如果不诉诸onBlur={setTimeout(() => this.setState(this.getInitialState()), 100)}
这样的黑客,解决这个问题的最佳方法是什么?
答案 0 :(得分:12)
找到一个非常简单的解决方案:在blur
触发文本输入之前,mousedown
事件触发被点击的结果项。此外,如果event.preventDefault()
回调调用blur
,则会阻止click
事件触发输入,但不会阻止将来mouseup
事件触发结果项一旦onMouseDown={event => event.preventDefault()}
发生。因此,简而言之,只需将此处理程序添加到结果项即可修复所有内容:DATE
答案 1 :(得分:1)
看起来有一个开源Autocomplete
组件,他们必须解决this exact problem。