У меня есть редуктор, в котором я использую Immutable, и мне нужно обновить свое состояние на основе данных, полученных из моего API. Полученные данные являются объектом. Поэтому каждый раз, когда я получаю данные, мне нужно поместить этот объект в массив, то есть создать массив объектов. Здесь проблема. Ниже приведен мой код в моем редукторе:
import { Map, fromJS } from 'immutable';
import actionTypes from '../actions/actionTypes';
const initialState = Map({
weather: [],
fetchWeatherError: ''
});
export default function appReducer(state = initialState, action) {
switch (action.type) {
case actionTypes.FETCH_WEATHER_SUCCESS: {
console.info("ation", action.data);
return state.set('weather', action.data)
.set('fetchWeatherError', '')
}
case actionTypes.FETCH_WEATHER_ERROR: {
return state.set('fetchWeatherError', action.error)
.set('weather', null)
}
default:
return state;
}
}
Строка return state.set('weather', action.data) вместо обновления моего состояния мне нужно каждый раз вставлять новые данные в массив погоды. Пожалуйста, дайте мне знать, есть ли какие-либо входы на том же самом, так как это просто обновляет мое состояние, а не дает мне массив.





Хорошо, поэтому для начала я рекомендую вам использовать функцию fromJs, чтобы массивы были неизменными Список, иначе у вас будут смешанные типы, и они будут действительно раздражать.
При этом после ваших текущих реализаций (то есть с использованием массивов вместо списков) вы можете сделать следующее:
switch (action.type) {
case actionTypes.FETCH_WEATHER_SUCCESS: {
return state.set('weather',state.get('weather').concat(action.data))
.set('fetchWeatherError', '')
}
Это добавит action.data в конец массива погоды. Если использовать списки вместо массивов, внедрение для этого конкретного случая будет таким же / похожим, поскольку они оба используют метод concat.
Это решает мою проблему. Это решение будет работать, поскольку у меня есть небольшое приложение. Но да, есть смысл использовать fromJS. Спасибо!
Вы хотите, чтобы это был массив или список?