【发布时间】:2022-11-17 21:04:56
【问题描述】:
我正在实施一个从右侧打开的自定义侧面板。我可以通过单击按钮实现面板的显示和隐藏。但是当我点击外部时,我希望隐藏同样的东西。我附加了外部点击处理程序,当我这样做时它甚至没有出现。有人可以帮忙吗
https://codesandbox.io/s/react-sliding-pane-v2-4xuj57?file=/src/SlideDrawer.jsx:100-173
import React, { useRef, useCallback, useEffect } from "react";
import "./styles.css";
export default function SlideDrawer({ show, setDrawerOpen }) {
const sideMenuRef = useRef(null);
const onOutsideClick = useCallback(() => {
setDrawerOpen(false);
}, [setDrawerOpen]);
useEffect(() => {
document.addEventListener("click", onOutsideClick);
return () => document.removeEventListener("click", onOutsideClick);
}, [onOutsideClick]);
return (
<div ref={sideMenuRef} className={`panel ${show && "slidein"}`}>
I am sliding
</div>
);
}
import React, { useState } from "react";
import ReactDOM from "react-dom";
import SlideDrawer from "./SlideDrawer.jsx";
import "./styles.css";
function App() {
const [drawerOpen, setDrawerOpen] = useState(false);
return (
<div className="box">
<SlideDrawer show={drawerOpen} setDrawerOpen={setDrawerOpen} />
<button onClick={() => setDrawerOpen((prev) => !prev)}>Click me!</button>
</div>
);
}
const rootElement = document.getElementById("root");
ReactDOM.render(<App />, rootElement);
【问题讨论】:
标签: javascript html reactjs ecmascript-6 react-hooks