You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React JS结合MVC创建登录表单时JSX无法渲染问题求助

解决React JSX无法在MVC项目中渲染的问题

嘿,我来帮你搞定这个JSX渲染失败的问题!首先得明确一个核心点:浏览器本身根本看不懂JSX语法,你写的JSX代码必须先转成普通的JavaScript才能被执行,这大概率就是你遇到的问题。结合你给出的index.cshtml代码片段,我给你梳理几个关键的修复步骤:

1. 补上Babel这个“翻译官”

你现在只引入了React和ReactDOM,但缺了能把JSX转成浏览器能识别的JS的Babel工具。赶紧在页面里加上Babel的CDN脚本,记得放在React相关脚本的后面:

<script src="https://unpkg.com/@babel/standalone/babel.min.js"></script>

另外,你的React代码标签必须加上type="text/babel"属性,告诉Babel:“嘿,这段代码里有JSX,帮我转译一下!”比如:

<script type="text/babel">
  // 这里写你的React组件(带JSX的那种)
  function SignupForm() {
    return (
      <div className="signup-form">
        <h2>登录表单</h2>
        <input type="text" placeholder="用户名" />
        <input type="password" placeholder="密码" />
        <button>登录</button>
      </div>
    );
  }

  ReactDOM.render(<SignupForm />, document.getElementById('signup'));
</script>

2. 检查资源路径和标签闭合

看你提供的代码里,remarkable.min.js的脚本标签没闭合(写成了</scr...),这会导致后面的脚本加载失败,一定要修正成完整的</script>。

另外,资源路径有的加了~/有的没加,在MVC里~/代表项目根目录,建议统一用~/开头的路径,或者打开浏览器控制台的Network标签,看看有没有404错误的资源——如果资源加载失败,React自然也没法正常工作。

3. 等DOM加载完再渲染React组件

有时候页面还没加载完,React就急着找#signup元素,结果找不到就渲染失败了。可以把渲染代码放在DOMContentLoaded事件里,确保页面DOM都加载好了再执行:

<script type="text/babel">
  document.addEventListener('DOMContentLoaded', function() {
    // 你的组件和渲染代码放在这里
    function SignupForm() {
      return (/* JSX内容 */);
    }
    ReactDOM.render(<SignupForm />, document.getElementById('signup'));
  });
</script>

4. 生产环境推荐用构建工具(可选但重要)

如果是正式项目,不建议用CDN+Babel实时编译的方式,毕竟实时转译会影响性能。可以用Webpack、Vite这类构建工具,提前把JSX编译成普通JS文件,再放到项目里引用,这样既高效又稳定。

最后给你一个修正后的完整index.cshtml片段参考:

<body>
  <div class="wrapper" id="signup"></div>

  <link href="~/Assets/Css/bootstrap.min.css" rel="stylesheet" />
  <script src="~/Assets/Js/jquery.min.js" type="text/javascript"></script>
  <script src="~/Assets/JS/react.js"></script>
  <script src="~/Assets/JS/react-dom.js"></script>
  <script src="https://unpkg.com/@babel/standalone/babel.min.js"></script>
  <script src="~/Assets/JS/remarkable.min.js"></script>

  <script type="text/babel">
    document.addEventListener('DOMContentLoaded', () => {
      const SignupForm = () => {
        return (
          <div className="container mt-5">
            <div className="card">
              <div className="card-header">
                <h3>用户登录</h3>
              </div>
              <div className="card-body">
                <form>
                  <div className="mb-3">
                    <label className="form-label">用户名</label>
                    <input type="text" className="form-control" />
                  </div>
                  <div className="mb-3">
                    <label className="form-label">密码</label>
                    <input type="password" className="form-control" />
                  </div>
                  <button type="submit" className="btn btn-primary">登录</button>
                </form>
              </div>
            </div>
          </div>
        );
      };

      ReactDOM.render(<SignupForm />, document.getElementById('signup'));
    });
  </script>
</body>

你先按照上面的步骤调整,重点先搞定Babel的引入和脚本类型的设置,这是解决JSX不渲染最核心的一步。如果还有问题,看看浏览器控制台的报错信息,根据具体错误再调整就好啦~

内容的提问来源于stack exchange,提问作者Mohan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:33:07