我在Internet explorer 11中遇到了一个关于React和Redux的奇怪问题。
我创建了一个带有redux和thunk+promise中间件的React应用程序。所述应用程序在Chrome,safari和Firefox中运行完全正常,但是在Internet Explorer中运行时,React/Redux不会更新11个props。
在检查网络选项卡时,我可以看到 Http 请求正在正常触发。在 Redux 化简器中记录此结果也会给出预期的结果。但似乎返回新状态不会更新道具。或者触发组件的任何重新渲染。(仅在 IE 中)。
我尝试谷歌看看是否有人在同一条船上,但我找不到任何符合我的问题的东西。
TLDR;Redux 不更新 props 并在返回状态后触发组件的重新渲染/更新。(仅在 IE11 中)。
还原剂:
const customers = (state = {customers: []}, action) => {
switch (action.type) {
case GET + _FULFILLED:
return Object.assign({}, state, {
customers: action.payload
});
break;
}
}
action.payload 具有正确的值;返回似乎不会更新 props。
控制台中也没有错误
已解决 我必须添加一个对象。分配 polyfill;不知道在使用 babel 后需要这样做
这个问题是因为IE11的ES6支持很差。我发现您需要同时填充Promises
和Object.assign
.
,可能是因为 Babel 只将非标准代码转换为标准代码。默认情况下,大多数浏览器已经实现了Promises
/Object.assign
,所以我想最新的 Babel 版本不再需要将其转换为 ES5 代码
有类似的问题,但解决方案与 Polyfill(babel-polyfill)无关,因为我已经导入了它们,而是与我的 axios 实例配置有关。我在这里找到了问题的答案。基本上,我所要做的就是通过在axios实例配置中添加以下标头来禁用缓存:
const instance = axios.create({
headers: {
Pragma: "no-cache"
}
});
显然,其他浏览器(Firefox,chrome等)不会通过请求缓存那么多,但是对于IE,则必须显式设置这些标头。
IE 11 不支持承诺,您需要使用像 --> https://github.com/stefanpenner/es6-promise 这样的 polyfill