使用 Immutable 时在 react-redux 中更新状态

Updating state in react-redux when using Immutable

我有我的减速器,我正在使用 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.log("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 函数,这样数组是不可变的 List 否则您会混淆类型,而且它们往往非常烦人。 也就是说,按照您当前的实现(意味着使用数组而不是列表),您可以执行以下操作:

switch (action.type) {
        case actionTypes.FETCH_WEATHER_SUCCESS: {

            return state.set('weather',state.get('weather').concat(action.data))
                .set('fetchWeatherError', '')
        }

这会将 action.data 添加到天气数组的末尾。如果使用列表而不是数组,则针对此特定情况的实现将是 same/similar,因为它们都共享 concat 方法。