2016-10-27 1 views
0

Я пытаюсь получить данные, используя обещание в своем приложении для реагирования. Я установил и реализовал этот полипол es6-promise, но работает для IE11 в окне 8, но окно 7 IE10 говорит, что «обещание не определено». Я предположил, что polyfill предназначен для покрытия всех IE9 +, но он просто не работает для меня. Кто-нибудь сталкивался с этой проблемой? Я что-то упустил в реализации esp-обещания polyfill с webpack ??Как получить обещания работать в IE10 с реагированием

// calling it my jsx file 

    import React, { PropTypes } from 'react'; 
    import es6promise from 'es6-promise'; // not sure if I need this in the jsx file also?? 
    promise.polyfill(); 
    import 'isomorphic-fetch'; 
    class App extends React.Component { 
     ... 
    } 
    App.propTypes = propTypes; 

    export default App; 

webpack.config.js 
var promise = require('es6-promise').polyfill(); 
switch (TARGET) { 
    case 'build': 
     module.exports = mergeConfig({ 
      plugins: [ 
       // Reference: http://webpack.github.io/docs/list-of-plugins.html#uglifyjsplugin 
       // Minify all javascript. Loaders are switched into minimizing mode 
       new webpack.optimize.UglifyJsPlugin({ 
        compress: { 
         warnings: false 
        } 
       }), 
       new webpack.DefinePlugin({ 
        'process.env': { 
         // This has effect on the react lib size 
         'NODE_ENV': JSON.stringify('production') 
        } 
       }), 
       new webpack.ProvidePlugin({ 
        PROMISE: promise 
       }) 
      ] 
     }); 

     break; 
+0

Нельзя использовать 'es6promise.polyfill', если вы импортируете' es6-prom' как 'es6promise'? –

+0

ОК, значит, если я требую его в веб-пакете, я не должен его импортировать в свой jsx? С этого момента удалите импорт из страницы jsx. Я извлекаю данные, но получаю ошибку. Я действительно хочу знать стандартный вопрос о том, почему полиполк работает с webpack, поэтому он исправляет IE10 – NiseNise

ответ

1

Вы можете попробовать babel-polyfill. После установки в качестве зависимости. Импорта его в вашем app.js

import 'babel-polyfill'; 
0

Я рекомендую использовать native-promise-polyfillnpm module, особенно если вам не нужен другие функции babel-polyfill includes:

Это означает, что вы можете использовать новые встроенные модули, такие как Promise или WeakMap, статические методы, такие как Array.from или Object.assign, такие методы экземпляра, как Array.prototype.includes, и функции генератора

+0

. Какая разница в использовании этого полинаполнения по сравнению с использованием es6-polyfill? – NiseNise

+0

es6-polyfill, вероятно, отлично работает, разница заключается в том, что native-prom-polyfill стремится придерживаться как можно ближе к спецификации Promise и составляет ~ 7kb по сравнению с es6-polyfills ~ 27kb. – mogelbrod

1

У меня есть другой inte (он работает для меня в этом случае). Я не хотел импортировать polyfill в каждый файл, поэтому я предоставлял его через WebpackProvidePlugin.

Так что теперь я могу использовать эти материалы без импорта в каждый файл. И очень важное замечание. Некоторые ресурсы предлагают использовать es6-обещание вместо babel-polyfill, я попытался использовать его, но он не работает для меня. Похоже, что es6-prom-polyfill не работал в случае использования webpack + babel. Поэтому я перешел на babel-polyfill. Протестировано в IE11, и все в порядке.

Надеюсь, это поможет.

С наилучшими пожеланиями. Velidan.

+0

Вы можете поместить babel-polyfill в качестве первого элемента 'entry' в вашей конфигурации Webpack, например, в' entry: ['babel-polyfill', './src/App.js'] ', и эта строка сама по себе трюк. Не нужно делать 'webpack.ProvidePlugin'. –

+0

Да, вы правы, но в этом случае у меня возникла какая-то интересная проблема в IE11: 'Объекты недействительны как дочерний React (найдено: объект с ключами {$$ typeof, type, key, ref, reps, _owner , _магазин}). Если вы хотите отобразить коллекцию детей, используйте массив или оберните объект с помощью createFragment (object) из надстроек React. Проверьте метод рендеринга 'RedBoxError'. Это произошло потому, что полиполк должен быть загружен после React-DOM и React, фактически я изменил порядок, но он не работал так или иначе, поэтому я использовал ProvidePlugin. – Velidan

Смежные вопросы