我遇到了一个关于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后是否需要
答案 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