javascript - 制作样式化的组件 DRYer
问题描述
当谈到检查 Styled Components 中的 props 时,在我看来,事情可能是一个很好的 DRYer。
例如,让我们看一下以下代码:
${props => props.white && `color: ${colors.white}`}
${props => props.light && `color: ${colors.light}`}
${props => props.grey && `color: ${colors.grey.base}`}
${props => props.dark && `color: ${colors.dark}`}
${props => props.black && `color: ${colors.black}`}
${props => props.info && `color: ${colors.info}`}
${props => props.success && `color: ${colors.success}`}
${props => props.warning && `color: ${colors.warning}`}
${props => props.error && `color: ${colors.error}`}
${props => props.link && `color: ${colors.link.base}`}
这是针对<Text>
我正在创建的组件的 - 它只是根据我使用的道具检查文本颜色的变化。例如:<Text light>
将给它我在变量文件light
中在我的对象中设置的颜色。colors
现在,这段代码相当重复。每行唯一变化的是颜色名称——否则它是完全相同的。
关于如何使此代码干燥的任何想法?
解决方案
这里的问题是,如果用户添加white
和black
到道具会发生什么?应该是什么颜色?
${props => Object.keys(props).filter(x => colors[x]).map(y => `color: ${colors[y]}`).join(' ')}
这样,您正在过滤 中的道具colors
,将样式文本添加到其中,.join
并将数组转换为字符串。
如果只传递了一个颜色的道具,它将正常工作,但如果传递多个,它将进入最后一个颜色.map
。
推荐阅读
- java - 程序不断循环
- android - 防止 Fragment 跳转到 Recyclerview 顶部
- validation - Parsley.js 专注于验证 div 错误
- python - 将类和模块导入 tkinter 程序时 Python 崩溃
- java - 为 Java 程序创建可执行 Jar
- python - 值作为列表发送,但作为字符串接收。(TypeError:字符串索引必须是整数)
- javascript - 从一个函数访问数据到另一个函数
- c# - 在windows窗体c#中绘制动态面板
- python - Python循环依赖
- css - 限制递归嵌套 Typescript 类型中的键