React + Reduxで実装されたゲームパイロットがあり、通常のブラウザ(ウェブ版)でもうまく動作します。CordovaでreduxでReactアプリを正しく初期化する方法 - mapStateToPropsが呼び出されていない
最終目標であるCordovaで実行している場合、レデューサーがデータを処理した直後に停止します(サーバーからのトークン)。状態の変更は、接続されたコンテナのmapStateToPropsメソッドに渡されていません。ウェブ版では魅力的に機能します。
"接続"が実現していないようです...何とかしてください。 MapStateToPropsは、レデューサーの作業が終了した後では呼び出されませんが、これはCordovaで実行している場合にのみ発生します。
私はアプリの起動時に問題が発生していると思われます。私は 'deviceready'イベントのための必須の待遇の変種を研究し、検索しました。 "面倒" コンテナが次のようになります
import React from "react";
import ReactDOM from "react-dom";
import {Provider} from "react-redux";
import {Router, Route, IndexRoute, useRouterHistory, hashHistory} from "react-router";
import {createHashHistory} from "history";
import App from "./components/app";
import Game from "./components/game";
import Frontpage from "./components/frontpage";
import {store} from "./store";
function startApp() {
ReactDOM.render(
<Provider store={store}>
<Router history={hashHistory}>
<Route path="/" component={App}>
<IndexRoute component={Frontpage}/>
<Route path="game" component={Game}/>
</Route>
</Router>
</Provider>
, document.querySelector('.my-container')
);
}
const url = document.URL;
const isSmart = (url.indexOf("http://") === -1 && url.indexOf("https://") === -1);
const isRipple = (url.indexOf(":3000") !== -1);
if (isSmart || isRipple) {
document.addEventListener('deviceready', startApp, false);
} else {
startApp();
}
(frontpage.js):これは私のindex.jsxコードです
import React, {Component} from "react";
import {connect} from "react-redux";
import * as actions from "../actions";
import {hashHistory} from "react-router";
class Frontpage extends Component {
componentWillMount() {
if (this.props.token) {
hashHistory.push("/game");
} else {
this.props.fetchToken(this.props.handleMessageFromChannel);
}
}
componentWillUpdate(nextProps) {
if (nextProps.token) {
hashHistory.push("/game");
}
}
render() {
return <div className="frontpage"></div>
}
}
function mapStateToProps(state) {
return { token: state.token };
}
export default connect(mapStateToProps, actions)(Frontpage);
そして店はstore.jsに定義されています。
import reducers from "./reducers/index";
import ReduxPromise from "redux-promise";
import {createStore, applyMiddleware} from "redux";
export const store = applyMiddleware(ReduxPromise)(createStore)(reducers);
ファイルtoken_reducer.jsでトークン減速:
import {FETCH_TOKEN} from "../actions/types";
export default function (state = null, action) {
switch (action.type) {
case FETCH_TOKEN:
return action.payload.data.token;
}
return state;
}
GoogleとSOの検索で、同じ問題を抱える人が見つかりませんでした。 関連性がある場合、私は喜んでもっと多くのファイルを投稿します...?