使用 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
方法。
我有我的减速器,我正在使用 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
方法。