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
Ответы
Ответ 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"
}
});
Ответ 3
IE 11 Не поддерживает promises, вам нужно использовать polyfill like → https://github.com/stefanpenner/es6-promise