7

沿着 Facebook 的read.js 教程,我得到这个错误:

Uncaught TypeError: Property 'CommentList' of object [object Object] is not a function

实际上 react.js 自己的示例页面有:

Uncaught TypeError: object is not a function

谁能解释正确的用法?


我在教程中的进步

导入以下两个 javascript:

http://fb.me/react-0.4.1.js http://fb.me/JSXTransformer-0.4.1.js

HTML 是一行:

  <div id="content"></div>

而 javascript 或者更确切地说<script type="text/jsx"> 看起来像这样:

var CommentBox = React.createClass({
    render: function() {
        return (
           <div class="commentBox">
        <h1>Comments</h1>
        <CommentList />
        <CommentForm />
        </div>
        );
    }
});


React.renderComponent(
    <CommentBox />,
    document.getElementById('content')
);


var CommentList = React.createClass({
    render: function() {
        return (
        <div class="commentList">
        <Comment author="Pete Hunt">This is one comment</Comment>
        <Comment author="Jordan Walke">This is *another* comment</Comment>
        </div>
    );
    }
});
4

1 回答 1

11

这里有两个主要问题。

首先,当调用 React.renderComponent 时,CommentList 还没有被赋值,因此仍然是未定义的。这会导致错误,因为 CommentBox 的渲染函数引用

<CommentList />

jsx 编译成哪个

CommentList(null)

当 this 执行并且 CommentList 未定义时,我们会收到错误,因为 undefined 不是函数。为了解决这个问题,我们需要做的就是在调用 React.renderComponent 之前移动 CommentList 声明。

其次,Comment 和 CommentForm 没有在任何地方定义。我们需要删除对它们的引用,或者从教程中引入它们的声明。

作为参考,这里是原始代码的 jsfiddle:http: //jsfiddle.net/jacktoole1/nHTr4/

如果我们包含 Comment 的声明但只是删除对 CommentForm 的引用,则修复代码如下所示:http: //jsfiddle.net/jacktoole1/VP5pa/

于 2013-09-18T16:42:02.773 回答