babel 转译 returns 对象而不是字符串或函数
babel transpilation returns object instead of string or function
我的组件代码如下所示。
import React, { Component, PropTypes } from 'react';
export default class HeroBanner extends Component {
constructor(props) {
super(props);
}
render() {
const { columns, content } = this.props.data;
return (
<div className="conatainer-class">
</div>
);
}
}
HeroBanner.propTypes = {
content: PropTypes.object,
columns: PropTypes.string,
};
我的 .babelrc 文件是:
{
"presets": ["react", "es2015","stage-0"],
"plugins": ["transform-es2015-modules-amd"]
}
进行转译时,其输出为 "object" 而不是函数或字符串。
这是输出对象。
横幅:横幅(道具)
esModule: 真
__proto: 对象
这导致 React 抛出错误:
Uncaught Invariant Violation: Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: object.
转译代码:
'use strict';
var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; };
define(['exports', 'react'], function (exports, _react) {
Object.defineProperty(exports, "__esModule", {
value: true
});
var _react2 = _interopRequireDefault(_react);
function _interopRequireDefault(obj) {
return obj && obj.__esModule ? obj : {
default: obj
};
}
function _classCallCheck(instance, Constructor) {
if (!(instance instanceof Constructor)) {
throw new TypeError("Cannot call a class as a function");
}
}
var _createClass = function () {
function defineProperties(target, props) {
for (var i = 0; i < props.length; i++) {
var descriptor = props[i];
descriptor.enumerable = descriptor.enumerable || false;
descriptor.configurable = true;
if ("value" in descriptor) descriptor.writable = true;
Object.defineProperty(target, descriptor.key, descriptor);
}
}
return function (Constructor, protoProps, staticProps) {
if (protoProps) defineProperties(Constructor.prototype, protoProps);
if (staticProps) defineProperties(Constructor, staticProps);
return Constructor;
};
}();
function _possibleConstructorReturn(self, call) {
if (!self) {
throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
}
return call && ((typeof call === 'undefined' ? 'undefined' : _typeof(call)) === "object" || typeof call === "function") ? call : self;
}
function _inherits(subClass, superClass) {
if (typeof superClass !== "function" && superClass !== null) {
throw new TypeError("Super expression must either be null or a function, not " + typeof superClass);
}
subClass.prototype = Object.create(superClass && superClass.prototype, {
constructor: {
value: subClass,
enumerable: false,
writable: true,
configurable: true
}
});
if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;
}
var HeroBanner = function (_Component) {
_inherits(HeroBanner, _Component);
function HeroBanner(props) {
_classCallCheck(this, HeroBanner);
var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(HeroBanner).call(this, props));
_this.createMarkup = _this.createMarkup.bind(_this);
return _this;
}
_createClass(HeroBanner, [{
key: 'createMarkup',
value: function createMarkup(val) {
return {
__html: val
};
}
}, {
key: 'render',
value: function render() {
var _this2 = this;
var _props$data = this.props.data;
var columns = _props$data.columns;
var content = _props$data.content;
var containerClass = 'l-col-xs-' + columns.toString() + ' l-col-nopadding' + ' h-border-bottom';
var storyCardClass = 'storycard storycard-' + content.text_position.toString();
return _react2.default.createElement('div', {
className: containerClass
}, function () {
if (content.headline_url) {
return _react2.default.createElement('a', {
className: storyCardClass,
href: content.headline_url
}, content.image && _react2.default.createElement('img', {
className: 'storycard--image',
src: content.image.image_path,
alt: content.image.image_alt_text
}), _react2.default.createElement('div', {
className: 'storycard--text'
}, content.headline && _react2.default.createElement('div', {
className: 'storycard--headline',
dangerouslySetInnerHTML: _this2.createMarkup(content.headline)
}), content.subhead && _react2.default.createElement('div', {
className: 'storycard--detail',
dangerouslySetInnerHTML: _this2.createMarkup(content.subhead)
})));
}
return _react2.default.createElement('div', {
className: 'storycard storycard-<%= contents.text_position %>'
});
}());
}
}]);
return HeroBanner;
}(_react.Component);
exports.default = HeroBanner;
HeroBanner.propTypes = {
content: _react.PropTypes.object,
columns: _react.PropTypes.string
};
});
如有任何帮助,我们将不胜感激。如果需要更多详细信息,请告诉我!!
如果你
export default
ES6 模块中的某些内容,然后在 ES5 模块中您需要通过 .default
:
访问它
var HeroBanner = require("HeroBannerModule").default;
或类似的,在 RequireJS 中,
HeroBanner = HeroBanner.default
如果您真的想要恢复旧行为,请参阅Misunderstanding ES6 Modules, Upgrading Babel, Tears, and a Solution for more information, and see the add-module-exports plugin。
我的组件代码如下所示。
import React, { Component, PropTypes } from 'react';
export default class HeroBanner extends Component {
constructor(props) {
super(props);
}
render() {
const { columns, content } = this.props.data;
return (
<div className="conatainer-class">
</div>
);
}
}
HeroBanner.propTypes = {
content: PropTypes.object,
columns: PropTypes.string,
};
我的 .babelrc 文件是:
{
"presets": ["react", "es2015","stage-0"],
"plugins": ["transform-es2015-modules-amd"]
}
进行转译时,其输出为 "object" 而不是函数或字符串。
这是输出对象。 横幅:横幅(道具) esModule: 真 __proto: 对象
这导致 React 抛出错误:
Uncaught Invariant Violation: Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: object.
转译代码:
'use strict';
var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; };
define(['exports', 'react'], function (exports, _react) {
Object.defineProperty(exports, "__esModule", {
value: true
});
var _react2 = _interopRequireDefault(_react);
function _interopRequireDefault(obj) {
return obj && obj.__esModule ? obj : {
default: obj
};
}
function _classCallCheck(instance, Constructor) {
if (!(instance instanceof Constructor)) {
throw new TypeError("Cannot call a class as a function");
}
}
var _createClass = function () {
function defineProperties(target, props) {
for (var i = 0; i < props.length; i++) {
var descriptor = props[i];
descriptor.enumerable = descriptor.enumerable || false;
descriptor.configurable = true;
if ("value" in descriptor) descriptor.writable = true;
Object.defineProperty(target, descriptor.key, descriptor);
}
}
return function (Constructor, protoProps, staticProps) {
if (protoProps) defineProperties(Constructor.prototype, protoProps);
if (staticProps) defineProperties(Constructor, staticProps);
return Constructor;
};
}();
function _possibleConstructorReturn(self, call) {
if (!self) {
throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
}
return call && ((typeof call === 'undefined' ? 'undefined' : _typeof(call)) === "object" || typeof call === "function") ? call : self;
}
function _inherits(subClass, superClass) {
if (typeof superClass !== "function" && superClass !== null) {
throw new TypeError("Super expression must either be null or a function, not " + typeof superClass);
}
subClass.prototype = Object.create(superClass && superClass.prototype, {
constructor: {
value: subClass,
enumerable: false,
writable: true,
configurable: true
}
});
if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;
}
var HeroBanner = function (_Component) {
_inherits(HeroBanner, _Component);
function HeroBanner(props) {
_classCallCheck(this, HeroBanner);
var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(HeroBanner).call(this, props));
_this.createMarkup = _this.createMarkup.bind(_this);
return _this;
}
_createClass(HeroBanner, [{
key: 'createMarkup',
value: function createMarkup(val) {
return {
__html: val
};
}
}, {
key: 'render',
value: function render() {
var _this2 = this;
var _props$data = this.props.data;
var columns = _props$data.columns;
var content = _props$data.content;
var containerClass = 'l-col-xs-' + columns.toString() + ' l-col-nopadding' + ' h-border-bottom';
var storyCardClass = 'storycard storycard-' + content.text_position.toString();
return _react2.default.createElement('div', {
className: containerClass
}, function () {
if (content.headline_url) {
return _react2.default.createElement('a', {
className: storyCardClass,
href: content.headline_url
}, content.image && _react2.default.createElement('img', {
className: 'storycard--image',
src: content.image.image_path,
alt: content.image.image_alt_text
}), _react2.default.createElement('div', {
className: 'storycard--text'
}, content.headline && _react2.default.createElement('div', {
className: 'storycard--headline',
dangerouslySetInnerHTML: _this2.createMarkup(content.headline)
}), content.subhead && _react2.default.createElement('div', {
className: 'storycard--detail',
dangerouslySetInnerHTML: _this2.createMarkup(content.subhead)
})));
}
return _react2.default.createElement('div', {
className: 'storycard storycard-<%= contents.text_position %>'
});
}());
}
}]);
return HeroBanner;
}(_react.Component);
exports.default = HeroBanner;
HeroBanner.propTypes = {
content: _react.PropTypes.object,
columns: _react.PropTypes.string
};
});
如有任何帮助,我们将不胜感激。如果需要更多详细信息,请告诉我!!
如果你
export default
ES6 模块中的某些内容,然后在 ES5 模块中您需要通过 .default
:
var HeroBanner = require("HeroBannerModule").default;
或类似的,在 RequireJS 中,
HeroBanner = HeroBanner.default
如果您真的想要恢复旧行为,请参阅Misunderstanding ES6 Modules, Upgrading Babel, Tears, and a Solution for more information, and see the add-module-exports plugin。