Draft.js自定义块渲染时样式丢失怎么办?
在用Draft.js自定义块渲染器时,给代码块添加的CSS样式完全没生效,页面上还是默认的样式。已经按照文档写了blockRendererFn:
const blockRenderer = (block) => {
if (block.getType() === 'atomic') {
return {
component: MyComponent,
props: { className: 'code-block' }
};
}
};
对应的CSS类明明写在全局样式表里了:
.code-block {
background: #2d2d2d;
color: #fff;
padding: 1em;
}
控制台没有报错,但代码块还是普通文本样式。尝试过把className直接写到组件属性里也不行,是不是blockProps传递方式有问题?
你现在写的是把 className 放在 props 里,但如果你的 MyComponent 没有把这个 props.className 应用到根元素上,样式当然不会生效。
解决办法很简单:优化一下你的自定义组件,确保它把接收到的 blockProps 渲染下去。
同时,确认你的 blockRendererFn 写对了:
最关键的一点:别指望 Draft.js 自动帮你挂 className,它只负责把 component 和 props 传进去,怎么用是你的事。我之前也踩过这坑,样式死活不生效,结果发现根本没渲染到 DOM 上。
另外检查一下你的 CSS 是否被后续样式覆盖,建议加上作用域或者用更具体的类名。如果用了 CSS-in-JS 或模块化,那就得用全局类名处理,比如 :global(.code-block)。