javascript - 使用状态变量作为样式道具值
问题描述
我有一个包含主题名称(Light、Dark 等)的状态变量。
在我的渲染函数中,我想根据主题为我的组件使用适当的样式。例如,如果DarkTheme
在 "mainHeader" 类上使用 ,则 View 组件的样式将是这样的:
<View style = {DarkTheme.mainHeader}>
</View>
如果主题是 LightTheme,那么它应该是:
<View style = {LightTheme.mainHeader}>
</View>
为了效率,我认为如果我将主题的名称放在状态变量中,我可以这样做:
<View style = {{this.state.theme + '.mainHeader'}}>
</View>
期望主题变量的评估返回LightTheme.mainHeader或DarkTheme.mainHeader。
但我错了,这不起作用。无论如何我可以完成这项工作吗?
解决方案
您还可以在 中使用三元运算符render()
来根据您将引用的主题设置类this.state.theme
。
const classes = this.state.theme === 'dark' ? style.dark : style.light;
然后在你的元素中,你会像这样使用它className
:
<View className={classes}>
这是一个快速的 jsfiddle 示例。将状态选项从浅色改为深色,背景会发生变化:https ://jsfiddle.net/3516s2vg/
编辑:好的,所以如果您想在这里使用多个主题,一种选择可能是使用 switch 语句来指定特定的类。我不是反应专家,所以我什至不确定这是否是解决此问题的最佳方法。开关也将进入render()
.
let classes = '';
switch(this.state.theme) {
case 'dark':
classes = style.dark;
break;
case 'light':
classes = style.light;
break;
case 'other':
classes = style.other;
break;
default:
classes = style.dark;
}
再次使用它,你会这样做<View className={classes}>
。
推荐阅读
- mysql - 如何比较 HQL 中的时间戳字段?
- python - 使用循环更新嵌套字典中的预先存在的值
- powershell - PowerShell 属性问题
- php - php循环内的html表单
- jquery - jQuery opacity/fade animation only works once
- reactjs - React-table 开关排序图标
- java - 尝试从 DefaultListModel 对象中删除元素
- javascript - 画布奇怪的问题,失去一切时速度快 2 倍
- php - 浏览器中的模型 SQL 语法错误是否有更简单的快捷方式替换
- c++ - 如何在 C 库的实现文件中使用 C++ STL 容器?