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

TypeScript渲染React组件报void无调用签名错误如何解决

问题原因
  • 你本地安装的React版本为18+,React 18已经移除了原有ReactDOM.render的全局导出API,原API被标记为废弃,改用createRoot方法实现组件挂载。因此你按原有方式导入并调用ReactDOM.render时,TS会检测到该方法不存在,返回值为void,调用时就会触发你遇到的报错。
  • 额外注意:你代码中document.querySelector('my-app')如果是匹配id为my-app的元素,需要改为document.querySelector('#my-app'),否则会找不到挂载节点。
修复方案

方案1:适配React 18的新API(推荐)

修改react-dom的导入方式和挂载逻辑,代码调整如下:

import * as React from 'react';
// 从react-dom/client导入createRoot
import { createRoot } from 'react-dom/client';
import SplitButton from '../../../src/ListButton/SplitButton'

const App = () => {
    const items: any = ['Item1', 'Item2', 'Item3'];

    return (
      <div>
        <SplitButton items={items} text="Enabled Button" /> &nbsp;
        <SplitButton disabled={true} items={items} text="Disabled Button" />
      </div>
      );
}

// 先获取挂载节点,如果是id为my-app要加#前缀,末尾加!是非空断言,规避TS空值检测
const rootElement = document.querySelector('my-app')!;
const root = createRoot(rootElement);
root.render(<App />);

如果不想用非空断言,也可以提前对rootElement做非空判断,避免运行时找不到节点报错。

方案2:回退到React 17的写法(仅临时兼容用)

如果暂时不想升级写法,可以锁定React相关依赖的版本为17.x:

  1. 修改package.json中的依赖版本:
{
  "react": "^17.0.2",
  "react-dom": "^17.0.2",
  "@types/react": "^17.0.44",
  "@types/react-dom": "^17.0.15"
}
  1. 重新安装依赖后,你原本的代码即可正常运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 21:24:02