Вы можете испускать функции componentWillMount () и componentWillUnmount в целом. Затем, когда клик сделан на div, функциональность переключения работает отлично. Единственное, чего вам здесь не хватает, так это то, что когда клики, сделанные за пределами div, clickhandler () больше не привязывается к этому div, вместо этого щелкается корневой div.
Чтобы преодолеть это, я добавил родительский div, чтобы занять максимальную высоту, затем использовал обработчики щелчков, чтобы развернуть и переключить значения div.
Ниже приведен фрагмент кода.
import React, { Component } from "react";
import { render } from "react-dom";
const styles = {
fontFamily: "sans-serif",
textAlign: "center",
border: "2px solid red",
height: "500px"
};
const styles2 = {
fontFamily: "sans-serif",
textAlign: "center",
border: "2px solid black"
};
export default class App extends Component {
state = {
expand: false
};
expandedArea() {
return <div>content area</div>;
}
handleClickOutside = () => {
this.setState({
expand: false
});
};
handleClick = e => {
console.log("ddd");
e.stopPropagation();
if (this.node.contains(e.target)) {
this.setState({
expand: !this.state.expand // doesn't work?
});
return;
}
this.handleClickOutside();
};
render() {
const { expand } = this.state;
return (
<div style={styles} onClick={e => this.handleClickOutside(e)}>
<div
style={styles2}
ref={node => (this.node = node)}
onClick={e => this.handleClick(e)}
>
hello world
{expand && this.expandedArea()}
</div>
</div>
);
}
}
render(<App />, document.getElementById("root"));
Надеюсь, это поможет вам в том, что вы смотрели, спасибо!