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

React迁移Vite4后ModalService渲染组件报错排查

解决Vite迁移后React组件渲染的两个错误问题

第一个错误:Uncaught SyntaxError: Unexpected token '<'

这是因为Vite默认只编译.jsx/.tsx后缀文件里的JSX语法,如果你把带JSX的代码放在.js文件里,Vite不会处理这些JSX标签,浏览器自然认不出<>语法。

解决办法二选一:

  • 把所有包含JSX的文件后缀改成.jsx(比如你的ModalService文件、myNewElement组件文件)
  • 或者修改Vite配置,让它处理.js文件里的JSX:
import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react'

export default defineConfig({
  plugins: [react({
    include: '**/*.js'
  })]
})

第二个错误:Uncaught TypeError: content[contentType] is not a function

这个错误基本是第一个错误引发的连锁问题——JSX解析失败会导致整个模块代码加载异常,content对象里的函数定义自然失效。不过也可以提前排查:

  • 确认传给myNewElement的type参数是'my_element1'、'my_element2'或'my_element3',没有拼写错误
  • 修复第一个错误后,这个问题通常会自动消失

额外修正:myNewElement组件的返回写法

你写的返回代码有语法问题:

return (
  {content}
)

这不是有效的JSX写法,直接返回元素就行:

return content;
// 或者需要包裹时用Fragment
return <>{content}</>;

修正后的完整代码示例

ModalService(保存为modalService.jsx)

const TesterElement1 = () => {
  return <div>***COMPONENT 1***</div>;
};

const TesterElement2 = () => {
  return <div>***COMPONENT 2***</div>;
};

const TesterElement3 = () => {
  return <div>***COMPONENT 3***</div>;
};

export class ModalService {
  getContent(contentType, prop) {
    const content = {
      my_element1: (props) => <TesterElement1 info={props} />,
      my_element2: (props) => <TesterElement2 info={props} />,
      my_element3: (props) => <TesterElement3 info={props} />,
    };
    // 加个容错,避免传入不存在的type时直接报错
    if (!content[contentType]) return null;
    return content[contentType](prop);
  }
}

myNewElement组件(保存为myNewElement.jsx)

import { ModalService } from './modalService';

const myNewElement = ({ type, prop }) => {
  const modalService = new ModalService();
  const content = modalService.getContent(type, prop); 
  
  return content;
}

export default myNewElement;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 08:31:17