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

Vite+React项目开发环境报错:React is not defined求助

Vite+React开发环境React未定义报错排查

问题现象

执行vite build和vite preview均正常,但运行vite(即npm run dev)时页面白屏,控制台抛出错误:
Uncaught ReferenceError: React is not defined at publicUtils.jsx:147:37

相关配置与代码

vite.config.js

import { defineConfig } from "vite";
import react from "@vitejs/plugin-react";
import { vanillaExtractPlugin } from "@vanilla-extract/vite-plugin";
import mkcert from "vite-plugin-mkcert";

export default defineConfig({
  plugins: [
    react(),
    vanillaExtractPlugin(),
    mkcert({
      hosts: ["localhost"],
    }),
  ],
  optimizeDeps: {
    include: ["lodash", "react-is", "prop-types"],
  },
  resolve: {
    alias: {
      lodash: "lodash-es",
      "react-is": "react-is",
      "prop-types": "prop-types",
    },
  },
  esbuild: {
    jsxInject: import React from 'react', // 错误配置
  },
  server: { https: true, port: 4173, host: "localhost" },
});

package.json

{
  "name": "my-vite-react-ts-app",
  "private": true,
  "version": "0.0.0",
  "type": "module",
  "scripts": {
    "dev": "vite",
    "build": "tsc && vite build",
    "lint": "eslint src --ext ts,tsx --report-unused-disable-directives --max-warnings 0",
    "preview": "vite preview"
  },
  "dependencies": {
    "@sas/client": "file:./framework/sas-client-1.0.0.tgz",
    "@sas/components": "file:./framework/sas-components-1.0.0.tgz",
    "@sas/ui-client": "file:./framework/sas-ui-client-1.0.0.tgz",
    "clsx": "^1.1.1",
    "dns": "^0.2.2",
    "lodash": "^4.17.21",
    "lodash-es": "^4.17.21",
    "polished": "^4.1.3",
    "react": "^17.0.2",
    "react-dom": "^17.0.2",
    "react-focus-lock": "^2.5.2",
    "react-is": "^17.0.2"
  },
  "devDependencies": {
    "@types/lodash": "^4.14.172",
    "@types/node": "^20.1.2",
    "@types/react": "^17.0.2",
    "@types/react-dom": "^17.0.2",
    "@types/react-is": "^17.0.2",
    "@typescript-eslint/eslint-plugin": "^5.57.1",
    "@typescript-eslint/parser": "^5.57.1",
    "@vanilla-extract/css": "^1.10.0",
    "@vanilla-extract/css-utils": "^0.1.1",
    "@vanilla-extract/sprinkles": "^1.1.3",
    "@vanilla-extract/vite-plugin": "^3.8.0",
    "@vitejs/plugin-react": "^4.0.0",
    "eslint": "^8.38.0",
    "eslint-plugin-react-hooks": "^4.6.0",
    "eslint-plugin-react-refresh": "^0.3.4",
    "typescript": "4.8.4",
    "vite": "^4.3.2",
    "vite-plugin-commonjs-externals": "^0.1.1",
    "vite-plugin-mkcert": "^1.5.0"
  }
}

publicUtils.jsx(报错关键片段)

export function useGetLatest(obj) {
  const ref = React.useRef() // 未手动导入React,依赖自动注入
  ref.current = obj

  return React.useCallback(() => ref.current, [])
}

问题原因

vite.config.js中esbuild.jsxInject配置错误:该选项要求传入字符串形式的代码,用于自动注入到每个JSX文件顶部,但当前写法是直接写了import React from 'react'表达式而非字符串,导致开发环境未成功自动注入React导入语句。生产构建因打包工具的额外处理(如tree-shaking或插件兼容)间接规避了该问题,所以构建后正常运行。

修复方案

修改vite.config.js中的esbuild配置,将jsxInject的值改为字符串:

esbuild: {
  jsxInject: "import React from 'react';",
},

修改后重启开发服务,React会自动注入到所有JSX文件顶部,publicUtils.jsx中的React.useRef等API即可正常识别,不会再抛出未定义错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 04:52:50