Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/25.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
Reactjs reducer和switch语句_Reactjs_Redux_React Redux - Fatal编程技术网

Reactjs reducer和switch语句

Reactjs reducer和switch语句,reactjs,redux,react-redux,Reactjs,Redux,React Redux,我对redux有点陌生,我还没有完全理解类型和actionCreator之间的联系。在我创建的测试类中有以下代码: import {GET_AGE_APPROPRIATE_OPTIONS, GET_AGE_OPTIONS, GET_BINDING_TYPE_OPTIONS} from "../actions/options-actions" export default function(state = [], action){ switch(action.type){

我对redux有点陌生,我还没有完全理解类型和actionCreator之间的联系。在我创建的测试类中有以下代码:

import {GET_AGE_APPROPRIATE_OPTIONS, GET_AGE_OPTIONS, GET_BINDING_TYPE_OPTIONS} from "../actions/options-actions"

export default function(state = [], action){
    switch(action.type){
        case GET_AGE_APPROPRIATE_OPTIONS:
            return action.payload.data;
        case GET_AGE_OPTIONS:
            return action.payload.data;
        case GET_BINDING_TYPE_OPTIONS:
            return action.payload.data;
    }
    return state
}
在我的action creator中,我有以下代码:

import axios from 'axios';
const ROOT_URL = `http://localhost:8080/`;
const ROOT_OPTIONS_URL = `${ROOT_URL}options`;

export const GET_AGE_OPTIONS = 'GET_AGE_OPTIONS';
export const GET_AGE_APPROPRIATE_OPTIONS = 'GET_AGE_APPROPRIATE_OPTIONS';
export const GET_BINDING_TYPE_OPTIONS = 'GET_BINDING_TYPE_OPTIONS';

export function getAgeOptions() {
    const url = `${ROOT_OPTIONS_URL}/age`;
    const request = axios.get(url);
    return {
        type: GET_AGE_OPTIONS,
        payload: request

    }
}

export function getAgeAppropriateOptions() {
    const url = `${ROOT_OPTIONS_URL}/ageappropriate`;
    const request = axios.get(url);
    return {
        type: GET_AGE_APPROPRIATE_OPTIONS,
        payload: request

    }
}

export function getBindingTypeOptions() {
    const url = `${ROOT_OPTIONS_URL}/bindingtype`;
    const request = axios.get(url);
    return {
        type: GET_BINDING_TYPE_OPTIONS,
        payload: request

    }
}

问题是,当我调用其中一个函数时,它只调用reducer的case语句的第一部分。我会想,因为我的actionCreator传递了不同的类型,它会切换细节。但是仔细想想,我看不出在不同的操作上如何调用reducer,因为我是在使用mapDispatchToProps之后直接调用该操作的。但是在这个场景中,mapStateToProps都将调用相同的case语句,从而为mapStateToProps获取相同的值。那么,当我调用动作时,如何让减速机调用我需要的类型呢?我发现的唯一方法是将所有选项分离到单独的reducer文件中,然后在combinereducers中调用reducer案例的正确部分。但是它有很多文件,必须在我的合并器中调用多个文件。我只是试图获得选项,我正在寻找手动组合的方法

单个减速器可以有多个选项

const defaultState = {
  ageAppropriateOptions: [],
  ageOptions: [],
  bindingTypeOptions: []
};

export default function(state = defaultState, action){
    switch(action.type){
        case GET_AGE_APPROPRIATE_OPTIONS:
            return {
               ...state,
               ageAppropriateOptions: action.payload.data
            };
        case GET_AGE_OPTIONS:
            return {
                ...state,
                ageOptions: action.payload.data
            };
        case GET_BINDING_TYPE_OPTIONS:
            return {
                ...state,
                bindingTypeOptions: action.payload.data
            };
    }
    return state
}

单个减速器可以有多个选项

const defaultState = {
  ageAppropriateOptions: [],
  ageOptions: [],
  bindingTypeOptions: []
};

export default function(state = defaultState, action){
    switch(action.type){
        case GET_AGE_APPROPRIATE_OPTIONS:
            return {
               ...state,
               ageAppropriateOptions: action.payload.data
            };
        case GET_AGE_OPTIONS:
            return {
                ...state,
                ageOptions: action.payload.data
            };
        case GET_BINDING_TYPE_OPTIONS:
            return {
                ...state,
                bindingTypeOptions: action.payload.data
            };
    }
    return state
}

你在使用redux promise吗?我是,但我不完全明白如何使用它。使用它是因为我的教程设置了所有这些。你在使用redux promise吗?我是,但我不完全理解如何使用它。只使用UDIMY教程来设置所有这些。我不明白它是如何将这个状态连接到组合还原器调用的。你可以考虑这些选项在减速器的状态下可用。MapStateTops中的状态只是store.getState()。在状态中,每个reducer都有自己的状态(某种层次结构)。因此,将其视为storeState.reducerState.someProp。您上面的代码给了我一个运行时错误:未捕获错误:模块构建失败:SyntaxError:意外标记。尽管phpstorm似乎喜欢这个代码,但它在扩展操作符上失败了。我需要通过WebPACK来识别吗?我不明白它是如何把这个状态连接到联合还原器调用的。你可以考虑这些选项在减速器的状态下可用。MapStateTops中的状态只是store.getState()。在状态中,每个reducer都有自己的状态(某种层次结构)。因此,将其视为storeState.reducerState.someProp。您上面的代码给了我一个运行时错误:未捕获错误:模块构建失败:SyntaxError:意外标记。尽管phpstorm似乎喜欢这个代码,但它在扩展操作符上失败了。有什么我需要通过网页才能识别的吗?