【发布时间】:2017-02-19 13:02:01
【问题描述】:
我正在尝试构建一个最小的工作示例,以便在 Visual Studio 2015 中使用 ReactJS 和 TypeScript。
在学习了大多数教程后,发现它们都不起作用,也没有一个完全针对我的需求。
我想将组件编写为 .tsx 文件以具有类型安全性并重用已编写的现有类、定义和接口。
这些应转换为.jsx,以便在cshtml中用作React.render(<SomeComponent />, document.getElementById("content"))。
根据我的项目配置,我会在 SomeCompnent.tsx 中收到 require is not a function 或意外的错误。
以后应该可以使用 ReactJS.NET 的服务器端渲染来提高性能/用户体验。
我是否缺少任何描述如何从头开始使用 TypeScript、ReactJS、Visual Studio 2015、MVC5 的教程?
这些是我项目属性的TypeScript Build 选项卡中的设置:
<TypeScriptTarget>ES5</TypeScriptTarget>
<TypeScriptJSXEmit>React</TypeScriptJSXEmit>
<TypeScriptCompileOnSaveEnabled>True</TypeScriptCompileOnSaveEnabled>
<TypeScriptNoImplicitAny>False</TypeScriptNoImplicitAny>
<TypeScriptModuleKind>CommonJS</TypeScriptModuleKind>
<TypeScriptRemoveComments>False</TypeScriptRemoveComments>
<TypeScriptOutFile />
<TypeScriptOutDir />
<TypeScriptGeneratesDeclarations>False</TypeScriptGeneratesDeclarations>
<TypeScriptNoEmitOnError>True</TypeScriptNoEmitOnError>
<TypeScriptSourceMap>True</TypeScriptSourceMap>
<TypeScriptMapRoot />
<TypeScriptSourceRoot />
这是我SomeComponent.tsx的内容
import * as React from "react";
import * as ReactDOM from "react-dom";
interface IProps {
name:string
}
class SomeComponent extends React.Component<IProps, undefined> {
render() {
return <div>Say hello to {this.props.name}</div>;
}
}
export function render(componentName:string, mountNode: HTMLElement) {
ReactDOM.render(<SomeComponent name={componentName} />, mountNode);
}
我的 App.ts:
import * as ReactDOM from "react-dom";
import {render} from "./Components/SomeComponent";
render("some name", document.getElementById("content"));
转换为 App.js:
"use strict";
var SomeComponent_1 = require("./Components/SomeComponent");
SomeComponent_1.render("some name", document.getElementById("content"));
//# sourceMappingURL=App.js.map
Index.cshtml 很简单:
<body>
<div>
<div id="content"></div>
</div>
<script src="~/Scripts/App.js"></script>
</body>
最后但并非最不重要的 package.json
{
"name": "reactjstest",
"version": "1.0.0",
"dependencies": {
"react": "15.4.2",
"react-dom": "15.4.2"
},
"devDependencies": {
"@types/react": "15.0.9",
"@types/react-dom": "0.14.23"
}
}
【问题讨论】:
-
.tsx文件编译成.js文件也可以和React.render一起使用,不需要编译成.jsx,但这是可能的。请包括您的tsconfig.json和您导入的代码。 -
@NitzanTomer 编译成
.js时,我得到的错误信息告诉我require不是函数。 -
@NitzanTomer 我没有 tsconfig.json,因为设置存储在
.csproj文件中。将部分添加到我的问题中
标签: visual-studio reactjs typescript