我有一个简单的reactJS组件,如下所示:
var LikeCon = React.createClass({
render: function() {
return (
<span>Like</span>
);
}
});
将其放在名为Common.jsx的文件中。我试图像这样使用antoher jsx文件中的这个LinkeCon组件
var FeedTopic = React.createClass({
render: function() {
var test = false;
return (
<div className="topic">
{LikeCon}
</div>
);
}
});
问题是抛出了这个异常
将“FeedBox”渲染为“react1”时出错:ReferenceError:LikeCon 未定义
这是导入页面上的导入方式
<script src="@Url.Content("~/Scripts/Common.jsx")"></script>
<script src="@Url.Content("~/Scripts/Grid.jsx")"></script>
<script src="@Url.Content("~/Scripts/Feed.jsx")"></script>
我的想法是,如果包含共享组件的Common.jsx是第一个,那么var也可用于其他反应组件吗?
编辑:
这是放在Layout.cshtml
上<script type="text/jsx" src="@Url.Content("~/Scripts/JSXTransformer.js")"></script>
<script type="text/jsx" src="@Url.Content("~/Scripts/Common.jsx")"></script>
<script type="text/jsx" src="@Url.Content("~/Scripts/Grid.jsx")"></script>
<script type="text/jsx" src="@Url.Content("~/Scripts/Feed.jsx")"></script>
该组件现在引用<LikeCon like="0" />
而不是{LikeCon}
。
编辑2:
这就是我使用LikeCon的方式
var TopicComments = React.createClass({
render: function() {
var comment = this.props.data.map(function(com, i) {
return (
<article key={i}>
<div className="commentCon">
<div className="tUImgLnk">
<a title={com.UserName} target="_blank" href={com.UserInfoUrl}>
<img className="tUImg" src={com.UserPicSrc} />
</a>
</div>
<b><a href="#" title={"Visit " + com.UserName} target="_blank">{com.UserName}</a></b> :
<span className="content">
{com.Message}
</span>
<div className="status">
<div className="dateCreated dimText">
{com.DateCreated}
</div>
<LikeCon initialLike={com.Like} initialLikeCount={com.LikeCount} objectId={com.Id} categoryKey={1} userId={this.props.userId} />
<article></article>
</div>
</div>
</article>);
}.bind(this));
return(
<div className="comments">
{comment}
</div>
);
}
});
这是脚本导入的样子
<script src="http://fb.me/react-0.12.2.js"></script>
<script src="@Url.Content("~/Scripts/jquery-2.1.3.min.js")"></script>
<script src="@Url.Content("~/Scripts/jquery.autosize.min.js")"></script>
<script src="@Url.Content("~/Scripts/spin.min.js")"></script>
<script src="@Url.Content("~/Scripts/JSXTransformer.js")"></script>
<script src="@Url.Content("~/Scripts/Grid.jsx")"></script>
<script src="@Url.Content("~/Scripts/Feed.jsx")"></script>
@RenderSection("ScriptFoot", required: false)
@Html.ReactInitJavaScript()
</body>
这是我得到的例外:
将“FeedBox”渲染为“react1”时出错:ReferenceError:LikeCon 在React.createClass.render中没有定义(脚本文档 [7]:83:33) - &gt; React.createElement(LikeCon,{initialLike: this.props.data.Like,我在Script Document [2]:7021:34 at 脚本文档中的包装器(脚本文档[2]:12893:21) [2]:6563:14 at wrapper(Script Document [2]:12893:21)at ReactMultiChild.Mixin.mountChildren(Script Document [2]:12352:42)
在ReactDOMComponent.Mixin._createContentMarkup(脚本文档 [2]:7801:32)在Script Document [2]:7723:14 at wrapper(Script 文件[2]:12893:21)at Script Document [2]:6569:44 at wrapper (脚本文件[2]:12893:21)在脚本文件[2]:6569:44 at 脚本文档中的包装器(脚本文档[2]:12893:21) [2]:13797:38在Mixin.perform(脚本文档[2]:16855:20)at 脚本文档中的renderToString(Script Document [2]:13795:24) [9] [temp]:1:7行:7021专栏:34
答案 0 :(得分:2)
<script src="Scripts/JSXTransformer.js"></script>
{LikeCon}
使用<LikeCon/>
type="text/jsx"
答案 1 :(得分:1)
确保导出LikeCon
组件,并将其导入您要使用的文件中。
var LikeCon = React.createClass({
render: function() {
return (
<span>Like</span>
);
}
});
应该是:
class LikeCon extends React.Component{
render() {
return
<span>Like</span>
);
}
}
export default LikeCon
然后,在您要使用的任何文件LikeCon
组件中,将此文件包含在文件顶部:
import LikeCon from'./path/to/LikeCon.jsx;
注意:我的答案是使用ES2016 ...语法有点不同。