以下は、コンポーネントの参照をフェッチし、コンポーネントの外部でクリックが発生したかどうかを確認しようとしているソースコードですが、未定義としてエラーが発生しています。ここで私が間違っていることを教えてください。
コード -
// @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>
);
}
}