Получить один элемент из массива редуктора - PullRequest
0 голосов
/ 30 января 2019

У меня есть компания-редуктор, которую я хотел бы содержать в массиве компаний.Поскольку каждый объект достаточно велик, когда пользователь переходит на /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;
  }
};

Можно ли мне обновить состояние в редукторе и просто вернуть 1 компанию?Как показано выше, это вернет все компании в этом состоянии, хотя логически это не имеет смысла с 'GET_COMPANY'

Мое действие:

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

1 Ответ

0 голосов
/ 30 января 2019

Вам нужен какой-то идентификатор или имя или другое свойство объекта компании, который вы хотите получить, и чем вы можете использовать метод 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...