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

能否在React中渲染完整的Solid-JS应用(非单一组件)?

解决React项目中使用react-solid-bridge时的"JSX必须包含React"报错

可能的原因及修复步骤

1. 检查React版本与JSX转换配置

若你的React版本为17+,JSX转换已无需手动导入React,但旧版工具链(如Webpack/Babel)可能未更新配置,导致仍检测React导入:

  • 在babel.config.json或.babelrc中启用@babel/preset-react的自动运行时:
    {
      "presets": [
        ["@babel/preset-react", { "runtime": "automatic" }]
      ]
    }
    
  • 若使用Create React App,React 17+默认已开启自动JSX转换,自定义配置需同步更新。

2. 规范Solid组件的JSX处理

Solid-JS的JSX逻辑与React不同,需避免工具链混淆两者的转换规则:

  • 确保Solid组件文件使用.tsx/.jsx后缀,且通过专属配置(如vite-plugin-solid或babel-preset-solid)处理,不要让React的JSX转换规则作用于Solid组件。
  • 禁止在Solid组件文件中导入React,避免工具链误判。

3. 修正ReactToSolidBridgeProvider的使用结构

确保路由组件的包裹方式正确,转换后的React组件需放在Provider范围内:

// 正确示例
import { ReactToSolidBridgeProvider, convertToReactComponent } from 'react-solid-bridge';
import SolidApp from './path-to-solid-app';

const SolidAppAsReact = convertToReactComponent(SolidApp);

function AppRoutes() {
  return (
    <ReactToSolidBridgeProvider>
      <Route path="/solid-app" element={<SolidAppAsReact />} />
    </ReactToSolidBridgeProvider>
  );
}
  • 不要在Solid组件内部编写React风格的JSX,所有Solid组件的JSX需遵循Solid规则,由bridge完成转换。

4. 调整TypeScript配置(TypeScript用户)

确保tsconfig.json区分React与Solid文件的JSX配置:

{
  "compilerOptions": {
    "jsx": "react-jsx"
  },
  "include": ["src/react/**/*"],
  "exclude": ["src/solid/**/*"],
  "extends": "./src/solid/tsconfig.json" // 单独的Solid配置文件,jsx设为solid
}

5. 清理缓存并重启服务

工具链缓存可能残留旧配置,执行以下操作:

  • 删除Node模块并重装:rm -rf node_modules && npm install
  • 清除构建缓存:如Create React App的npm run clean,或Vite的rm -rf node_modules/.vite
  • 重启开发服务器

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 14:42:05