Я пытаюсь создать универсальный HOC для закрывающего элемента при щелчке за пределами его пространства (универсальное закрытие при внешнем решении).
На мой взгляд, этого можно добиться с помощью реализации forwardRef и HOC ихотя в официальных документах есть пример, я не могу понять его правильно.
Поэтому я хочу, чтобы мой HOC создал ссылку на контейнер компонента.Это обертка, потому что она имеет обработчики для отслеживания кликов и воздействия на них.Например, допустим, у нас есть общий компонент Dropdown, можно было бы ожидать, что я могу закрыть его при любом щелчке за пределами области этого компонента.
Код, который у меня сейчас есть:
import React from 'react';
function withClose(Component) {
class ClickContainer extends React.Component {
constructor() {
super();
this.handleClose = this.handleClose.bind(this);
}
componentDidMount() {
document.addEventListener('click', this.handleClose);
}
componentWillUnmount() {
document.removeEventListener('click', this.handleClose);
}
handleClose(e) {
// I expect having here context of container of wrapped component to do something like
const { forwardedRef } = this.props; // <- I expect having context in forwardedRef variable
}
render() {
const { forwardedRef, ...rest } = this.props;
return <Component ref={forwardedRef} {...rest} />;
}
}
return React.forwardRef((props, ref) => {
return <ClickContainer {...props} forwardedRef={ref} />;
});
}
export default withClose;
Что мне здесь не хватает?Я не могу заставить его работать, я получаю только контекст обернутого компонента, а не сам элемент.
Спасибо большое!