Aunque me considero un programador con experiencia y llevo más de 15 años desarrollando aplicaciones web, me sorprendió no conocer la propiedad ownerDocument.defaultView.
Básicamente, devuelve el objeto window (o null) asociado a un nodo DOM especifico.
Se puede usar para adjuntar listeners de forma segura al window correcto desde un componente que se renderiza fuera de la ventana principal (por ejemplo, usando portales).
function ThemeProvider({ children }) {
const [theme, setTheme] = useState("light");
const ref = useRef(null);
useEffect(() => {
const win = ref.current?.ownerDocument.defaultView || window;
const toggle = (e) => {
if (e.metaKey && e.key === "d") {
e.preventDefault();
setTheme((t) => (t === "dark" ? "light" : "dark"));
}
};
win.addEventListener("keydown", toggle);
return () => win.removeEventListener("keydown", toggle);
}, []);
return (
<div ref={ref} className={theme}>
{children}
</div>
);
}
Del mismo articulo tambien aprendí sobre useId y cache.
Referencia: https://shud.in/thoughts/build-bulletproof-react-components, gran artículo.