Я продолжаю получать сообщение «Необработанный отказ (ошибка): действия должны быть простыми объектами. Использовать пользовательское промежуточное программное обеспечение для асинхронных действий».
Подробности: я следую этому учебнику * серии 1004 *, но разрабатываю дляAndroid в Windows 10.Используем реактивную версию v0.57.Моя проблема в том, что когда я вызываю this.props.getCurrentLocation () из компонента Home, я получаю эту ошибку.Кажется, что это проблема, с которой столкнулись многие люди, работающие с одним и тем же учебным пособием, поэтому я много читаю, но просто не могу разобраться в этом.
Вот мой код: src/routes/Home/modules/home.js
import update from "react-addons-update";
import constants from "./actionConstants";
import { Dimensions } from "react-native";
// -------------------------------
// CONSTANTS
// -------------------------------
const { GET_CURRENT_LOCATION } = constants; // keeps all the constants in one file
const { width, height } = Dimensions.get("window");
const ASPECT_RATIO = width / height;
const LATITUDE_DELTA = 0.0922;
const LONGITUDE_DELTA = ASPECT_RATIO * LATITUDE_DELTA;
// -------------------------------
// ACTIONS
// -------------------------------
export function getCurrentLocation(){
return (dispatch)=>{
navigator.geolocation.getCurrentPosition(
(position) => {
dispatch({
type:GET_CURRENT_LOCATION,
payload:position
});
},
(error) => {
console.warn("error::" . error.code);
var msg = null;
switch(error.code) {
case error.PERMISSION_DENIED:
// msg = "User denied the request for Geolocation.";
msg = "Usuario denego la solicitud de Geolocalizacion.";
break;
case error.POSITION_UNAVAILABLE:
msg = "Location information is unavailable.";
break;
case error.TIMEOUT:
msg = "The request to get user location timed out.";
break;
case error.UNKNOWN_ERROR:
msg = "An unknown error occurred.";
break;
}
alert(msg);
},
{ enableHighAccuracy: true, timeout: 8000, maximumAge: 10000 }
);
}
}
// -------------------------------
// ACTION HANDLERS
// -------------------------------
function handleGetCurrentLocation(state, action){
return update(state, {
region:{
latitude:{
$set:action.payload.coords.latitude
},
longitude:{
$set:action.payload.coords.longitude
},
latitudeDelta:{
$set:LATITUDE_DELTA
},
longitudeDelta:{
$set:LONGITUDE_DELTA
}
}
});
}
const ACTION_HANDLERS = {
GET_CURRENT_LOCATION:handleGetCurrentLocation
};
const initialState = {
region:{}
};
export function HomeReducer (state = {}, action) {
const handler = ACTION_HANDLERS[action.type];
return handler ? handler(state, action) : state;
};
src / router / Home / modules / actionConstants.js
export default {
GET_CURRENT_LOCATION: "GET_CURRENT_LOCATION"
};
src / маршруты / дома / контейнеры / HomeContainer.js
import { connect } from "react-redux";
import Home from "../components/Home";
import {
getCurrentLocation
} from "../modules/home";
const mapStateToProps = (state) => ({
region:state.home.region
});
const mapActionCreators = {
getCurrentLocation
};
export default connect(mapStateToProps, mapActionCreators)(Home);
app / src / main / AndroidManifest.js
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.taxiapp">
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
src / store / createStore.js
import { createStore, applyMiddleware, compose } from "redux";
import thunk from "redux-thunk";
import makeRootReducer from "./reducers";
import { createLogger } from "redux-logger";
const log = createLogger({ diff: true, collapsed: true });
// Export function that can create our store and autopersist the data
export default (initialState = {}) => {
// Middleware configuration
const middleware = {thunk, log};
// Store enhancers
const enhancers = [];
// Store instantiation
const store = createStore(
makeRootReducer(),
initialState,
compose(
applyMiddleware(...middleware),
...enhancers
)
);
return store;
};
src / router / home / components / Home.js
// Takes care of the state
import React from "react";
import { View, Text } from "react-native";
import {Container} from "native-base";
import MapContainer from "./MapContainer";
class Home extends React.Component {
componentDidMount() {
this.props.getCurrentLocation();
}
render(){
return(
<Container>
{ this.props.region.latitude &&
<MapContainer region={ this.props.region}/>
}
</Container>
);
}
}
export default Home;