Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/454.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 第二次操作调用时,React/Redux状态为空_Javascript_Node.js_Reactjs_Redux_React Redux - Fatal编程技术网

Javascript 第二次操作调用时,React/Redux状态为空

Javascript 第二次操作调用时,React/Redux状态为空,javascript,node.js,reactjs,redux,react-redux,Javascript,Node.js,Reactjs,Redux,React Redux,我对React/Redux还比较陌生,所以如果这是一个简单的问题,我表示歉意,但我还没有找到解决方案 我有两个行动: // DESTINATIONS // ============================================== export const DESTINATION_REQUEST = 'DESTINATION_REQUEST'; export const DESTINATION_SUCCESS = 'DESTINATION_SUCCESS'; export c

我对React/Redux还比较陌生,所以如果这是一个简单的问题,我表示歉意,但我还没有找到解决方案

我有两个行动:

// DESTINATIONS
// ==============================================

export const DESTINATION_REQUEST = 'DESTINATION_REQUEST';
export const DESTINATION_SUCCESS = 'DESTINATION_SUCCESS';
export const DESTINATION_FAILURE = 'DESTINATION_FAILURE';

export function loadDestination (params, query) {

    const state = params.state ? `/${params.state}` : '';
    const region = params.region ? `/${params.region}` : '';
    const area = params.area ? `/${params.area}` : '';

    return (dispatch) => {
        return api('location', {url: `/accommodation${state}${region}${area}`}).then((response) => {
            const destination = formatDestinationData(response);

            dispatch({
                type: DESTINATION_SUCCESS,
                destination
            });
        });
    };
}





// PROPERTIES
// ==============================================

export const PROPERTIES_REQUEST = 'PROPERTIES_REQUEST';
export const PROPERTIES_SUCCESS = 'PROPERTIES_SUCCESS';
export const PROPERTIES_FAILURE = 'PROPERTIES_FAILURE';

export function loadProperties (params, query, rows = 24) {

    return (dispatch, getState) => {

        console.log(getState());

        return api('search', {locationId: xxxxxx, rows: rows}).then((response) => {
            const properties = response.results.map(formatPropertiesData);

            dispatch({
                type: PROPERTIES_SUCCESS,
                properties
            });
        });
    };
}
它们与它们的相对减速器结合在一起:

// DESTINATIONS REDUCERS
// ==============================================

export default function destination (state = [], action) {
    switch (action.type) {
    case DESTINATION_SUCCESS:
        return action.destination;
    default:
        return state;
    }
}





// PROPERTIES REDUCERS
// ==============================================

export default function properties (state = [], action) {
    switch (action.type) {
    case PROPERTIES_SUCCESS:
        return action.properties;
    default:
        return state;
    }
}
并且从组件内部调用它们(connectDataFetchers循环调用的操作并将它们返回到组件以进行服务器端呈现):

//PROPTYPES
// ==============================================
Search.propTypes={
目标:PropTypes.object.isRequired,
属性:PropTypes.array.isRequired
};
//行动
// ==============================================
函数MapStateTops({目标,属性}){
返回{目的地,属性};
}
//连接和导出
// ==============================================
导出默认连接(MapStateTops)(
connectDataFetchers(搜索,[loadDestination,loadProperties])
);在fetchData()方法中使用Promise.all():您的操作是并行调度的,而不是一个接一个地调度


为了确保先调用目标,然后调用属性,应该为搜索组件创建一个特定的异步操作创建者。在这种情况下,此异步操作创建者将实现您需要的连续请求。

我同意@pierrepinard_2

使用bluebird,您应该能够同步调用所有给定的promise

这在那件事上应该对你有帮助


让我们知道它是否有效

你能分享如何调用loadDestination和loadProperties吗?@DamienLeroux-我已经从搜索组件中添加了更多的代码,加上
connectDataFetchers
函数我尝试在单独的函数中调用这两个函数,但没有附加到MapStateTops。我怎么维持这种关系?我不明白你的意思。函数的作用是:从应用程序的唯一状态检索道具。接收api请求的顺序是否有问题?如果使用redux thunk中间件来处理异步请求,并希望将dispatch()调用与then()链接起来,请确保始终在异步操作创建者中返回承诺(详细信息请参阅)。例如,您应该在动作创建者中“return dispatch(…);”。谢谢@pierrepinard_2-根据redux thunk的建议,我成功地实现了这一点,并在上面添加了解决方案