Redux 不更新 IE11 中的属性



我在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支持很差。我发现您需要同时填充PromisesObject.assign.

至于 Babel

,可能是因为 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

最新更新