时刻自习室
38.80M · 2026-04-23
VuReact 是一个能将 Vue 3 代码编译为标准、可维护 React 代码的工具。今天就带大家直击核心:Vue SFC 中的 <style scoped> 作用域样式经过 VuReact 编译后会变成什么样的 React 代码?
为避免示例代码冗余导致理解偏差,先明确两个小约定:
VuReact 会计算并生成带作用域标识的 CSS,并借助 PostCSS 处理,将样式选择器与 DOM 属性进行正确的关联注入。
<!-- Counter.vue -->
<template>
<div class="card">
<p>Header</p>
<p class="content">Content</p>
</div>
<button>Submit</button>
</template>
<style scoped>
.card {
border: 1px solid #e5e5e5;
border-radius: 8px;
}
.card:hover {
background: #2a8c5e;
}
.content {
font-size: 12px;
}
</style>
// Counter.jsx
import './counter-abc1234.css';
function Counter() {
return (
<div className="card" data-css-abc1234>
<p>Header</p>
<p className="content" data-css-abc1234>Content</p>
</div>
<button>Submit</button>
);
}
/* counter-abc1234.css */
.card[data-css-abc1234] {
border: 1px solid #e5e5e5;
border-radius: 8px;
}
.card[data-css-abc1234]:hover {
background: #2a8c5e;
}
.content[data-css-abc1234] {
font-size: 12px;
}
从示例可以看到:Vue 的 <style scoped> 块被编译为带作用域标识的 CSS 文件,并在 React 组件中只对有 class/id 属性的元素标签自动注入 data-css-{hash} 属性。VuReact 的作用域样式转换功能完全模拟 Vue SFC 的作用域样式隔离机制,确保样式只在当前组件内生效。
作用域属性的注入遵循以下规则:
data-css-{hash} 属性作用域隔离原理:
.card 转换为 .card[data-css-hash]data-css-hash 属性VuReact 的 Scoped 样式编译策略展示了完整的作用域样式转换能力:
VuReact 的编译策略确保了从 Vue 到 React 的平滑迁移,开发者无需手动实现样式隔离。编译后的代码既保持了 Vue 的作用域样式隔离机制,又符合 React 的组件设计模式,让迁移后的应用保持完整的样式隔离能力。
如果你觉得本文对你理解 VuReact 有帮助,欢迎点赞、收藏、关注!