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

时间:2018-08-15 19:04:07

标签: reactjs react-redux immutable.js reducers

我在使用Immutable的地方有我的reducer,我需要根据从我的API收到的数据来更新状态。接收到的数据是一个对象。因此,每次接收数据时,我都需要将该对象推送到数组中,即创建一个对象数组。在这里面临一个问题。以下是我在Reducer中的代码:

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)行不需要更新我的状态,而是需要每次在天气数组中推送新数据。请让我知道是否有相同的输入,因为这只是更新我的状态而没有给我一个数组。

1 个答案:

答案 0 :(得分:1)

好吧,我建议您首先使用Private Sub Add_Click() 'Copy input values to sheet. Dim lastRow As Long Dim ws As Worksheet Set ws = Sheets("Risk&Opp") lastRow = ws.Range("B" & Rows.Count).End(xlUp).Row + 1 ws.Range("B" & lastRow).Value = ComboBox1.Value ws.Range("C" & lastRow).Value = ComboBox2.Value ws.Range("D" & lastRow).Value = TextBox1.Value ws.Range("E" & lastRow).Value = TextBox2.Value ws.Range("F" & lastRow).Value = ComboBox4.Value ws.Range("G" & lastRow).Value = ComboBox5.Value ws.Range("H" & lastRow).Value = Me.ComboBox6.Value ws.Range("I" & lastRow).Value = Me.ComboBox7.Value ws.Range("J" & lastRow).Value = Me.ComboBox8.Value ws.Range("K" & lastRow).Value = Me.TextBox3.Value ws.Range("M" & lastRow).Value = Me.TextBox4.Value ws.Range("O" & lastRow).Value = Me.ComboBox9.Value ws.Range("P" & lastRow).Value = Me.TextBox5.Value ws.Range("Q" & lastRow).Value = Me.TextBox6.Value 函数,以使数组是不可变的List,否则您会混淆类型,并且它们确实很烦人。 也就是说,按照当前的实现(意味着使用数组而不是列表),您可以执行以下操作:

fromJs

这会将switch (action.type) { case actionTypes.FETCH_WEATHER_SUCCESS: { return state.set('weather',state.get('weather').concat(action.data)) .set('fetchWeatherError', '') } 添加到天气数组的末尾。如果使用列表而不是数组,则这种特定情况的实现将是相同/相似的,因为它们都共享action.data方法。