5180 fichiers 38.5 Mo 0 téléchargements 206 vues mis à jour il y a 5 heures ui
nitro-v36-with-renderer-v36 / src / hooks / events / useMessageEventState.ts
useMessageEventState.ts 993 o Télécharger le fichier
import { IMessageEvent, MessageEvent } from '@octane/renderer';
import { useCallback, useLayoutEffect, useRef, useState } from 'react';
import { useMessageEvent } from './useMessageEvent';

/**
 * Subscribe to a server message event and expose the latest derived
 * value as React state. Mirror of useOctaneEventState for the Octane
 * communication channel (request/response composers, push parsers).
 *
 *   const data = useMessageEventState(SomeParser, e => e.getParser().data, null);
 */
export const useMessageEventState = <T extends IMessageEvent, S>(eventType: typeof MessageEvent, selector: (event: T) => S, initial: S | (() => S)): S => {
    const [value, setValue] = useState<S>(initial);
    const selectorRef = useRef(selector);

    useLayoutEffect(() => {
        selectorRef.current = selector;
    });

    const handler = useCallback((event: T) => {
        setValue(selectorRef.current(event));
    }, []);

    useMessageEvent<T>(eventType, handler);

    return value;
};
15Sujets
1Dépôts
20Membres
2En ligne
Profile
Inscrit
Dernière visite
Messages
0
Votes positifs
0
Votes négatifs
0

Nous utilisons des cookies pour assurer le bon fonctionnement du site et améliorer votre expérience. en savoir plus

Autoriser