React 上下文提供程序设置一个 ref
,另一个组件使用它来设置模糊事件侦听器。问题是模糊事件不会触发侦听器。
上下文提供程序的代码摘录。
... export function useEditorContext(): EditorContextProps { return useContext(EditorContext) as EditorContextProps; } export default function EditorProvider({ children }: { children: React.ReactNode }) { const ref = useRef<HTMLDivElement>(null); const historyState = useMemo(createEmptyHistoryState, []); const context = { historyState, ref }; return ( <EditorContext.Provider value={context}> <div ref={ref}> {children} </div> </EditorContext.Provider> ); }
目标是将侦听器附加到 Lexical 插件中。
const { historyState, ref } = useEditorContext(); const blurHandler = (event: FocusEvent) => { console.log('Blurred'); }; useEffect(() => { const element = ref.current; if (element) { element.addEventListener('blur', blurHandler, false); } else return; return () => { element.removeEventListener('blur', blurHandler); }; }, [ref.current]); // eslint-disable-line
我已经使用日志记录运行了代码,并尝试了 useRef
和 addEventListener
的几种解决方案/答案,但在上述场景中没有一个起作用。欢迎任何建议!
blur 事件不会冒泡,但您可以使用相关的 focusout 事件来处理失去焦点的子元素。