我使用ReactJS.Net和ASP.NET 5创建了一个小应用程序。如果我使用@Html.React
呈现组件服务器端并将其绑定到MVC
@using System.Threading.Tasks
@using React.AspNet
@model Models.DashboardViewModel
@Html.React("MessageBoard", new
{
recentPosts = Model.RecentPosts
})
messageBoard.jsx
"use strict";
var MessageBoard = React.createClass({
render: function(){
return (<table className="table forum table-striped">
<thead>
<tr>
<th className="cell-stat"></th>
<th>Topic</th>
<th className="cell-stat text-center hidden-xs hidden-sm">Replies</th>
<th className="cell-stat-2x hidden-xs hidden-sm">Last Post</th>
</tr>
</thead>
<tbody>
{this.props.recentPosts.map(function(boardPost){
return <BoardPostRow post={boardPost}/>;
}, this)}
</tbody>
</table>)
}
});
这一切都很棒。问题是,当我去源,没有.js文件,所以我没有办法调试。对于一些简单的只读元素,这可能没问题。但现在我想呈现一些包含状态的交互元素,一个用于创建新帖子到“留言板”的表单。这是相同* .cshtml文件中的代码。
<div id="newPost"></div>
@section scripts
{
<script src="@Url.Content("~/scripts/Components/Board/boardPostForm.jsx")"></script>
<script src="@Url.Content("~/scripts/Components/Common/textInput.jsx")"></script>
<script>React.render(BoardPostForm({}), document.getElementById("newPost"))</script>
@Html.ReactInitJavaScript()
}
我在控制台中遇到的错误是:
Uncaught SyntaxError: Unexpected token <
textInput.jsx:19 Uncaught SyntaxError: Unexpected token <
(index):69 Uncaught ReferenceError: BoardPostForm is not defined(anonymous function) @ (index):69
(index):70 [.NET] Warning: Each child in an array or iterator should have a unique "key" prop. Check the render method of MessageBoard. See http://fb.me/react-warning-keys for more information.
(index):71 [.NET] Warning: Unknown DOM property class. Did you mean className?
(index):71 Uncaught ReferenceError: MessageBoard is not defined
尝试读取.jsx似乎是一个错误,因为当我点击错误时它会将我带到渲染功能。我在这里错过了什么?也许我需要将jsx-&gt; js转换作为构建过程的一部分(我使用的是Gulp)而不是依赖于ReactJS.NET?
答案 0 :(得分:2)
如果您在网络浏览器中点击/scripts/Components/Board/boardPostForm.jsx
会怎样?它应该显示已编译的JSX,并在文件的顶部有一些ReactJS.NET信息。如果没有,请确保*.jsx
中配置了Web.config
处理程序。看起来应该是这样的:
<add name="ReactJsx" verb="GET" path="*.jsx" type="React.Web.JsxHandlerFactory, React.Web" preCondition="integratedMode" />
我在这里缺少什么?也许我需要将jsx-&gt; js转换作为构建过程的一部分(我使用的是Gulp)而不是依赖于ReactJS.NET?
如果您愿意,可以使用Gulp,由您决定。我这里有一个使用Webpack进行捆绑的示例,以及用于服务器端呈现的ReactJS.NET:https://github.com/reactjs/React.NET/tree/master/src/React.Sample.Webpack