【发布时间】:2016-11-29 01:55:40
【问题描述】:
我正在开发具有自动完成功能的搜索组件,但遇到了一些奇怪的行为。该组件由一个输入 (SearchInput) 和一个预先输入结果列表 (SearchResultWrapper) 组成。
单击预输入结果应使用所选结果填充SearchInput 字段并隐藏预输入结果。失去对领域的关注也应该隐藏结果。
可在此处找到示例代码:https://jsfiddle.net/chez/h22qfx45/。
当您在 closeResults 函数中发表评论时,问题就出现了,该函数负责更改组件的状态以隐藏预先输入的结果。激活此代码后,React 不再拾取 SearchResult 的 onClick 处理程序。
这里显然缺少一个基本概念。由于 SearchResult 组件被隐藏,React 是否会断开其事件侦听器与它的连接?
【问题讨论】:
-
你有一个竞争条件。将您的
closeResults更改为setTimeout(() => this.setState({resultsOpen: false}), 200);以观察它。我猜你在点击注册之前隐藏了元素(请记住,浏览器会在触发点击事件之前移除焦点)。我现在没有时间进一步研究它,但也许它会有所帮助。 -
如果您能发布代码中最令人困惑或您认为最重要的部分,那就太好了。
标签: javascript events reactjs