將事件偵聽器新增至 React 上下文中的 ref
P粉765570115
P粉765570115 2024-01-29 00:12:47
0
1
421

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

我已經使用日誌記錄運行了程式碼,並嘗試了 useRefaddEventListener 的幾種解決方案/答案,但在上述場景中沒有一個起作用。歡迎任何建議!

P粉765570115
P粉765570115

全部回覆(1)
P粉668146636

blur 事件不會冒泡,但您可以使用相關的 focusout 事件來處理失去焦點的子元素。

if (element) {
  element.addEventListener('focusout', blurHandler);
} else return;

return () => element.removeEventListener('focusout', blurHandler);
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板