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
相关产品推荐
相关产品推荐

