useGMSCallback/index.js

/**
 * 功能:发布自定义事件
 * @param {object} actions - 目标对象,自定义事件发送的参数
 * @param {string} eventName - 触发自定义事件的名字 默认是onGMSMessageSent
 * @returns {object} removeEventListener - 触发该方法删除自定义事件
 */

const useGMSCallback = (actions, eventName='onGMSMessageSent') => {
  const actionsRef = {};

  actionsRef.current = actions;
  //广播消息
  const eventHandler = ({ data }) => {
    const currentActions = actionsRef.current;
    if (Array.isArray(currentActions)) {
      const actionItem = currentActions.find((item) => item.type === data.type);

      if (actionItem) {
        actionItem.callback(data);
      }
    } else {
      if (currentActions.type === data.type) {
        currentActions.callback(data);
      }
    }
  };
  window.addEventListener(eventName, eventHandler);
  return {
    removeEventListener: () => {
      window.removeEventListener(eventName, eventHandler);
    },
  };
};

export default useGMSCallback;