Я создал HOC для прослушивания кликов вне его завернутого компонента, так что завершенный компонент может прослушивать и реагировать по мере необходимости.Reactjs - Unmount более высокого порядка не работает правильно
Специальный выглядит следующим образом:
const addOutsideClickListener = (WrappedComponent) => {
class wrapperComponent extends React.Component {
componentDidMount() {
console.log('*** component did MOUNT called ***');
document.addEventListener('click', this._handleClickOutside.bind(this), true);
}
componentWillUnmount() {
console.log('*** component will UNMOUNT called ***');
document.removeEventListener('click', this._handleClickOutside.bind(this), true);
}
_handleClickOutside(e) {
const domNode = ReactDOM.findDOMNode(this);
if ((!domNode || !domNode.contains(e.target))) {
this.wrapped.handleClickOutside();
}
}
render() {
return (
<WrappedComponent
ref={(wrapped) => { this.wrapped = wrapped }}
{...this.props}
/>
);
}
}
return wrapperComponent;
}
Он отлично работает ... большая часть времени.
Когда обернутый компонент демонтирован, метод «componentWillUnmount» вызывается, но «removeEventListener» продолжает прослушивать события, и поэтому я получаю сообщение об ошибке «Uncaught Ошибка: findDOMNode было вызван на отмонтированной компоненте.»
Любые идеи, что может быть причиной этого?
увидеть это: https://gist.github.com/Restuta/e400a555ba24daa396cc, когда вы используете "привязку" а новая функциональная ссылка сделана так технически, что вы пытаетесь удалить другую функцию – Jayce444
спасибо! это изменение создает новую проблему - теперь я получаю эту ошибку при каждом щелчке везде. «Неиспользуемая ошибка: элемент не является ни ReactComponent, ни DOMNode». – Petrov
Я разместил новый вопрос, чтобы правильный ответ здесь получился. Пожалуйста, см. Http://stackoverflow.com/questions/41740360/reactjs-higher-order-component-unmount-not-working-correctly-part-2 – Petrov