【问题标题】:Why IE 11 display blank page rendering react app为什么 IE 11 显示空白页渲染反应应用
【发布时间】:2019-05-07 00:02:28
【问题描述】:

我在使用 IE 11 和我的 react 应用时遇到了问题。我使用 Webpack、babel 和 polyfill.io cdn,在渲染捆绑文件之前一切都很好,然后它停止做任何事情。 您知道可能出了什么问题吗?

提前致谢。

【问题讨论】:

标签: javascript reactjs internet-explorer rendering polyfills


【解决方案1】:

React 不兼容 IE,

来自官方文档:

React 支持所有流行的浏览器,包括 Internet Explorer 9 及更高版本,但旧版浏览器(如 IE 9 和 IE 10)需要一些 polyfill。

我们不支持不支持 ES5 方法的旧浏览器,但是 如果使用 polyfill,您可能会发现您的应用确实可以在旧版浏览器中运行 例如 es5-shim 和 es5-sham 都包含在页面中。你在你的 如果您选择走这条路,就拥有自己。


要使您的应用程序在 IE(11 或 9)上运行,您必须安装 React-app-polyfill:

https://www.npmjs.com/package/react-app-polyfill

特点:

每个 polyfill 都确保存在以下语言特性:

Promise (for async / await support)
window.fetch (a Promise-based way to make web requests in the browser)
Object.assign (a helper required for Object Spread, i.e. { ...a, ...b })
Symbol (a built-in object used by for...of syntax and friends)
Array.from (a built-in static method used by array spread, i.e. [...arr])

用法

首先,使用 Yarn 或 npm 安装包:

npm install react-app-polyfill

现在,您可以导入要支持的最低版本的入口点。例如,如果您导入 IE9 入口点,这将包括 IE10 和 IE11 支持。

Internet Explorer 9

// This must be the first line in src/index.js
import 'react-app-polyfill/ie9';

// ...

Internet Explorer 11

// This must be the first line in src/index.js
import 'react-app-polyfill/ie11';

// ...

您还可以使用以下文档配置清单以处理不同的浏览器:https://github.com/browserslist/browserslist

例子:

"browserslist": [
    ">0.2%",
    "not dead",
    "ie >= 9"
]

更多信息来自official site

【讨论】:

【解决方案2】:

react-app-polyfill 包将有助于在 ie9 和 ie11 中使用 react 应用程序。这将适用于开发和生产环境。

请按照步骤 1. 编辑 index.js 文件并在文件的最顶部添加以下行。

    import 'react-app-polyfill/ie9';
    import 'react-app-polyfill/ie11';
    import 'react-app-polyfill/stable';
  1. 编辑 Package.json 文件并在浏览器列表的开发部分添加“ie 11”。默认的产品清单非常丰富,确实包括 11 个,已经通过 >0.2%

    "browserslist": {
    "production": [
      ">0.2%",
      "not dead",
      "not op_mini all"
    ],
    "development": [
      "last 1 chrome version",
      "last 1 firefox version",
      "last 1 safari version",
      "ie 11"
    ]
    

    }

  2. 删除整个 node_modules 文件夹

  3. 运行 npm install 重新安装 node_modules

  4. 运行 npm start 再次运行

【讨论】:

    【解决方案3】:

    对于其他偶然发现此问题的人,

    如果 react-app-polyfill 不适合你,请尝试 core-js。

    $ npm install core-js
    

    确保这是 src/index.js 文件中的第一行:

    import 'core-js/stable'
    

    此外,您在开发过程中可能看不到修复。

    对我来说,问题仅在生产版本(react build)中得到解决

    【讨论】:

      【解决方案4】:

      react-app-polyfills 仅适用于生产环境,不适用于开发环境。构建、部署然后测试它。

      【讨论】:

      • 对我来说,它只能在本地(npm start)中工作,但在部署(npm run build)中它不起作用:(
      【解决方案5】:

      试试下面的方法一定可以解决问题:-

      第一步:- 首先安装包:-

      npm install react-app-polyfill
      
      or
      
      yarn add react-app-polyfill
      

      第 2 步: - 在您的 index.js 文件顶部添加以下命令:-

      import 'react-app-polyfill/ie11';
      
      import 'react-app-polyfill/stable';
      

      第 3 步:- 在您的 package.json 文件中将 browserlist 部分替换为以下内容:-

        "browserslist": {
          "production": [
            ">0.2%",
            "not dead",
            "not op_mini all",
            "ie >= 9"
          ],
          "development": [
            "last 1 chrome version",
            "last 1 firefox version",
            "last 1 safari version",
            "ie 11"
          ]
        }
      

      第四步:- 删除node-module、package.lock.json、yarn.lock,然后运行以下命令:-

       yarn
      
       yarn start
      
      or
      npm install
      
      npm start
      

      【讨论】:

      • 在我的情况下,我还必须将 tsconfig.json 中的目标降到 es5,以解决 ie11 不支持的箭头功能问题。否则,这个解决方案对我有用。 (或者你可以重写,但是我喜欢我的源代码中的箭头函数,因为它使它更具可读性恕我直言。
      【解决方案6】:

      如果您在减速器中使用 Object.assign()(例如)或 IE11 不支持不使用 polyfill 的其他一些函数,您将遇到此问题。

      【讨论】:

      【解决方案7】:

      我尝试了上面提供的解决方案,但仍然无法让页面在 IE11 和我的旧 iOS 9.3.2 上运行...

      我完全按照@Treycos@Kurisubo 的建议做了,但没有解决方案;要解决此问题,必须将我的功能组件中的 es6 箭头功能替换为老式的声明式样式,并在 IE 11 和 iOS 9.3.2 上加载页面

      注意:此功能组件是页面上呈现的第一个组件

      在此处添加此内容,以便将来有人可以受益。

      【讨论】:

      • 阿克伯,你是个传奇!这正是我遇到的问题。你真的帮了我。谢谢。
      【解决方案8】:

      对于那些尝试使用“react-app-polyfill/xxx”但未成功的人。

      首先:确保将它们导入您的“index.js”文件(带有“ReactDOM.render(...)”的文件。

      第二:确保在代码顶部导入它。上面的“从'react'导入React。”

      【讨论】:

        【解决方案9】:

        似乎没有任何 polyfill 有帮助,所以我调试了很长时间,终于从 React 开发人员的“错误”中找出了答案(仅在 IE11 开发工具中看到):

        The above error occurred in the <h2> component:
        in h2 (created by CMSHeading)
        // ...
        

        其中有:

        const {
          ...styles
        } = this.props;
        return (<h2 styles={styles}>...</h2>);
        

        唯一的问题是我不小心发送了其他东西,不仅是 css 样式,还有对象等。所以我确保我只发送真正的样式,然后一切又开始工作了 :)

        【讨论】: