javascript - ReactJs 组件在 cordovas onDeviceReady 函数之前呈现

标签 javascript cordova reactjs

我目前正在试验 React JS (v.0.14) 和 cordova。 我想使用 cordova 文件插件从 Android 模拟器的 sdcard 中读取一些文件。

当我尝试启动该应用程序时,我总是遇到错误,即 cordova.file.* 未定义。发生这种情况是因为,React 组件是在调用 cordova onDeviceReady 之前呈现的。我在 onDeviceReady 函数中添加了 ReactDOM.render 函数,但这不起作用。

应用程序.js

var app = {
    initialize: function() {
        this.bindEvents();
    },
    bindEvents: function() {
        document.addEventListener('deviceready', this.onDeviceReady, false);
    },
    onDeviceReady: function() {
        console.log('on ready');    // Update DOM on a Received Event

        ReactDOM.render(
          <App />,
          document.getElementById('app')
        );
    }
};
app.initialize();

var App = React.createClass({
    getInitialState: function() {
        return {tiles:[]};
    },

    componentDidMount: function() {
        var PATH = cordova.file.externalRootDirectory + 'testdir/'; //Is called before onDeviceReady

    },

    render: function() {
        return (
            <div>
                <Navigation title="Dashboard"/>
                <Dashboard tiles={this.state.tiles}/>
            </div>
        );
    }
});

index.html:

<body>
        <!-- fixed top navbar -->
        <div id="app">

        </div>
        <!-- Dashboard -->

        <script type="text/javascript" src="cordova.js"></script>
        <script type="text/javascript" src="bower_components/react/react.js"></script>
        <script type="text/javascript" src="bower_components/react/react-dom.js"></script>
        <script type="text/javascript" src="js/browser.min.js"></script>
        <script type="text/babel" src="js/app.js"></script>
    </body>

控制台的错误信息是:

Uncaught TypeError: Cannot read property 'externalRootDirectory' of undefined ...
on ready 

如何在 onDeviceReady 之后或之中加载我的 React 组件?

谢谢和问候, 迈贝克

最佳答案

就我而言,我正在等待设备信息。

看看这个链接 here也是。

点击此链接,我想出了这段代码:

function initApp () {
    ReactDOM.render(<App />, document.getElementById('root'));
};

if (window.cordova) {
    document.addEventListener("deviceready", () => {
        initApp();
    }, false);
} else {
    initApp();
}

关于javascript - ReactJs 组件在 cordovas onDeviceReady 函数之前呈现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33572597/

相关文章:

javascript - 在 moment js 中解析 ISO 字符串到最新

android - Cordova SQLite,从服务器推送值并插入 SQLite 数据库

reactjs - React Redux 表单初始化

javascript - 使用 react-svg-loader 创建 React App 而不会在尝试缩小时弹出失败

javascript - 重组 "withReducer": justification of async reducer function call

javascript - 添加负像素时获得透明度

javascript - 使用 mongoose/MongoDB 中间件删除引用的文档(2021 年)

javascript - Cordova window.open _self 不工作但 _blank 工作

javascript - 获取 URL 到端口号

iphone - 如何使用 PhoneGap API 保存用户登录凭据?