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



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вам нужен некоторый «идентификатор» или «имя» или другое свойство объекта компании, которое вы хотите получить, и чем вы можете использовать метод find для этого:
action.payload.find(company=>company.id===id)
Согласно МДН: Метод find() возвращает значение первого элемента массива, удовлетворяющего заданной функции тестирования. В противном случае возвращается неопределенное значение. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/find