Обновление состояния в react-redux при использовании 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.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) вместо обновления моего состояния мне нужно каждый раз вставлять новые данные в массив погоды. Пожалуйста, дайте мне знать, есть ли какие-либо входы на том же самом, так как это просто обновляет мое состояние, а не дает мне массив.

Вы хотите, чтобы это был массив или список?

jstuartmilne 15.08.2018 21:35
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
0
1
697
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Хорошо, поэтому для начала я рекомендую вам использовать функцию 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. Спасибо!

Nikita Jajodia 15.08.2018 22:13

Другие вопросы по теме