对于 React JS,如何解决“未捕获的 TypeError:无法构造 'Comment':请使用 'new' 操作.....”?
Posted
技术标签:
【中文标题】对于 React JS,如何解决“未捕获的 TypeError:无法构造 \'Comment\':请使用 \'new\' 操作.....”?【英文标题】:How to resolve "Uncaught TypeError: Failed to construct 'Comment': Please use the 'new' operat....." with respect to React JS?对于 React JS,如何解决“未捕获的 TypeError:无法构造 'Comment':请使用 'new' 操作.....”? 【发布时间】:2016-03-23 13:06:06 【问题描述】:我在 body 中有一个 home.jsp
<body>
<script type="text/babel" src="../resources/scripts/example.js"></script>
<a href="javascript:Comment();">News</a>
</body>
在单独的 example.js 中,我有以下内容
alert("I am coming here ... BEEP");
var Comment = React.createClass(
loadCommentsFromServer: function()
$.ajax(
url: this.props.url,
dataType: 'json',
cache: false,
success: function(data)
this.setState(data: data);
.bind(this),
error: function(xhr, status, err)
console.error(this.props.url, status, err.toString());
.bind(this)
);
,
getInitialState: function()
return data: [];
,
componentDidMount: function()
this.loadCommentsFromServer();
setInterval(this.loadCommentsFromServer, this.props.pollInterval);
,
render: function()
return (
<div className="comment">
<Comment data=this.state.data />
<span dangerouslySetInnerhtml=__html: data />
</div>
);
);
ReactDOM.render(
<Comment url="/workingUrl" pollInterval=2000 />,
document.getElementById('content')
);
我在 Chrome 控制台中收到以下错误。
Uncaught TypeError: Failed to construct 'Comment': Please use the 'new'
operator, this DOM object constructor cannot be called as a function.
我在 home.jsp 文件中添加了 React js 标签。
如何解决这个问题?请帮帮我。
【问题讨论】:
【参考方案1】:同意特洛伊卡尔森的上述回答。我在 React 本机项目中遇到了类似的问题。我在里面使用了一些内置组件(React native),但没有导入它。全部正确导入后,错误消失了
import
FlatList,
SafeAreaView,
Text,
View,
...
from "react-native";
【讨论】:
【参考方案2】:也许这会对和我有同样问题的人有所帮助...我只是忘记导入我试图渲染的组件(使用 ES6):
import Comment from './comment'
【讨论】:
是的,它确实有帮助!有趣的是,eslint 没有发现丢失的导入。【参考方案3】:您不能通过 Comment()
调用 React 组件 <Comment/>
。该错误要求您创建Comment
类的实例,即类似var comment = new Comment()
的东西。但是,在您的问题中,我们不需要这个。
<body>
<a href="javascript:RenderComment();">News</a>
<div id="content"> </div>
</body>
您的 React 组件 <Comment/>
应该是独立的,并将用作 ReactDOM.render(...)
的参数。因此 Comment
内部不应有 ReactDOM.render(...)
函数。此外,锚元素 click 不能调用 Comment()
,因为它不是一个执行渲染的函数,而是一个 Class
,其 instance
安装在 DOM
上。单击<a/>
标记时,应调用RenderComment()
,这将依次渲染<Comment/>
组件。
var RenderComment = function RenderComment()
ReactDOM.render(React.createElement(
"div", null, " ", Comment, " "
), document.getElementById("content"));
;
在这里,我们正在渲染您使用 React.createClass
定义的 <Comment/>
组件。
var Comment = React.createClass(
// Your component functions and render() method
// No ReactDOM.render() method here
【讨论】:
1) 所以 RenderComment 是一个普通的 JS 函数,对吧?如果是这样,我可以像这个函数 RenderComment() ReactDOM.render( Comment , document.getElementById("content")); 2) 还有为什么 Comment? 是的 RenderComment() 是一个普通的 JS 函数。事实上,要渲染 React,总是需要像这样的普通 JS 函数。通常在文档加载时完成。在您的情况下,它是通过单击按钮完成的。这是唯一的区别。 我得到 VM233:1 Uncaught ReferenceError: RenderComment is not defined(anonymous function) @ VM233:1 也请回答这个问题 2) 还有为什么 Comment? 从 而不是 "text/babel" 中调用 ReactDOM.render(...) 函数以上是关于对于 React JS,如何解决“未捕获的 TypeError:无法构造 'Comment':请使用 'new' 操作.....”?的主要内容,如果未能解决你的问题,请参考以下文章
如何解决 redux-persist 创建同步存储失败。回退到 React.js 中的 noop 存储
React js Cors policy 与 axios api 的问题在 localhost 如何解决?
如何在(Ionic + React.js App)中自动聚焦 IonInput/OtpInput 字段,我已经尝试了所有解决方案