首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Reducers和switch语句

Reducers和switch语句
EN

Stack Overflow用户
提问于 2018-01-24 23:48:11
回答 1查看 7.5K关注 0票数 0

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

代码语言:javascript
复制
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
}

在我的动作创建器中,我有以下代码:

代码语言:javascript
复制
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调用我需要的类型呢?我找到的唯一让它工作的方法是将所有选项分离到单独的reducer文件中,然后在联合reducers中调用reducer案例的正确部分。但是它的文件很多,并且必须在我的combineReducers中调用多个文件。我只是试图获得选项,我正在寻找手动组合它的方法。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-24 23:55:52

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

代码语言:javascript
复制
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
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48426439

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档