javascript - 删除 onclick 反应
问题描述
我有一个带有 onClick 事件的 div。在应用程序的某个时刻,我想删除该事件。我该怎么做?我试过:
document.removeEventListener('click', this.function)
document.removeEventListener('mousedown', this.function)
解决方案
我假设 div 在你的 React 代码中设置了一个点击处理程序,而不是直接通过addEventListener
. 这就是为什么你不能用removeEventListener
;删除它的原因。这就是 React 的工作方式。
你至少有两个选择:
使呈现
div
有状态的组件,并onClick
在呈现div
.使呈现
div
状态的组件始终具有处理程序,但仅根据状态在其中实际执行某些操作。
#2 相当简单:在您的处理程序中,您检查状态以查看是否应该做某事。
#1还有一点,所以这里是#1的一个例子,其中一个复选框控制是否div
有onClick
(使用钩子):
const {useState, useCallback} = React;
function Example() {
const [flag, setFlag] = useState(true);
const onFlagChange = useCallback(e => {
setFlag(e.target.checked);
}, []);
const handleClick = useCallback(e => {
console.log(`div clicked at ${new Date().toISOString()}`);
}, []);
return (
<div>
<label>
<input type="checkbox" onChange={onFlagChange} checked={flag} />
Handler enabled
</label>
<div onClick={flag ? handleClick : null}>Click here to see if handler fires</div>
</div>
);
}
ReactDOM.render(
<Example />,
document.getElementById("root")
);
<div id="root"></div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.10.2/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.10.2/umd/react-dom.production.min.js"></script>
这是一个基于类的版本:
const {Component} = React;
class Example extends Component {
constructor(props) {
super(props);
this.state = {flag: true};
this.onFlagChange = this.onFlagChange.bind(this);
this.handleClick = this.handleClick.bind(this);
}
onFlagChange(e) {
this.setState({flag: e.target.checked});
}
handleClick() {
console.log(`div clicked at ${new Date().toISOString()}`);
}
render() {
const {onFlagChange, handleClick} = this;
const {flag} = this.state;
return (
<div>
<label>
<input type="checkbox" onChange={onFlagChange} checked={flag} />
Handler enabled
</label>
<div onClick={flag ? handleClick : null}>Click here to see if handler fires</div>
</div>
);
}
}
ReactDOM.render(
<Example />,
document.getElementById("root")
);
<div id="root"></div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.10.2/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.10.2/umd/react-dom.production.min.js"></script>
推荐阅读
- php - 即使使用用户代理,file_get_contents 也会被禁止 403
- javascript - 如何从 html 脚本标签访问 index.js res 属性
- ios - iOS 增强现实 3D 边界框精确尺寸
- cors - Swagger OpenApi 3.0 不允许 PUT 请求仅 POST 和 GET 工作
- docker - Nginx- 502 错误网关
- reactjs - 带有 Netlify CMSField“缩略图”的 Gatsby 图像不能有选择,因为类型“字符串”没有子字段
- javascript - 如何将 url 参数转换为对象数组的对象?
- composer-php - 用户/项目而不是组的 Gitlab Composer 包注册表
- python - Python xlwt - 你能保护工作簿格式吗?
- css - 如何从 VH calc 中获得高度的百分比?