ReactJS.NET MVC 教程不起作用

ReactJS.NET MVC tutorial doesn't work?

本文关键字:不起作用 教程 MVC NET ReactJS      更新时间:2023-09-26

我正在尝试在Visual Studio中设置一个新项目,该项目将是MVC 5,其中包含用ReactJS编写的单页应用程序。所以我遵循了 ReactJS 网站上的指南。

到了运行项目的第一部分,由于JSX,我遇到了语法错误(浏览器似乎想将其解释为普通的JavaScript,这非常有意义)。 所以我在脚本标签中添加了type="text/jsx"

总的来说,我的 HTML/JSX 看起来像这样:

通过剃刀视图输出 HTML

<!doctype html>
<html>
  <head>
    <title>Hello React</title>
  </head>
  <body>
    <div id="content"></div>
    <script src="http://fb.me/react-0.12.2.js"></script>
    <script type="text/jsx" src="/Scripts/Tutorial.jsx"></script>
  </body>
</html>

教程.jsx

var CommentBox = React.createClass({
  render: function() {
    return (
      <div className="comment-box">
        Hello, world! I am a CommentBox.
      </div>
    );
  }
});
React.render(
  <CommentBox />,
  document.getElementById('content')
);

我不明白 - 我做错了什么? 除了向脚本标签添加type="text/jsx"之外,我还遵循了本教程。 我假设需要包含一些东西来处理将 JSX 转换为普通 JS,但本教程似乎没有提到这一点。

我在 Chrome 开发者工具控制台中根本没有收到任何错误。

我想

通了 - 本教程缺少两件事:

  1. 脚本包含应该这样完成,使用类型声明:

    <script type="text/jsx" src="/Scripts/Tutorial.jsx"></script>

  2. JSX 转换器需要包括在内:

    <script src="http://fb.me/JSXTransformer-0.12.2.js"></script>

因此,Razor 视图的完整 HTML 输出应如下所示:

<!DOCTYPE html>
<html>
  <head>
    <title>Hello React</title>
  </head>
  <body>
    <div id="content"></div>
    <script src="http://fb.me/react-0.12.2.js"></script>
    <script src="http://fb.me/JSXTransformer-0.12.2.js"></script>
    <script type="text/jsx" src="/Scripts/Tutorial.jsx"></script>
  </body>
</html>

看起来他们需要更新他们的教程。

更新:

评论者@DanielLoNigro添加了这个有用的提示:

实际上,如果您使用的是 ReactJS.NET,则不需要使用客户端JSXTransformer。只需确保在 Web.config 文件中配置了 JSX 处理程序(应该有一个 .jsx 处理程序)。

以下是在web.config中注册.jsx处理程序的方式:

<handlers>
  <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified"/>
  <remove name="Babel" />
  <add name="Babel" verb="GET" path="*.jsx" type="React.Web.BabelHandlerFactory, React.Web" preCondition="integratedMode" />
</handlers>

在这种情况下,不需要在脚本标记中使用type="text/jsx"。

对我来说

,即使我的系统是 64 位,我也必须安装 JavaScriptEngineSwitcher.V8.Native.win-x86 而不是 JavaScriptEngineSwitcher.V8.Native.win-x64 它解决了这个问题。听到为什么我必须安装 x86 软件包会很有趣。

PS:请注意,这是针对 ASP.Net MVC。

您需要确保的第一件事是您确实在创建一个 ASP.NET MVC 5 应用程序,而不是 ASP.NET Core,因为教程是不同的。

对于 ASP.NET MVC 4和5:https://reactjs.net/getting-started/tutorial_aspnet4.html对于 ASP.Net 核心:https://reactjs.net/getting-started/tutorial.html

如果要创建 ASP.NET MVC 5 应用程序,请执行以下步骤:

步骤:

  1. 创建一个新的 MVC 5 项目。
  2. 在包管理器控制台中,安装以下 NuGet 包:

安装包反应.js

Install-Package React.Web.Mvc4

您会注意到将在"脚本"中创建一个名为"react"的文件夹

  1. 在脚本文件夹中,创建一个新的".jsx"文件并将其命名为:

教程.jsx

这是你的反应代码将要去的地方。

  1. 将以下代码复制到新创建的".jsx"文件中:

var CommentBox = React.createClass({ 
    render: function() { 
        return (
          <div className="commentBox">
            Hello, world! I am a CommentBox.
          </div>
        ); 
     } 
   }); 
ReactDOM.render(
    <CommentBox />, 
     document.getElementById('content') 
);

  1. Index视图中(位于主文件夹中的视图下),放置以下代码:
@{ Layout = null; }
<html>
<head>
  <title>Hello React</title>
</head>
<body>
  <div id="content"></div>
  <script src="@Url.Content(" ~/Scripts/react/react.js ")"></script>
  <script src="@Url.Content(" ~/Scripts/react/react-dom.js ")"></script>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/remarkable/1.7.1/remarkable.min.js"></script>
  <script src="@Url.Content(" ~/Scripts/Tutorial.jsx ")"></script>
</body>
</html>

现在,如果您运行该应用程序,您应该在浏览器窗口中收到以下内容:"你好,世界!我是一个评论框。