在redux reducer中调用一个动作

Bok*_*oky 1 javascript reactjs redux react-redux

我的reducer中的代码如下:

import {ADD_FILTER, REMOVE_FILTER} from "../../../../actions/types";

const removeFilter = (state, name) => {
    return state.filter(f => f.name !== name);
};

export default function addRemoveFilterReducer(state = [], action) {
    switch (action.type) {

        case ADD_FILTER:
            let nState = state;

            if(state.some(i => i.name === action.searchFilter.name))
                nState = removeFilter(state, action.searchFilter.name);

            return [...nState, {name: action.searchFilter.name, values: [action.searchFilter.values]}];

            //Call another action    

        case REMOVE_FILTER:
            return removeFilter(state, action.searchFilter.name);

        default:
            return state;
    }
}
Run Code Online (Sandbox Code Playgroud)

我有一个组件陈列室,在展厅内我有搜索组件和内容组件.

在搜索组件里面,我处理过滤,然后我发送一个用这个reducer处理的动作.

添加过滤器后,我想分配一个包含所有过滤器的操作.我怎样才能做到这一点?

该操作将使用reducer处理,我只返回符合搜索条件的汽车并将其显示在内容组件中.

我希望你明白我想说的话.

这种方法有用吗?

Alt*_*tay 7

您可以考虑使用redux-thunk.

您将有两个单独的操作,一个用于添加过滤器,另一个用于进行搜索.您的addFilterAndMakeSearch thunk将负责按顺序调用这些操作.通过这种方式,您不需要从减速器发送动作.

// Thunk
function addFilterAndMakeSearch(searchFilter) {
  return dispatch => {
    dispatch(addFilter(searchFilter);
    dispatch(makeSearch());
  }
}

// Action Creator One
function addFilter(searchFilter) {
  return {
    type: 'ADD_FILTER',
    payload: searchFilter,
  };
}

// Action Creator Two
function makeSearch() {
  return {
    type: 'MAKE_SEARCH',
  };
}
Run Code Online (Sandbox Code Playgroud)

为了使这项工作,您需要使用addFilterAndMakeSearch作为onSubmit处理程序.

  • 这就是我经常做的!如果你使用的是promises,你可以随时使用`then`在promise解决后触发下一个动作. (2认同)