Rumah  >  Soal Jawab  >  teks badan

Tambahkan pendengar acara pada rujukan dalam konteks React

Pembekal konteks React menetapkan ref yang digunakan oleh komponen lain untuk menetapkan pendengar acara kabur. Masalahnya ialah peristiwa kabur tidak memecat pendengar.

Petikan kod untuk penyedia konteks.

...
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>
    );
}

Matlamatnya adalah untuk melampirkan pendengar pada pemalam Leksikal.

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

Saya telah menjalankan kod dengan pengelogan dan mencuba beberapa penyelesaian/jawapan daripada useRefaddEventListener tetapi tiada satu pun daripada mereka yang berfungsi dalam senario di atas. Sebarang cadangan dialu-alukan!

P粉765570115P粉765570115237 hari yang lalu365

membalas semua(1)saya akan balas

  • P粉668146636

    P粉6681466362024-01-29 00:40:55

    acara kabur tidak menggelegak, tetapi anda boleh menggunakan acara fokus yang berkaitan untuk mengendalikan elemen kanak-kanak yang kehilangan fokus.

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

    balas
    0
  • Batalbalas