【问题标题】:ReactJs CreateClass is not a functionReactJs CreateClass 不是一个函数
【发布时间】:2018-03-10 23:33:36
【问题描述】:
var React = require('react');

module.exports=React.createClass({
   render:function(){
   return(
        <div>
           <h1> the list  </h1>
        </div>   
   )}
})

当我运行上述代码时,出现以下错误:

app.js:4 Uncaught TypeError: React.createClass is not a function

这是因为版本不同还是拼写错误?

package.json-I have included create-react-class as seen here but not in the bower.json file 


 {
    "dependencies": {
        "browser-sync": "^2.18.13",
        "browserify": "^14.4.0",
        "create-react-class": "^15.6.2",
        "ejs": "^2.5.7",
        "express": "^4.16.0",
        "gulp": "^3.9.1",
        "gulp-live-server": "0.0.31",
        "react": "^16.0.0",
        "reactify": "^1.1.1",
        "vinyl-source-stream": "^1.1.0"
      }
    }

gulpfile.js - 我在这个文件中是否缺少一些依赖项

var gulp= require('gulp');
var LiveServer= require('gulp-live-server');
var browserSync=require('browser-sync');
var browserify = require('browserify');
var reactify= require('reactify');
var source = require('vinyl-source-stream');

gulp.task('live-server', function(){

    var server= new LiveServer('server/main.js');
    server.start();
})

gulp.task('bundle',function(){
  return browserify({
    entries:'app/main.jsx',
    debug:true,
  })
  .transform(reactify)
  .bundle()
  .pipe(source('app.js'))
  .pipe(gulp.dest('./.tmp'))

})


gulp.task('serve',['bundle','live-server'],function(){
    browserSync.init(null,{
        proxy: "http://localhost:7777",
        port:9001
    })
})

我的 main.jsx 有以下内容

 var React = require('react');
var createReactClass = require('create-react-class');

var GroceryItemList=require('./components/GroceryItemsList.jsx');

React.render(<GroceryItemList/>,app);

groceryitems.jsx 有以下内容

var React = require('react');
var createReactClass = require('create-react-class');
module.exports=React.createReactClass({

        render:function(){
            return(
                <div>
                    <h1> Grocery Listify </h1>
                </div>

            )

        }
})    

添加 createReactClass 时出现错误:createReactClass 不是函数,添加导入和 ES6 语法时出现“非法导入减速” 谢谢,

纳温

【问题讨论】:

  • 尝试导出未命名的 React 组件不会有问题吗?顺便说一句,您将来可能应该使用更新后且得到很好支持的 ES6 类语法。
  • 我这样做了,结果我的浏览器完全冻结了......奇怪......

标签: reactjs


【解决方案1】:

根据documents,您需要获取 npm create react 类包。在你的项目文件路径的命令行中,你需要做npm install create-react-class --save,然后像这样修改代码:

var React = require('react');
//You need this npm package to do createReactClass
var createReactClass = require('create-react-class');

    module.exports=createReactClass({
            render:function(){
                return(
                    <div>
                        <h1> the list  </h1>
                    </div>   
                )
            }

你还需要 React DOM 来呈现这样的组件:

npm install react react-dom
var ReactDOM = require('react-dom');
ReactDOM.render(<GroceryItemList/>,app);

【讨论】:

  • 我在控制台上收到此错误'createReactClass' is not a function
  • 你是否从命令行执行“npm install create-react-class --save”来安装包?
  • 如果我们使用 module.exports=createReactClass 它不会给出错误 createReactClass' is not a function
  • 我仍然得到一个错误......基本上在控制台中我得到了类似函数的东西,比如说:Greeter,还没有被声明......奇怪......
  • 我得到了同样的错误,但是在npm install create-react-class之后,我现在在服务器端得到一个错误node_modules/client-sessions/lib/client-sessions.js:259 var components = content.split("."); ^ TypeError: Cannot read property 'split' of undefined at Object.decode (.../project/node_modules/client-sessions/lib/client-sessions.js:259:28) at Namespace.io.sockets.on.socket (.../project/server.js:62:27) ...[nodemon] app crashed - waiting for file changes before starting...我不明白发生了什么。不管我怎么做都会发生这种情况。
【解决方案2】:

这肯定是版本问题,如果您是新人,我建议您通过扩展 React.Component 而不是使用 React.createClass 创建一个 React component,因为它从版本 16.0 开始已被弃用并且已被移动到一个单独的包'create-react-class' @Dream_Cap 也提到

还可以使用 ES6 语法进行导入。您可以将代码修改为

import React from 'react';

export default class App extends React.Component {
    render(){
       return(
           <div>
               <h1> the list  </h1>
           </div>   
        )
     }
}

【讨论】:

  • 当我尝试导入解析错误时得到这个:第 1 行:解析文件时非法导入声明:
  • 尝试“const React = require('react')”
  • 优秀的答案!但是当我保留default 时,它抛出了错误:...does not contain an export named ...。然后我使用export class ... 没有default。你能帮我理解default这里的需要吗?
【解决方案3】:

感谢所有帮助。这是最终答案的样子: 1)使用react-dom来渲染

 var ReactDOM = require('react-dom');
  var List=require('./components/List.jsx');
  ReactDOM.render(<List/>,app);

2) 使用 create-react-class (not react) 并将其导出 'module.exports= createReactClass({.... 而不是 module.exports=React.createReactClass (这会产生错误 'createReactClass' is not a function

再次感谢大家! '

【讨论】:

    【解决方案4】:

    如果您收到错误消息,指出 React.creatClass 是一个未定义的函数,那是因为较新版本的 React 不支持。

    您可以尝试以下步骤。

    安装create-react-class npm 包:

    npm install --save-dev create-react-class
    

    然后在ReactDom变量下新建一个变量:

    var createReactClass = require('create-react-class');
    

    现在不要使用React.createClass() 作为组件,而是使用createReactClass() var。

    示例: 替换这个:

    var TodoComponent = React.createClass({
        render: function() {
            return(`<h1>`Helloooo`</h1>`);
        }
    });
    

    有了这个:

    var TodoComponent = createReactClass({
        render: function() {
            return(`<h1>`Helloooo`</h1>`);
        }
    });
    

    【讨论】:

    • 嗨有同样的问题,但现在我面临ReferenceError: require is not defined
    【解决方案5】:
    import React, { Component } from 'react';
    import logo from './logo.svg';
    import './App.css';
    
    const App = function(){};
    App.prototype = Object.create(Component.prototype);
    App.prototype.render = function(){
         return (
          <div className="App">
            <header className="App-header">
              <img src={logo} className="App-logo" alt="logo" />
              <h1 className="App-title">Welcome to React</h1>
            </header>
            <p className="App-intro">
              To get started, edit <code>src/App.js</code> and save to reload.
            </p>
          </div>
         )
       }
    export default App;
    

    这样可以避免Class关键字

    【讨论】:

      【解决方案6】:

      React.createClass 未在更新的文档中列出,您必须使用 ECMA6 类的 createComponent

      【讨论】:

        【解决方案7】:

        先尝试 npm install 可能是你在 package.json 中的依赖没有完全安装。

        【讨论】:

          猜你喜欢
          • 2016-05-16
          • 2022-11-12
          • 2017-07-15
          • 2019-08-05
          • 1970-01-01
          • 2015-10-29
          • 2021-12-05
          • 2020-04-05
          • 2021-11-02
          相关资源
          最近更新 更多