7

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

我进入了运行项目的第一部分,由于 JSX(浏览器似乎想将其解释为完全合理的 vanilla JavaScript)而出现语法错误。所以我添加type="text/jsx"到脚本标签。

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

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 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 转换为 vanilla JS,但本教程似乎没有提到这一点。

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

4

4 回答 4

10

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

  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 的处理程序)。

于 2015-01-29T02:03:11.567 回答
3

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

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

于 2019-03-15T02:41:50.697 回答
3

这是在 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" 。

于 2017-04-05T21:14:56.170 回答
2

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

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

如果您正在创建 ASP.NET MVC 5 应用程序,请按照以下步骤操作:

脚步:

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

安装包 react.js

安装包 React.Web.Mvc4

您会注意到将在 'Scripts' 中创建一个名为 'react' 的文件夹

  1. 在 Scripts 文件夹中创建一个新的“.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>

现在,如果您运行该应用程序,您应该在浏览器窗口中看到以下内容:'Hello, world! 我是一个评论框。

于 2016-10-19T07:01:20.047 回答