【发布时间】:2018-04-30 05:43:02
【问题描述】:
我已经浏览了这个问题的所有答案:
Getting "Cannot call a class as a function" in my React Project
我仍然无法弄清楚为什么下面会返回错误'Cannot call a class as a function'。就语法而言,我在这里遗漏了什么吗?
- 我正在运行 Gulp、Rollup 和 Babel
- 包含以上所有插件
- reactDOM.render 的选择器很好,不需要导出类
代码:
import React from 'react';
import ReactDOM from 'react-dom';
class App extends React.Component {
constructor(props) {
super(props);
}
render() {
return (
<div />
);
}
}
// Selector is fine, changes bg to red
document.querySelector('#app').style.background = 'red';
ReactDOM.render(<App />, document.querySelector('#app'));
错误:
使用 Rollup 和 Babel 完成 Gulp 任务:
gulp.task('js', () => {
// Package up ES6 moduleswith stream
const stream = plugins.rollupStream({
input: paths.dev + '/script/app.js',
sourcemap: true,
format: 'iife',
name: 'app',
plugins: [
plugins.rollupPluginReplace({'process.env.NODE_ENV': JSON.stringify( 'production' )}),
plugins.rollupPluginJsx({ factory: 'React.createElement' }),
plugins.rollupPluginCommonjs({}),
plugins.rollupPluginNodeResolve({ jsnext: true, main: true }),
plugins.rollupPluginIncludepaths({ paths: [paths.dev + '/script/'] })
]
})
return stream
.on('error', e => {
console.error(e.stack);
notifier.notify({
title: 'Rollup error',
message: e.stack
});
stream.emit('end');
})
// Error handling
.pipe(plugins.plumber())
// Prepare files for sourcemap
.pipe(plugins.vinylSourceStream('app.js', paths.dev + '/script/'))
.pipe(plugins.vinylBuffer())
.pipe(plugins.sourcemaps.init({ loadMaps: true }))
// Convert ES6
.pipe(plugins.babel({ presets: ['es2015', 'react'] }))
// Write sourcemap
.pipe(plugins.sourcemaps.write('.'))
.pipe(gulp.dest(paths.tmp + '/script/'))
.pipe(plugins.browserSync.stream());
});
代码库:
https://github.com/alexplummer/framework-react/blob/master/_dev/script/app.js
【问题讨论】:
-
你导出 App 类了吗?
-
您是否尝试过在您的
index.html中使用<div id="#main"/>代替document.getElementById('main'),?否则,您的代码看起来是正确的。 -
是的,选择器没问题,不管有没有 id 都是一样的问题。
-
你可以尝试在
constructor(props)和调用super(props)时添加道具吗? -
你忘了
import ReactDOM from 'react-dom。
标签: javascript reactjs npm gulp babeljs