在 React 中构建自定义下拉菜单并在单击外部时尝试关闭它时遇到问题。
所以我创建了通用 HOC,所以我也可以将它用于其他场合。
我似乎遇到的问题是我不知道如何将 ref
从 hoc 传递到组件。
我一直在研究 forwardRef 和其他示例,但我无法弄清楚。
知道是否可能以及我该怎么做吗?
import React, { useState, useRef, useEffect } from "react";
export default function withClickOutside(WrappedComponent) {
const Component = (props) => {
const [open, setOpen] = useState(false);
const ref = useRef();
useEffect(() => {
const handleClickOutside = (event) => {
if (!ref?.current?.contains(event.target)) {
setOpen(false);
}
};
document.addEventListener("mousedown", handleClickOutside);
}, [ref]);
return <WrappedComponent {...props} open={open} setOpen={setOpen} ref={ref}/>;
};
return Component;
}
原文由 Cristian Muscalu 发布,翻译遵循 CC BY-SA 4.0 许可协议
您需要处理传递的
ref
以便它实际附加到某些东西上: