Почему IE 11 отображает пустую страницу в приложении React

У меня проблема с IE 11 и моим приложением для реагирования. Я использую Webpack, babel и polyfill.io cdn, и все идет хорошо, пока не будет рендеринг связанного файла, а затем он перестает что-либо делать. Вы хоть представляете, что может пойти не так?

Заранее спасибо.


person itgirl1234    schedule 05.12.2018    source источник
comment
Все, что мне нужно было сделать, это установить пакет core-js npm, а затем добавитьcore-js/stable в массив entry конфигурации webpack.   -  person totymedli    schedule 12.02.2021
comment
stackoverflow.com/questions/55967048   -  person Naidim    schedule 24.02.2021
comment
Вы используете es6? Поскольку классы (в javascript) не поддерживаются в IE 11 (caniuse.com/?search=class )   -  person CrazyVideoGamer    schedule 16.03.2021


Ответы (9)


React несовместим сразу с IE,

Из официальной документации:

React поддерживает все популярные браузеры, включая Internet Explorer 9 и выше, хотя некоторые полифиллы требуются для старых браузеров, таких как IE 9 и IE 10.

Мы не поддерживаем старые браузеры, которые не поддерживают методы ES5, но вы можете обнаружить, что ваши приложения действительно работают в старых браузерах, если на странице включены полифиллы, такие как es5-shim и es5-sham. Если вы выберете этот путь, вы будете сами по себе.


Чтобы ваше приложение работало в IE (11 или 9), вам необходимо установить React-app-polyfill:

https://www.npmjs.com/package/react-app-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"
]

Дополнительная информация на официальном сайте

person Treycos    schedule 05.12.2018
comment
теперь я получаю SCRIPT5007: Невозможно установить свойство «найти» неопределенной или нулевой ссылки, есть идеи, почему? - person itgirl1234; 05.12.2018
comment
Array.find (), похоже, вообще не совместим с IE: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/ Я не знаю, может ли babel что-нибудь с этим поделать - person Treycos; 05.12.2018
comment
Получаю ту же ошибку, но это решение не работает для меня. - person Anand; 12.02.2019
comment
@Treycos Есть предложения? Это решение не работает для меня - person Anand; 20.02.2019
comment
Можете ли вы ответить на это stackoverflow.com/questions/57435567/ - person Vinoth; 09.08.2019
comment
Я сделал все, но без разрешения; для решения пришлось удалить функцию стрелки es6 из моего функционального компонента и загруженной страницы (обратите внимание, что этот функциональный компонент был первым компонентом, который был отображен на странице) - person Akber Iqbal; 07.09.2019
comment
Почему эта строка должна быть первой в index.js? Поскольку импорт выполняется асинхронно в соответствии с этим: stackoverflow.com/a/35552247/4936168 - person Quentin D; 11.03.2020

Для всех, кто сталкивается с этой проблемой,

Если react-app-polyfill у вас не работает, попробуйте core-js.

$ npm install core-js

Убедитесь, что это первая строка в вашем файле src / index.js:

import 'core-js/stable'

Также вы можете не увидеть исправление, когда находитесь в разработке.

Для меня проблема решилась только в производственной версии (реактивная сборка)

person Kurisubo    schedule 04.07.2019

Пакет react-app-polyfill поможет работать с приложением react в ie9 и ie11. Это будет работать как в среде разработки, так и в производственной среде.

Выполните следующие действия. 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 начать запускать снова

person Rayees Pk    schedule 17.05.2020

react-app-polyfills у меня работает только в продакшене, а не в разработке. Создайте, разверните и протестируйте его.

person Konstantin Zlatkov    schedule 25.08.2019
comment
для меня он работает только локально (npm start), но при развертывании (npm run build) не работает :( - person anhtv13; 03.12.2019

Если вы используете Object.assign () в своем редукторе (например) или некоторые другие функции, которые IE11 не поддерживает без полифиллинга, у вас может возникнуть эта проблема.

person Vjeko Babic    schedule 05.12.2018
comment
У меня есть полифилл, похоже, проблема вызывает экспорт const - person itgirl1234; 05.12.2018
comment
Можете ли вы ответить на это stackoverflow.com/questions/57435567/ - person Vinoth; 09.08.2019

Я попробовал решения, предложенные выше, но все еще не мог заставить страницу работать ни в IE11, ни в моей старой iOS 9.3.2 ...

Я сделал именно то, что было предложено @Treycos и @Kurisubo, но без разрешения; для решения пришлось заменить функцию стрелки es6 из моего функционального компонента на декларативный стиль старой школы и страницу, загруженную в IE 11 и iOS 9.3.2

ПРИМЕЧАНИЕ: этот функциональный компонент был первым компонентом, отображаемым на странице.

Добавьте это здесь, чтобы кто-то мог получить выгоду в будущем.

person Akber Iqbal    schedule 07.09.2019
comment
Акбер, ТЫ ЛЕГЕНДА! Это была именно та проблема, с которой я столкнулся. Ты мне действительно помог. Спасибо. - person InspectorDanno; 10.07.2020

Попробуйте следующий способ решения проблемы: -

Шаг 1: - Сначала установите пакеты: -

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: -

  "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"
    ]
  }

Шаг 4: - Удалите node-module, package.lock.json, yarn.lock, а затем выполните следующую команду: -

 yarn

 yarn start

or
npm install

npm start
person Mehadi Hassan    schedule 16.06.2020
comment
В моем случае мне также пришлось отбросить цель в tsconfig.json до es5, чтобы обойти проблему со стрелкой, которую ie11 не поддерживает. В противном случае это решение сработало для меня. (Или вы можете переписать, однако мне нравятся стрелочные функции в моем исходном коде, поскольку они делают его более читаемым imho. - person aggaton; 16.10.2020

Для тех, кто безуспешно пытался использовать «react-app-polyfill / xxx».

Во-первых: обязательно импортируйте их в свой файл index.js (файл с ReactDOM.render (‹React.StrictMode› ...).

Во-вторых: убедитесь, что вы импортируете его в верхней части кода. Над импортом React из react.

person Brandon Harmon    schedule 05.05.2021

Ни один полифил на земле, похоже, не помог, поэтому я отлаживал целую вечность и, наконец, выяснил «ошибку» разработчика 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, но и объектами и т. Д. Поэтому я убедился, что отправляю ему только настоящие стили, а затем все снова заработало :)

person OZZIE    schedule 11.12.2019