从reducer数组中检索单个元素

时间:2019-01-30 12:09:58

标签: javascript reactjs redux

我有一个公司减速器,希望包含一系列公司。由于当用户继续使用/company/name时每个对象都很大,所以我只想从我的API中获取一个对象并将其添加到此数组中,因此,如果用户多次访问同一公司页面,则无需调用再次是api。

我的减速器:

const initialState = {
  companies: []
};

export default (state = initialState, action) => {
  switch (action.type) {
    case GET_COMPANIES:
      return {
        ...state
      };
    case GET_COMPANY:
      return {
        ...state,
        companies: [action.payload, ...state.companies]
      };
    default:
      return state;
  }
};

我是否有办法更新reducer中的状态并只返回1家公司?如上图所示,这将返回处于该状态的所有公司,尽管从逻辑上讲,使用“ GET_COMPANY”没有意义

我的动作

export const getCompany = name => dispatch => {
  axios.get("/companies/" + name).then(res =>
    dispatch({
      type: GET_COMPANY,
      payload: res.data
    })
  );
};

1 个答案:

答案 0 :(得分:0)

您需要要检索的公司对象的某些“ id”或“ name”或其他属性, 然后您可以使用find方法执行此操作:

action.payload.find(company=>company.id===id)

根据MDN: find()方法返回满足提供的测试功能的数组中第一个元素的值。否则返回undefined。 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/find