如何通过反应

时间:2016-10-27 10:02:36

标签: reactjs webpack es6-promise

我正在尝试使用我的反应应用程序中的promise来获取数据。我安装并实现了这个polyfill es6-promise,但是在IE8的窗口8上运行,但是IE10窗口7表示未定义'。我认为polyfill是为了涵盖所有IE9 +,但它对我不起作用。有人遇到过这个问题吗?我在使用webpack实现es6-promise polyfill时遗漏了什么吗?

// 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;

3 个答案:

答案 0 :(得分:1)

您可以尝试babel-polyfill。 安装后作为依赖。 将其导入app.js

import 'babel-polyfill';

答案 1 :(得分:1)

我有另一个有趣的解决方案(在这种情况下它适用于我)。我不想将polyfill导入到每个文件中,所以我通过WebpackProvidePlugin提供。

    new webpack.ProvidePlugin({

        "Promise": "babel-polyfill",
        'fetch': 'imports-loader?this=>global!exports-loader? 
                  global.fetch!whatwg-fetch'
    })

所以现在我可以使用这些东西,而无需导入到每个文件中。这是一个非常重要的说明。有些资源建议使用 es6-promise 而不是 babel-polyfill ,我尝试使用它,但它对我不起作用。看起来es6-promise-polyfill在使用webpack + babel的情况下不起作用。所以我切换到 babel-polyfill 。在IE11中测试过,一切都很好。

希望它有所帮助。

最好的问候。 Velidan。

答案 2 :(得分:0)

我建议使用native-promise-polyfill npm module,特别是如果您不需要其他功能babel-polyfill includes

  

这意味着您可以使用Promise或WeakMap等新内置函数,Array.from或Object.assign等静态方法,Array.prototype.includes等实例方法以及生成函数