На самом деле я столкнулся с проблемой, когда я не хочу, чтобы меню моего бокового меню закрывалось, когда я щелкаю где-либо снаружи. прямо сейчас он сворачивается / закрывается, когда я щелкаю в любом месте.
Это мой метод, который распознает, когда пользователь щелкает мышью где-либо вне тела.
import React, { Component } from "react";
class WatchClickOutside extends Component {
constructor(props) {
super(props);
this.handleClick = this.handleClick.bind(this);
}
componentWillMount() {
console.log('in comp mount');
document.body.addEventListener('click', this.handleClick);
}
componentWillUnmount() {
console.log('in comp unmount');
document.body.removeEventListener('click', this.handleClick);
}
handleClick(event) {
let { container } = this.refs;
const { onClickOutside } = this.props;
const { target } = event;
if (typeof onClickOutside !== 'function') {
console.log(' in if of onclickoutside');
return;
}
if (target !== container && !container.contains(target)) {
console.log('clicked outside - fire callback');
onClickOutside(event); // clicked outside - fire callback
}
}
render() {
return (
<div ref="container">
{this.props.children}
</div>
);
}
}
export default WatchClickOutside;
И это код, в котором я отображаю боковая панель.
import React, { Component } from 'react';
import WatchClickOutside from './watch-outside';
class Sidebar extends Component {
handleClickOutside = (e) => {
console.log(e);
**//WHAT SHOULD I DO HERE TO RESTRICT THE CLOSE OF SIDEBAR ONCLICK**
}
render() {
return (
<div>
<WatchClickOutside onClickOutside={this.handleClickOutside}>
<Nav vertical className="sidebar">
<UncontrolledDropdown nav inNavbar className="manage-profile">
<DropdownToggle nav caret className="nav-link" aria-hidden="true">
SIDEBAR
</DropdownToggle>
<DropdownMenu>
**//DROPDOWN MENU HERE**
</DropdownMenu>
</Nav>
</UncontrolledDropdown>
</WatchClickOutside>
</div>
);
}
}
export default Sidebar;