javascript - 如何使用React Hooks重写React Native的TVEventHandler?

标签 javascript reactjs react-native react-hooks

在 React Native 中 documentationTVEventHandler的用法如下:

var TVEventHandler = require('TVEventHandler');

class Game2048 extends React.Component {
  _tvEventHandler: any;

  _enableTVEventHandler() {
    this._tvEventHandler = new TVEventHandler();
    this._tvEventHandler.enable(this, function(cmp, evt) {
      if (evt && evt.eventType === 'right') {
        cmp.setState({board: cmp.state.board.move(2)});
      } else if(evt && evt.eventType === 'up') {
        cmp.setState({board: cmp.state.board.move(1)});
      } else if(evt && evt.eventType === 'left') {
        cmp.setState({board: cmp.state.board.move(0)});
      } else if(evt && evt.eventType === 'down') {
        cmp.setState({board: cmp.state.board.move(3)});
      } else if(evt && evt.eventType === 'playPause') {
        cmp.restartGame();
      }
    });
  }

  _disableTVEventHandler() {
    if (this._tvEventHandler) {
      this._tvEventHandler.disable();
      delete this._tvEventHandler;
    }
  }

  componentDidMount() {
    this._enableTVEventHandler();
  }

  componentWillUnmount() {
    this._disableTVEventHandler();
  }

}

应该如何使用 React Hooks 重写这段代码?我无法弄清楚这一行: this._tvEventHandler.enable(this, function(cmp, evt) {,尤其是 this 部分。

最佳答案

我设法让它发挥作用,希望也能帮助你:

const App = () => {
  const _tvEventHandler = new TVEventHandler();

  const _enableTVEventHandler = () => {
    _tvEventHandler.enable(this, function (cmp, evt) {
      if (evt && evt.eventType === 'right') {
        console.log(evt.eventType);
      } else if (evt && evt.eventType === 'up') {
        console.log(evt.eventType);
      } else if (evt && evt.eventType === 'left') {
        console.log(evt.eventType);
      } else if (evt && evt.eventType === 'down') {
        console.log(evt.eventType);
      }
    });
  };

  const _disableTVEventHandler = () => {
    if (_tvEventHandler) {
      _tvEventHandler.disable();
    }
  }

  useEffect(() => {
    _enableTVEventHandler();
    return () => _disableTVEventHandler();
  });

  return null;
}

关于javascript - 如何使用React Hooks重写React Native的TVEventHandler?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60812829/

相关文章:

reactjs - 无法将类作为函数调用,如果我使用 es6 格式,React 路由器会在控制台中显示错误

javascript - REACT 中的 UnCaughtType 错误, Hook 事件处理程序时的 js

android - 由于 'build' 文件夹问题,适用于 Android 的 React Native 编译在 Windows 上失败

javascript - 让 AngularJS 检查器显示 Controller 标题?

javascript - WebDev新手: How should I approach passing a complex object from PHP to PHP (non-contiguous)

javascript - 类型错误 : Cannot read property 'actions' of undefined (React-Redux)

reactjs - MUI 自动完成(多个)控制值 - 神秘的输入行为

javascript - 如果两个数组具有相同的ownerId,如何比较它们

javascript - 当元素具有子元素并使用 JQuery 时,如何仅更改 HTML 中的文本?

javascript - MongoDB填写查询结果中不包含的数据