Подтвердить что ты не робот

Redux не обновляет свойства в IE11

У меня запуталась странная проблема в отношении React и Redux в Internet Explorer 11.

Я создал приложение React с промежуточным программным обеспечением redux и thunk+. Указанное приложение работает полностью в Chrome, сафари и firefox, но при работе в Internet Explorer 11 реквизитов не обновляются в React/Redux.

Проверяя вкладку сети, я вижу, что запросы Http увольняются просто отлично. Результат регистрации этого результата в редукторах Redux дает ожидаемый результат. Но похоже, что возвращение нового состояния не обновляет реквизиты. Или вызвать любой повторный вывод компонентов. (Только в IE).

Я попробовал google, чтобы узнать, есть ли люди в одной лодке, но я не мог найти ничего, что соответствовало моей проблеме.

TL;DR; Redux не обновляет реквизиты и запускает повторное рендеринг/обновление компонентов после возвращения состояния. (только в IE11).

Разбавление:

const customers = (state = {customers: []}, action) => {
    switch (action.type) {
        case GET + _FULFILLED:
            return Object.assign({}, state, {
                customers: action.payload
            });
            break;
    }
}

action.payload имеет правильное значение; возвращение, похоже, не обновляет реквизиты.

Также нет ошибок в консоли

SOLVED Мне пришлось добавить объект .assign polyfill; не знал, что было необходимо после использования babel

4b9b3361

Ответ 1

Эта проблема связана с низким уровнем поддержки ES6 в IE11. Я обнаружил, что вам нужно polyfill как Promises, так и Object.assign.

Что касается Вавилона, это, вероятно, связано с тем, что Бабель переводит только нестандартный код в стандартный код. Большинство браузеров уже реализуют Promises/Object.assign по умолчанию, поэтому я думаю, что новейшие версии Babel больше не должны пересылать его на код ES5

Ответ 2

У меня была похожая проблема, но решение было связано не с Polyfill (babel-polyfill), поскольку я уже импортировал их, а с моей конфигурацией экземпляра axios. Я нашел ответ на мою проблему здесь. По сути, все, что мне нужно было сделать, это отключить кэширование, добавив следующий заголовок в конфигурацию моего экземпляра axios:

const instance = axios.create({
  headers: {
    Pragma: "no-cache"
  }
});