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