【问题标题】:Unable to get payload from action in reducer inside react native app?无法从 React Native 应用程序内的减速器中的操作中获取有效负载?
【发布时间】:2018-08-16 09:47:54
【问题描述】:

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

这是我的行动

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;
    }
}

我需要“数据”属性中的数据进入组件。

【问题讨论】:

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


    【解决方案1】:

    动作dispatch ({ type: GET_REPORT}) 不包含有效负载,因此undefined。要么你需要让 reducer 来处理动作GET_DATA_SUCCESS 要么修改现有的。

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

    【讨论】:

    • 不工作,我想要来自 getDataSuccess action 的有效负载。首先,我的应用程序调用 getData 操作,然后它向 getDataSuccess 返回一个 json 响应数据,然后它应该将数据作为有效负载返回给减速器。但我越来越不确定了。
    • 检查你的reducer文件,动作GET_REPORT不会派发任何payload,就这么简单
    【解决方案2】:

    通过为 GET_DATA_SUCCESS 添加新的 switch 案例并从 getDataSuccess 获取有效负载并从 GET_REPORT 案例中删除有效负载来解决此问题。 现在 switch 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;
    }

    【讨论】:

      【解决方案3】:

      你的减速器中缺少 GET_DATA_SUCCESS

      【讨论】:

        猜你喜欢
        • 2020-10-31
        • 2023-03-08
        • 1970-01-01
        • 2017-08-31
        • 2018-06-17
        • 2022-10-21
        • 2017-08-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多