首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用ReactJ记录xapi事件?

用ReactJ记录xapi事件?
EN

Stack Overflow用户
提问于 2022-10-07 11:42:59
回答 1查看 19关注 0票数 0

我正在用reactjs实现h5p,我可以播放h5p播放器,但是我无法用externalDispatcher.on来查看事件(“xAPI”,(事件).命令。

如何在reactjs中记录h5p事件

错误消息:无法读取未定义的属性(读取“on”)

代码语言:javascript
复制
import { H5P } from "h5p-standalone";
import { useEffect } from "react";

export default function App() {
  useEffect(() => {
    const el = document.getElementById("h5p-container");
    const options = {
      h5pJsonPath: "/h5p/pygame",
      frameJs: "/assets/frame.bundle.js",
      frameCss: "/assets/styles/h5p.css"
    };
    const needAsync = async () => {
      await new H5P(el, options).then((res) => {
        H5P.externalDispatcher.on("xAPI", (event) => {
          console.log(event);
        });
      });
    };
    needAsync();
  }, []);
  return <></>;
}

错误消息

EN

回答 1

Stack Overflow用户

发布于 2022-10-09 11:14:47

您将H5PStandalone导入为H5P,当您想要侦听H5P发送的事件时,这不是要查找的H5P对象。

您需要使用

代码语言:javascript
复制
import { H5P as H5PStandalone } from 'h5p-standalone';

然后用new H5PStandalone(el, options)实例化。这将允许您在实例化H5P对象之后访问真正的H5PStandalone对象。

还有一点提示:您将承诺和异步调用混合在一起。你要么使用前者,比如

代码语言:javascript
复制
const needAsync = () => {
  new H5PStandalone(el, options).then(() => {
    H5P.externalDispatcher.on('xAPI', (event) => {
      console.log(event);
    });
  });
};

或者后者喜欢

代码语言:javascript
复制
const needAsync = async () => {
  await new H5PStandalone(el, options);
 
  H5P.externalDispatcher.on('xAPI', (event) => {
    console.log(event);
  });
};

他们俩都做同样的事。从技术上讲,您也不需要将它们封装在函数中,而是可以直接运行代码(如果使用App语法,则需要声明为异步)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73986662

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档