反应组件中的 onDeviceReady 事件侦听器

Tom*_*nap 7 cordova reactjs cordova-plugins react-dom

在我的反应应用程序中,我尝试使用 Cordova 插件(cordovo-plugin-device)来获取用户的设备版本,如下所示

class LogoHeader extends React.Component {
  componentDidMount () {
    window.addEventListener('deviceready', this.onDeviceReady)
  }
  onDeviceReady () {
    console.log(device.cordova)
  }
  render () {
    ...
  }
}
Run Code Online (Sandbox Code Playgroud)

但出于某种原因,该deviceready事件永远不会被触发。我错过了什么吗?有没有更好的方法在 react 中监听 DOM 事件?

kia*_*hws 5

根据Cordova 文档这个 SO 答案,您应该在您的条目文件中添加侦听器(可能index.js

import React from 'react';
import ReactDOM from 'react-dom';
import App from './App';

const startApp = () => {
    console.log(device.cordova)
    ReactDOM.render(
      <App />,
      document.getElementById('root')
    );
}

if(!window.cordova) {
  startApp()
} else {
  document.addEventListener('deviceready', startApp, false)
}
Run Code Online (Sandbox Code Playgroud)

您还可以将其device.cordova作为 props传递给,App以便您可以在其他组件中访问它。

...
ReactDOM.render(
      <App device={device
         ? device.cordova
         : null}/>,
      document.getElementById('root')
    );
...
Run Code Online (Sandbox Code Playgroud)