我有以下gulpfile.js:
var gulp = require('gulp'),
babel = require('gulp-babel'),
concat = require('gulp-concat'),
react = require('gulp-react'),
sass = require('gulp-sass'),
jsxToJs = function() {
//gulp.src('src/**/*.js')
gulp.src('./src/sections/header/header.js')
.pipe(react())
.pipe(babel({
presets: ['es2015']
}))
.pipe(concat('javascript.js'))
.pipe(gulp.dest('./'));
};
gulp.task('jsxToJs', jsxToJs);
gulp.task('build', ['jsxToJs', 'styles']);
gulp.task('watch', function () {
gulp.watch([
'./src/**/*.js',
'./src/**/*.scss'
], [
'jsxToJs',
'styles'
]);
});
gulp.task('default', ['build', 'watch']);
我正在尝试编译以下功能性React组件:
let Header = (props) => {
return(
<div />
);
};
但是,当我运行gulp创建的javascript.js文件时,我收到以下错误:
Uncaught TypeError: e.render is not a function
如果我将组件转换回旧的方式(这是我在重新查看旧问题时发现的方式):
var Header = React.createClass({
render: function() {
}
});
然后它有效。
查看已编译的JS向我展示了这一点 - 在那里我可以看到render
正在使用旧语法正确编译,但是对于新语法,当它被ESfivified时它没有被重新执行:
// not working
"use strict";
var Header = function Header(props) {
return React.createElement("div", );
};
// working
"use strict";
var Header = React.createClass({ displayName: "Header",
render: function render() {
return React.createElement("div", );
}
});
我已经检查过我已经正确安装了我的gulp并且我正在使用Node 6.10.2。我的gulp文件为scss提供了一些额外的东西,因为我已经删除了这个问题。
其他几点:
getInitialState
中完成的。有谁能解释我做错了什么?