Redux不更新IE11中的属性

时间:2016-03-10 10:24:07

标签: javascript reactjs redux

我遇到了一个关于React& amp;的问题。 Internet Explorer 11中的Redux。

我用redux&创建了一个React应用程序。 thunk + promise中间件。所述应用程序在Chrome,safari和firefox中运行完全正常,但在Internet Explorer 11中运行时,React / Redux不会更新道具。

在检查网络选项卡时,我可以看到Http请求被解雇了。在Redux Reducer中记录此结果也会得到预期的结果。但似乎返回新状态不会更新道具。或者根本触发任何重新渲染组件。 (仅限IE)。

我试过google查看同一条船上是否有人,但我找不到符合我问题的任何内容。

TLDR ; Redux在返回状态后不更新道具并触发组件的重新渲染/更新。 (仅限IE11)。

减速机:

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

action.payload具有正确的值;返回似乎没有更新道具。

控制台中也没有错误

已解决 我不得不添加一个object.assign polyfill;不知道使用babel后是否需要

3 个答案:

答案 0 :(得分:5)

这个问题是因为IE11的ES6支持不佳。我发现您需要填充{4.0, 5.0, 6.0}Promises

至于Babel,可能是因为Babel只将非标准代码转换为标准代码。大多数浏览器默认已实现Object.assign / Promises,所以我猜最新的Babel版本不再需要将其转换为ES5代码了

答案 1 :(得分:0)

有一个类似的问题,但是解决方案与Polyfill(babel-polyfill)无关,因为我已经导入了它们,但是与axios实例配置有关。我找到了问题here的答案。基本上,我要做的就是通过在axios实例配置中添加以下标头来禁用缓存:

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

很明显,其他浏览器(firefox,chrome等)并没有按请求缓存太多,但是对于IE,必须明确设置这些标头。

答案 2 :(得分:-1)

IE 11不支持承诺,您需要使用像 - >这样的polyfill。 https://github.com/stefanpenner/es6-promise