当前位置: 首页 > 知识库问答 >
问题:

使用新的JSX转换汇总React 17-“未定义React”

赵鸿畴
2023-03-14

我正在尝试用汇总和几个CreateReact应用程序原型一个微前端架构。但是,当我在本地将我的外部应用程序链接到容器应用程序时,我遇到以下错误:

React未定义

23500 |返回/纯/反应。createElement(“div”,{^23501 | id:“container”,23502 | className:“flex-flex col h-screen”23503 |},/#PURE/React.createElement(BrowserRouter,null,/#PURE/React.createElement(标头{

我认为这是因为我们没有在每个组件/文件的顶部导入React,因为React 17的新JSX转换允许您不必这样做。我真的希望能够构建我们的微型前端包,而不必在每个文件中导入React,有没有办法做到这一点?

这是汇总表。配置。js:

import babel from 'rollup-plugin-babel';
import commonjs from '@rollup/plugin-commonjs';
import external from 'rollup-plugin-peer-deps-external';
import postcss from 'rollup-plugin-postcss';
import resolve from '@rollup/plugin-node-resolve';
import image from '@rollup/plugin-image';
import visualizer from 'rollup-plugin-visualizer';
import includePaths from 'rollup-plugin-includepaths';
import replace from '@rollup/plugin-replace';
import pkg from './package.json';

const extensions = ['.js', '.jsx', '.ts', '.tsx'];

export default {
  input: './src/App.jsx',
  output: [
    {
      file: pkg.main,
      format: 'cjs',
    },
    {
      file: pkg.module,
      format: 'esm',
    },
  ],
  plugins: [
    external(),
    postcss(),
    resolve({
      mainFields: ['module', 'main', 'jsnext:main', 'browser'],
      extensions,
    }),
    image(),
    visualizer(),
    includePaths({ paths: ['./'] }),
    replace({
      'process.env.NODE_ENV': JSON.stringify('development'),
    }),
    babel({
      exclude: 'node_modules/**',
      plugins: [
        [
          'module-resolver',
          {
            root: ['src'],
          },
        ],
      ],
      presets: ['@babel/preset-react'],
    }),
    commonjs(),
  ],
};

共有3个答案

袁恩
2023-03-14

我仍然有这个问题,但我必须指定namedExports

      pluginCommonjs({
        include: /node_modules/,
        namedExports: {
          'react/index.js': ['Component', 'PureComponent', 'Fragment', 'Children', 'createElement'],
          'react/jsx-runtime': ['jsx', 'jsxs', 'Fragment'],
          'react/jsx-dev-runtime': ['jsx', 'jsxs', 'jsxDEV']
        }
      }),
    
叶智
2023-03-14

通过将{runtime:“automatic”}添加到@babel/preset react预设中,修复了此问题。

从预设反应运行时文档:

automaticauto导入JSX传输到的函数<代码>经典不会自动导入任何内容。

在React帖子中也提到了新的JSX转换:

目前,旧的转换{运行时:经典}是默认选项。要启用新转换,您可以将{运行时:自动}作为选项传递到@Babel/plugin-transver-react-jsx或@Babel/preset-react-jsx

这里有一个例子:

{
    // ...
    plugins: [
        // ...
        babel({
            // ...
            presets: [
                // ...
                ["@babel/preset-react", { runtime: "automatic" }],
            ]
        })
    ]
}
燕刚毅
2023-03-14

在tsconfig中。json,添加以下代码

{
  "compilerOptions": {
    "jsx": "react-jsx",
  }
}


 类似资料:
  • 我正在尝试rollup js来构建我的typescript项目,但我不知道如何生成定义文件,以及如何将它们自动包含在dist文件中。 有人知道怎么做吗? 这是我的汇总表。配置。js 我使用的是默认的ts配置,但对于declaration=true也是如此。 编辑: 还尝试使用Webpack: Tsconfig: 生成d.ts如下所示: 但是在我使用该包的应用程序中,它找不到生成器... 生成器未定

  • 问题内容: 我一直在尝试进行AJAX调用,然后在检索到它之后将其添加到我的视图中。 当前代码实际上什么也没有发生。 问题答案: 您的组件名称必须以大写字母开头,因为以小写字母开头的组件会被搜索为默认DOM元素,例如。对于您的组件,情况并非如此。将其设置为大写即可。 根据文档: 当元素类型以字母开头时,它指的是诸如或的内置组件,并导致将字符串 或“ span”传递给。以大写字母开头的类型,例如,编译

  • 我在一个ES6项目上工作,我使用rollup和babel进行传输。它工作得很好,除了当我尝试导入使用commonjs(尤其是require('something'))的npm模块时,在我的浏览器中出现错误“require is not defined”(这意味着它没有正确地将节点模块从commonjs编译到ES5)。然而,我使用了rollup plugin node resolve和rollup

  • 本文向大家介绍javascript中定义类的方法汇总,包括了javascript中定义类的方法汇总的使用技巧和注意事项,需要的朋友参考一下 JS中定义类的方式有很多种: 1、工厂方式   调用此函数时将创建新对象,并赋予它所有的属性和方法。使用此函数可以创建2个属性完全相同的对象。当然我妹可以通过给它传递参数来改版这种方式。   现在可以通过给函数传递不同的参数来得到具有不同值的对象。   在前面

  • 自从我开始阅读反应,我了解了JSX和巴别塔。在Babel之前,JSX转换器[React工具]用于将JFX语法转换为浏览器可理解的格式。现在巴别塔取代了它的位置。我的观点是,为什么他们更换了JFX变压器?它有什么缺点吗?

  • 本文向大家介绍C#使用DropDownList绑定添加新数据的方法汇总,包括了C#使用DropDownList绑定添加新数据的方法汇总的使用技巧和注意事项,需要的朋友参考一下 DropDownList控件又称下拉列表框控件, 控件 列表 中的多行数 据 以隐含 的形式表 示 出 来,当用户需要选择所需列表项时,通过点击 “下三角 ”图形 展示 ,用户每次 只能选用一个 数据项。DropDownLi