matrix-react-sdk
Version:
SDK for matrix.org using React
33 lines (26 loc) • 1.1 kB
text/typescript
/*
Copyright 2024 New Vector Ltd.
Copyright 2020 The Matrix.org Foundation C.I.C.
SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only
Please see LICENSE files in the repository root for full details.
*/
import { useEffect, useRef } from "react";
import { ActionPayload } from "../dispatcher/payloads";
import { MatrixDispatcher } from "../dispatcher/dispatcher";
// Hook to simplify listening to event dispatches
export const useDispatcher = (dispatcher: MatrixDispatcher, handler: (payload: ActionPayload) => void): void => {
// Create a ref that stores handler
const savedHandler = useRef((payload: ActionPayload) => {});
// Update ref.current value if handler changes.
useEffect(() => {
savedHandler.current = handler;
}, [handler]);
useEffect(() => {
// Create event listener that calls handler function stored in ref
const ref = dispatcher.register((payload) => savedHandler.current(payload));
// Remove event listener on cleanup
return () => {
dispatcher.unregister(ref);
};
}, [dispatcher]);
};