JSX是一种类似HTML的语法扩展,用于在JavaScript代码中编写React组件的结构和内容。它提供了一种直观和便捷的方式来描述UI的层次结构,并与JavaScript代码无缝集成。
react-jsx: 改为 __jsx 调用并生成 .js 文件。 preserve: 不对 JSX 进行改变并生成 .jsx 文件。 下图展示了当"jsx"的配置分别为:"react"、"react-jsx"的结果: 不难发现,"react"与"react-jsx"配置的编译结果,与前面babel编译中插件@babel/plugin-transform-react-jsx tsconfig默认使用commonjs作为模块化方案,所以,"jsx": "react-jsx"配置的编译结果中引用react/jsx-runtime时,使用commonjs规范的require。 上面的配置,我们使用了"jsx": "react",当我们修改为"jsx": "react-jsx"又会有什么效果呢? 所以,IDE根据react-jsx"配置的结果,识别到了问题,并帮助我们提示了对应的问题。
正文从这开始~ 总览 在React中,为了解决"Cannot find namespace context"错误,在你使用JSX的文件中使用.tsx扩展名,在你的tsconfig.json文件中把jsx设置为react-jsx 打开tsconfig.json文件,并确保jsx选项被设置为react-jsx。 // tsconfig.json { "compilerOptions": { "jsx": "react-jsx", // ️ make sure you have this "target : true, "isolatedModules": true, "noEmit": true }, "include": ["src/**/*"] } 当jsx选项被设置为react-jsx
~ .tsx扩展名 为了在React TypeScript中解决Cannot find name报错,我们需要在使用JSX文件时使用.tsx扩展名,在你的tsconfig.json文件中把jsx设置为react-jsx tsconfig.json配置文件 打开tsconfig.json文件,确保jsx选项设置为react-jsx。 { "compilerOptions": { "jsx": "react-jsx", // ️ make sure you have this "target": "es6", ": true, "isolatedModules": true, "noEmit": true }, "include": ["src/**/*"] } 当jsx选项设置为react-jsx
runtime: "automatic", 7 }, 8 ], 9 ], 10}; 11 tsconfig.json 1"compilerOptions": { 2 "jsx": "react-jsx
"isolatedModules": true, // 将每个文件作为单独的模块 "noEmit": false, // 不输出(意思是不编译代码,只执行类型检查) "jsx": "react-jsx
{label} </button> ); }; 但这需要你的 tsconfig.json 配置正确: { "compilerOptions": { "jsx": "react-jsx │ │ ┌──────────────────────────────────────┐ │ │ │ "jsx": "react-jsx : ReactNode JSX Transform import React from 'react' 无需 import,配置 react-jsx 异步状态 loading/data/error 分散字段
有官方提供支持的,首选类 React-JSX 的引擎或纯粹的 VDOM 引擎。 选择学习或维护复杂度最低的,众所周知,开发者对调试的时间超过写代码的时间深恶痛绝。 大家都知道 React-JSX 是支持预编译的,官方的说法是 React Without JSX,即总是 build 过的。 一些基于字符串处理的引擎也支持预编译。 至少也要有类似 React-JSX 这样的编译结果才具有可调试性。备注:Vue.js 支持多种模板引擎,可达到同样的效果。
compilerOptions": { "target": "ESNext", "module": "ESNext", "strict": true, "jsx": "react-jsx compilerOptions": { "target": "ESNext", "module": "ESNext", "strict": true, "jsx": "react-jsx
"node", "resolveJsonModule": true, "isolatedModules": true, "noEmit": true, "jsx": "react-jsx
有两个新的针对 React 17 用户的 JSX 选项,可以更好地支持生产和开发编译,分别是 react-jsx 和 react-jsxdev。
Specify JSX code generation: 'preserve', 'react-native', 'react', 'react-jsx
compilerOptions": { "target": "ES2022", "module": "ESNext", "lib": ["ES2022", "DOM"], "jsx": "react-jsx
document.getElementById('root')); TypeScript 4.1 通过编译器选项 jsx 的两个新选项支持 React 17 的 jsx 和 jsxs 工厂函数: react-jsx /tsconfig.json { "compilerOptions": { "module": "esnext", "target": "es2015", "jsx": "react-jsx
noPropertyAccessFromIndexSignature": true, // Recommended Options "strict": true, "jsx": "react-jsx
/dist", "jsx": "react-jsx" } } (4)项目代码 src目录下,三个文件:index.tsx、index.module.less、react-app.d.ts。
"jsx": "react-jsx"继承配置如果你的项目结构比较复杂,可能需要在不同的目录下有不同的配置,可以使用extends属性来继承一个基础的tsconfig.json:// 在子目录下的tsconfig.app.json
true, "isolatedModules": true, "moduleDetection": "force", "noEmit": true, "jsx": "react-jsx
strictNullChecks": true, "declaration": true, "sourceMap": true, "esModuleInterop": true, "jsx": "react-jsx
"node", "resolveJsonModule": true, "isolatedModules": true, "noEmit": true, "jsx": "react-jsx