Redux状态managemnet和使用redux-thunk从api读取数据的所有工作都按预期进行。当我成功获取数据时从操作导航到其他屏幕时,导航显示以下警告:
Possible Unhandled Promise Rejection (id: 0):
│ Error: Actions must be plain objects. Use custom middleware for async actions.
我没有任何能帮助我的解决方案。
获取数据的方法:
export function insertFirebaseToken() {
return function action(dispatch) {
const request = axios({
method: 'POST',
url: 'https://beta......',
headers: (
{
'Accept': 'application/json',
'Content-Type': 'application/json',
'Authorization': 'Bearer ....',
}),
data: JSON.stringify(
{
firebase_token: '....',
})
});
return request.then(
response => {
if(response.data.success){
dispatch(saveLoginDataSuccessFailureError());
dispatch(NavigationService.navigate('MyCompanies'));
}
else{
if (Platform.OS === 'android') {
ToastAndroid.showWithGravityAndOffset( 'Error: '+response.data.message, ToastAndroid.LONG, ToastAndroid.BOTTOM, 0, 50);
}
else{
alert('Error in inserting firebase Token.');
}
dispatch(saveLoginDataSuccessFailureError());
}
},
error => {
dispatch(saveLoginDataSuccessFailureError());
ToastAndroid.showWithGravityAndOffset( 'Error: '+error, ToastAndroid.LONG, ToastAndroid.BOTTOM, 0, 50);
}
);
}
}
companyClickedSuccessFailureError方法:
export const companyClickedSuccessFailureError = () => {
return{
type: COMPANY_CLICKED_SUCCESS_FAILURE_ERROR,
};
}
activeReducers:
import {
GET_COMPANIES_SUCCESS,
COMPANY_CLICKED_REQUEST,
COMPANY_CLICKED_SUCCESS_FAILURE_ERROR,
} from '../actions/types';
const initialState ={
loading: false,
arrayRecentCompanies: []
};
export default (state = initialState, action) => {
switch(action.type){
case COMPANY_CLICKED_REQUEST:
return {...state, loading: true};
case COMPANY_CLICKED_SUCCESS_FAILURE_ERROR:
return {...state, loading: false};
case GET_COMPANIES_SUCCESS:
return {...state, loading: false, arrayRecentCompanies: action.payload};
default:
return state;
}
}
NavigationService.js:
import { NavigationActions } from 'react-navigation';
let navigator;
function setTopLevelNavigator(navigatorRef) {
navigator = navigatorRef;
}
function navigate(routeName, params) {
navigator.dispatch(
NavigationActions.navigate({
routeName,
params,
})
);
}
// add other navigation functions that you need and export them
export default {
navigate,
setTopLevelNavigator,
};
答案 0 :(得分:1)
从NavigationService.navigate
返回的结果不是redux动作(显然,您只能分派redux动作)。我认为您可以直接调用它,而不必在redux dispatch
调用中进行包装。