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

升级React v18后Storybook报React未定义错误的解决办法

修复React v18升级后Storybook运行报错问题

针对你将React、ReactDOM从v16升级到v18后,Storybook出现react-dom/client相关报错的问题,可按以下步骤排查修复:

1. 更新Storybook预览渲染逻辑至React 18标准

React 18废弃了旧的ReactDOM.render方法,改用createRoot进行渲染。Storybook 6.5.x默认可能仍使用旧渲染逻辑,需手动替换:

在.storybook/preview.js中添加或修改渲染逻辑:

import { createRoot } from 'react-dom/client';
import { addDecorator } from '@storybook/react';

// 自定义渲染函数适配React 18
const renderReact18 = (story) => {
  const container = document.createElement('div');
  const root = createRoot(container);
  root.render(story());
  return container;
};

addDecorator(renderReact18);

2. 强制Webpack解析项目根目录的React依赖

避免Storybook内部依赖的旧版本React与项目的React 18冲突,在.storybook/main.js中添加Webpack别名配置:

const path = require('path');

module.exports = {
  // 保留原有配置(如stories、addons等)
  webpackFinal: async (config) => {
    config.resolve.alias = {
      ...config.resolve.alias,
      'react': path.resolve(__dirname, '../node_modules/react'),
      'react-dom': path.resolve(__dirname, '../node_modules/react-dom'),
    };
    return config;
  },
};

3. 清理依赖缓存并重装依赖

依赖缓存可能导致版本不一致,执行以下命令重置依赖:

# 删除依赖目录和锁文件
rm -rf node_modules package-lock.json
# 重新安装依赖
npm install

如果使用yarn,则替换为:

rm -rf node_modules yarn.lock
yarn install

4. 确认类型包版本锁定生效

检查package.json中的resolutions配置是否正确覆盖了所有依赖的@types/react和@types/react-dom版本,重装依赖后可通过npm ls @types/react命令验证版本是否统一为v18.x。

完成以上步骤后,重新启动Storybook即可验证报错是否解决。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 00:10:51