javascript - onClick 有一个奇怪的行为
问题描述
我陷入了有关onClick
事件的问题,但首先,我将解释这种行为:
我的应用程序中有一个搜索栏,结果列表中有一个在搜索运行时应禁用的按钮。它工作正常,但是当搜索正在运行并且我单击该禁用按钮时,似乎会将事件添加到队列中,并且当搜索完成并且按钮变为启用时,所有事件都会被触发......
我尝试从按钮onClick
处理程序记录事件,例如,当按钮被禁用并单击 3 次时,在按钮启用后同时调用处理程序 3 次。而且我记录了按钮禁用状态,并且每个呼叫似乎都已启用。
当按钮被禁用时,有没有办法防止事件排队?此外,当被禁用时,我尝试在 CSS 上应用“指针事件:无”,但不起作用......
return <Button
className={buttonClass}
disabled={this.props.readonly}
onClick={() => console.log('isReadOnly:', this.props.readonly)}
>BUTTON TEXT</Button>
解决方案
您应该传递() => this.setState({readonly: true})
更新 的值的回调readonly
。
在下面的示例console.log
中,仅在启用按钮时添加。只要按钮被禁用,就不会console.log
添加新按钮。您可以<DisablableButton />
使用重置按钮重置。
class App extends React.Component {
constructor(props) {
super(props);
this.state = {
readonly: false
}
}
render() {
return (
<div>
<DisablableButton disabled={this.state.readonly} handleClick={() => this.setState({readonly: true})} />
<button onClick={() => this.setState({readonly: false})}>Reset</button>
</div>
)
}
}
function DisablableButton(props) {
const handleClick = () => {
console.log("<DisablableButton /> clicked");
props.handleClick(true);
}
return <button disabled={props.disabled} onClick={handleClick}>Disable</button>
}
ReactDOM.render(<App />, document.getElementById("root"));
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>
<div id="root"></div>
推荐阅读
- ios - iOS/UIKit 是否内置了对像 dinging 这样的调度滚动的支持
- python - 在Python中根据另一个数组中的索引创建一个数组
- javascript - Jquery Selector 获取以前的 aria-selector 元素,而不是当前元素
- math - 如何用旋转和平移矩阵求解方程?
- mongoose - Mongoose Document.toObject 产生 GraphQL 错误
- npm - Windows 10 上的路径命令
- html - HLS / 媒体源扩展
- c# - C# 流式传输字符编码和来自控制台的输出
- spring - Spring Boot 安全块非 RestController 端点
- php - 在 URL 中显示类别 Slug 而不是 ID