在ASP.NET MVC中集成ReactJS.net,为何无需import React?
嘿,这个问题问得特别到位!其实核心原因是ReactJS.NET的示例采用了和你之前用的VS模板完全不同的React引入方式,我给你掰扯清楚:
全局挂载的传统方式
ReactJS.NET诞生的时候,ES6模块(也就是import/export)还没成为前端标配,当时很多项目都是通过<script>标签直接把React和ReactDOM加载到浏览器全局的。比如你的ASP.NET MVC页面里,大概率会在布局页或者特定视图里引入类似这样的脚本:<script src="/scripts/react.min.js"></script> <script src="/scripts/react-dom.min.js"></script>这时候
React和ReactDOM就变成了window对象上的全局变量,所以你写React.createClass()的时候,直接就能访问到这个全局的React,根本不需要用import语句来导入。VS模板的模块化打包方式
你之前用的Visual Studio默认React模板,一般是基于Create React App或者类似的现代脚手架,这些工具用Webpack、Rollup这类打包器,采用ES6模块化规范。在这种模式下,每个JS/JSX文件都是一个独立的模块,变量不会自动暴露到全局,必须通过import React from 'react'来显式引入React依赖,不然代码根本找不到React这个变量。额外补充:ReactJS.NET也支持现代写法
现在ReactJS.NET已经支持配合模块化打包工具使用了,如果你想在现有ASP.NET MVC项目里用import这种现代写法,完全可以配置Webpack来打包你的React代码,然后ReactJS.NET依然能帮你处理服务器端渲染的部分。只是教程示例可能还保留了早期的全局写法,毕竟很多用ReactJS.NET的项目都是从老ASP.NET MVC迁移过来的,兼容传统写法更友好。
内容的提问来源于stack exchange,提问作者Lars Holdgaard

