以下是我的源代码,我在其中尝试获取组件的引用并检查单击是否发生在组件外部,但由于未定义而出现错误。让我知道我在这里做错了什么。
代码 -
// @flow
import { PureComponent, createRef } from 'react';
import type { Props, State } from 'types';
class MyComponent extends PureComponent<Props, State> {
static defaultProps = {
myComponentBody: ''
};
state: State = {
showMyComponent: false,
};
wrapperRef: { current: null | HTMLDivElement } = createRef();
componentDidMount() {
document.addEventListener('mousedown', this.handleClickOutside);
}
componentWillUnmount() {
document.removeEventListener('mousedown', this.handleClickOutside);
}
handleClickOutside(e: SyntheticEvent<>) {
console.log(`Inside --->`); // This function is triggering
console.log(this); // I am getting #document whole html
console.log(this.wrapperRef); // undefined
console.log(wrapperRef); // Uncaught ReferenceError: wrapperRef is not defined
if (this.wrapperRef && !this.wrapperRef.contains(e.target)) {
this.setState({
showMyComponent: false,
});
}
}
handleClick(e: SyntheticEvent<>) {
this.setState({
showMyComponent: true,
});
}
render() {
const { myComponentBody } = this.props;
return (
<div onClick={e => this.handleClick(e)} ref={this.wrapperRef}>
{this.props.children}
{this.state.showMyComponent && (
<div>
<div>{myComponentBody}</div>
</div>
)}
</div>
);
}
}