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

求助:Rooster-react通过Fluent UI Theme Provider设置Ribbon主题在CRA项目中无效

问题:Fluent UI Theme Provider无法在CRA项目中为Rooster React编辑器工具栏设置主题

我正在开发一个基于CRA(Create React App)的React应用,使用rooster-react组件库(该库依赖@fluentui),尝试通过Fluent UI的Theme Provider设置编辑器工具栏(Ribbon)的主题,但设置并未生效。

为定位问题,我从头创建了一个新项目,但仍未解决,具体操作步骤如下:

  • 使用CRA 5创建TypeScript模板的React应用,执行命令:
npx create-react-app test --template typescript
  • 安装以下依赖包:
"@fluentui/react": "8.112.6",
"roosterjs": "^8.54.0",
"roosterjs-editor-types": "^8.54.0",
"roosterjs-react": "^8.51.0",
  • 按照相关指引,将package-lock.json中的@fluentui/react-portal-compat-context包版本修改为9.0.6;
  • 创建RoosterEditor组件,代码如下:
import { useMemo } from "react";
import { IEditor, getDarkColor } from "roosterjs";
import {
  createRibbonPlugin,
  getButtons,
  Ribbon,
  RibbonButton,
  Rooster,
  AllButtonKeys,
} from "roosterjs-react";
import { initializeIcons } from "@fluentui/react/lib/Icons";
import { ThemeProvider, DefaultPalette } from "@fluentui/react";

const darkPalette = Object.entries(DefaultPalette).reduce(
  (result, [name, color]) => ({ ...result, [name]: getDarkColor(color) }),
  { ...DefaultPalette }
);

initializeIcons();

export function RoosterEditor({ value }: {value?: string}) {
  const themeMode = "dark"; // 实际代码中使用自定义Provider和Hook
  const ribbonPlugin = useMemo(createRibbonPlugin, []);
  const plugins = useMemo(() => [ribbonPlugin], [ribbonPlugin]);
  const buttons = useMemo(() => getButtons(AllButtonKeys), []) as RibbonButton<string>[];

  const inDarkMode = themeMode === "dark";
  const themePalette = inDarkMode ? darkPalette : DefaultPalette;
  const theme = { palette: themePalette };

  return (
    <ThemeProvider theme={theme} applyTo="body">
      <Ribbon plugin={ribbonPlugin} buttons={buttons} />
      <Rooster plugins={plugins} initialContent={value} inDarkMode={inDarkMode} />
    </ThemeProvider>
  );
}
  • 更新index.tsx文件,代码如下:
import React from "react";
import ReactDOM from "react-dom/client";
import { RoosterEditor } from "./RoosterEditor";

const root = ReactDOM.createRoot(document.getElementById("root") as HTMLElement);
root.render(<React.StrictMode><RoosterEditor /></React.StrictMode>);

我创建了示例仓库和在线演示,但主题设置均未生效;但在Codesandbox的空白React沙箱中执行相同步骤却能正常工作;也可参考roosterjs官方Demo(主题切换按钮位于Ribbon的最后位置)。

请问我在空白CRA项目中的操作哪里出现了问题?


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 20:24:55