如何使此switch case语句不那么冗长?

时间:2018-07-12 21:15:12

标签: javascript reactjs redux

  switch (action.type) {
    case 'FETCH_USER_REQUEST':
    case 'FETCH_USER_SUCCESS':
    case 'FETCH_USER_FAILIURE':
      return { ...state, loading: action.payload.loading, ...action.payload.data };
    case 'UPDATE_USER_REQUEST':
    case 'UPDATE_USER_SUCCESS':
    case 'UPDATE_USER_FAILIURE':
      return { ...state, loading: action.payload.loading, ...action.payload.data };

当前,我有一个这样的switch语句,如您所见,我一直在不断调用REQUEST,SUCCESS,FAILURE。我想要一个函数来创建一个案例,让我检查 'FETCH_USER',它将为REQUEST,SUCCESS,FAILURE创建案例。

我尝试了类似case action.type.includes('FETCH_USER')之类的方法,但这只会与“ FETCH_USER_REQUEST”的第一个结果相匹配并返回该结果。因此,我需要一个函数按此顺序设置三种情况。

2 个答案:

答案 0 :(得分:7)

恕我直言,可以将其替换为简单的if语句:

if (/(FETCH|UPDATE)_USER/.test(action.type))
      return { ...state, loading: action.payload.loading, ...action.payload.data };

答案 1 :(得分:3)

您可以从字符串中删除最后一个单词。

switch (action.type.replace(/_[^_]*$/, '') {
    case 'FETCH_USER':
        return ...
    case 'UPDATE_USER':
        return ...
    ...
}