gpt4 book ai didi

reactjs - 如何捕获 React 组件外的点击

转载 作者:搜寻专家 更新时间:2023-10-30 21:10:12 27 4
gpt4 key购买 nike

我开始学习 React,我正在尝试实现一个模态窗口。我同时在使用 TypeScript。

我想在我的 React 组件外捕捉点击,所以当我在模态窗口外点击时,这个窗口会关闭。我的方法基于此:How to capture click outside React component

import styled from 'styled-components';

const StyledModal = styled.div`
width: 100%;
background-color: #fff;
box-shadow: 0 0 0.625rem, rgba(0, 0, 0, 0.2);

@media (min-width: 576px) {
width: 32rem;
},
`;

class Modal extends React.Component<ModalProps> {
private modal: HTMLDivElement;

onOutsideClick = (e: any) => {
if (!_.isNil(this.modal)) {
if (!this.modal.contains(e.target)) {
this.onClose(e);
}
}
}

componentDidMount() {
document.addEventListener('mousedown', this.onOutsideClick, false);
}

componentWillMount() {
document.removeEventListener('mousedown', this.onOutsideClick, false);
}

render() {
<div>
<StyledModal ref={(node: any) => { this.modal = node; }}>
...
</StyledModal>
</div>
}
}

问题是每当我在模式内部或外部单击时都会出现此错误,我不知道它是什么或如何修复它:

enter image description here

任何灯光请让我知道...

最佳答案

由于您的 StyledModal 是 styled-components,因此您需要添加 innerRef 才能获取 DOM 节点。请记住 innerRef 是一个自定义 Prop ,仅适用于 styled-components

https://github.com/styled-components/styled-components/blob/master/docs/tips-and-tricks.md#refs-to-dom-nodes

<StyledModal innerRef={(node: any) => { this.modal = node; }}>
...
</StyledModal>

关于reactjs - 如何捕获 React 组件外的点击,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49725344/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com