无法从reducer内部的动作中获取有效负载反应本机应用程序?

时间:2018-03-08 05:56:56

标签: react-native redux react-redux redux-thunk

我正在尝试从api获取json响应并成功获取数据但是当我使用redux-thunk在另一个动作中调用动作时,我的数据在reducer内部不可用。 我需要数据"数据"我的reducer里面的属性进入组件。请检查以下代码。

这是我的行动



import { GET_REPORT, GET_DATA_SUCCESS } from './types';

export const getData = (text) => {
    
    return (dispatch) => {
        dispatch ({ type: GET_REPORT})
        fetch('http://api.openweathermap.org/data/2.5/forecast?q='+text+'&cnt=1&units=metric&APPID={key}')
            .then(response => response.json())
            .then(data => getDataSuccess(dispatch, data.list[0]))
            .catch((error) => console.log(error));
    };
};

const getDataSuccess = (dispatch, data) => {
    //console.log(data);
    dispatch({
        type: GET_DATA_SUCCESS,
        payload: data
    });
}




这是我的减速机



import { GET_REPORT } from'../actions/types';

const INITIAL_STATE = {
    data: '',
}

export default (state = INITIAL_STATE, action) => {
    switch(action.type){
        case GET_REPORT:
            console.log(action.payload); // getting undefined
            return {...state, data: action.payload};
        default:
            return state;
    }
}




我需要数据"数据"属性进入组件。

3 个答案:

答案 0 :(得分:2)

你在减速器中缺少GET_DATA_SUCCESS

答案 1 :(得分:0)

操作dispatch ({ type: GET_REPORT})不包含有效负载undefined。您需要使用reducer来处理操作GET_DATA_SUCCESS或修改现有的操作。

为简化起见,dispatch({ type: GET_DATA_SUCCESS, payload: data });包含有效负载,而dispatch ({ type: GET_REPORT})不包含

答案 2 :(得分:0)

通过为GET_DATA_SUCCESS添加新的switch case并从getDataSuccess获取有效负载并从GET_REPORT case中删除有效负载来解决它。 现在切换案例看起来像这样



switch(action.type){
        case GET_REPORT:
            return {...state};
        case GET_DATA_SUCCESS:
            console.log(action.payload);
            return{...state, data: action.payload}
        default:
            return state;
}