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
的幾種解決方案/答案,但在上述場景中沒有一個起作用。歡迎任何建議!
P粉6681466362024-01-29 00:40:55
blur 事件不會冒泡,但您可以使用相關的 focusout 事件來處理失去焦點的子元素。
if (element) { element.addEventListener('focusout', blurHandler); } else return; return () => element.removeEventListener('focusout', blurHandler);