javascript - 模态图像未关闭(反应) - JavaScript 事件不工作
问题描述
试图编写一个函数来关闭模态图像。函数根本没有执行,所以没有结果。使用反应生命周期来添加和删除事件的事件监听器。任何想法在这里发生了什么样的问题?附上代码,请检查我在哪里做错了。
import React, { Component } from "react";
import ImageGalleryItem from "../ImageGalleryItem/ImageGalleryItem";
import PropTypes from "prop-types";
import Modal from "../Modal/Modal";
export default class ImageGallery extends Component {
state = {
open: false,
largeImageURL: "",
};
setLargeImg = (e) => {
this.setState({ largeImageURL: e });
};
render() {
let imageListContent;
const { images } = this.props;
return (
<>
<ul className="ImageGallery">
{images
? (imageListContent = images.map((image) => (
<ImageGalleryItem
image={image.webformatURL}
title={image.title}
largePic={image.largeImageURL}
setLargeImg={this.setLargeImg}
key={image.id}
/>
)))
: (imageListContent = null)}
</ul>
{this.state.largeImageURL && (
<Modal
largeImageURL={this.state.largeImageURL}
state={this.state}
setLargeImg={this.setLargeImg}
/>
)}
</>
);
}
}
模态组件
import React, { Component } from "react";
export default class Modal extends Component {
escFunction = (event) => {
if (event.target.code === "Escape") {
this.props.setLargeImg(null);
}
};
componentDidMount() {
window.addEventListener("keyDown", this.escFunction);
}
componentWillUnmount() {
window.removeEventListener("keyDown", this.escFunction);
}
render() {
return (
<div className="Overlay">
<div className="Modal">
<img src={this.props.largeImageURL} alt="" />
</div>
</div>
);
}
}
解决方案
函数根本没有执行,所以没有结果。
DOM 事件是键敏感的。keyDown
事件不存在。然而,keydown
确实如此。简单地从小d
到大D
componentDidMount() {
window.addEventListener("keydown", this.escFunction);
}
componentWillUnmount() {
window.removeEventListener("keydown", this.escFunction);
}
参考:https ://developer.mozilla.org/en-US/docs/Web/Events
最后,event.target.code
将返回未定义。该属性不存在。只需检查event.key
escFunction = (event) => {
if (event.key === "Escape") {
this.props.setLargeImg(null);
}
};
推荐阅读
- elasticsearch - 我使用elasticsearch,查询dsl,数据如下;
- mysql - Mysql的排序顺序
- sql-server - 我们可以在存储过程的 select into 语句中限制小数点后的零吗?
- angular - 如何在打字稿中获取枚举值
- reactjs - Office-UI-fabric DocumentCardActions 不起作用
- ios - 如何知道要删除哪个子层?
- c# - 如何改变四元数的“角度”但保持其方向。(统一)
- apache-poi - 如何将 Apache POI 导入到我的 IntelliJ Idea 项目中?
- json - 使用 JSON 的 Azure 策略是否允许您按名称检查 VM 扩展?
- css - 每个循环中的 sass 变量插值