Tailwind v4 设计令牌跨 Web 与 React Native 统一方案实践概述将令牌作为唯一事实源,编译到 Web 的 CSS 变量与 RN 的样式对象,保障主题一致与可演进。令牌源export const tokens = { color: { primary: '#2563eb', accent: '#22c55e' }, space: { 4: '1rem', 6: '1.5rem' }, radius: { md: '8px' } } Web 导出(CSS 变量)function toCSSVars(t) { const lines = [] Object.entries(t.color).forEach(([k, v]) => lines.push(`--color-${k}:${v};`)) Object.entries(t.space).forEach(([k, v]) => lines.push(`--space-${k}:${v};`)) Object.entries(t.radius).forEach(([k, v]) => lines.push(`--radius-${k}:${v};`)) return `:root{${lines.join('')}}` } import fs from 'node:fs' fs.writeFileSync('public/theme.css', toCSSVars(tokens)) Tailwind 配置export default { content: ['./app/**/*.{ts,tsx}', './components/**/*.{ts,tsx}'], theme: { extend: { colors: { primary: 'var(--color-primary)' }, spacing: { 4: 'var(--space-4)', 6: 'var(--space-6)' }, borderRadius: { md: 'var(--radius-md)' } } } } React Native 导出export function toRN(t) { return { color: { primary: t.color.primary, accent: t.color.accent }, space: { 4: 16, 6: 24 }, radius: { md: 8 } } } import { StyleSheet, View, Text } from 'react-native' import { toRN, tokens } from './tokens' const theme = toRN(tokens) const styles = StyleSheet.create({ box: { padding: theme.space[4], borderRadius: theme.radius.md, backgroundColor: theme.color.primary } }) export function Box() { return <View style={styles.box}><Text>Box</Text></View> } 性能与维护Web 通过 CSS 变量实现运行时切换;RN 通过对象合并实现主题切换。单一令牌源减少分叉与冲突。技术参数与验证Web 与 RN 双端渲染一致;主题切换延迟小于 50ms。浏览器 Chrome 120+;RN 0.74+。应用场景设计系统跨平台落地。BFF 一体化产品的主题统一。注意事项RN 的空间单位需转为数字;颜色使用十六进制或 rgba。令牌变化需触发双端构建或运行时更新。常见问题Q: 如何与 Tailwind 原子类协作?A: Web 侧保留原子类语义,值来源于 CSS 变量;RN 侧以组件样式对象承载同一令牌值。参考资料Tailwind v4 文档。React Native 样式与主题实践。---发布信息:已发布 · 技术验证 · 阅读 35 分钟 · CC BY-SA 4.0

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部