当前位置: 首页 > 知识库问答 >
问题:

当className动态生成时,如何更改样式化组件主题?

吉毅
2023-03-14

我尝试用TypeScript将样式化的组件应用于我的React代码。
现在我的render()方法使用循环生成多个元素,每个元素的className由另一个方法动态生成。

render() {
    try {
      const {steps} = this.props;
      return (
        <div className="step-bar">
          {steps.map((s, i) => (
            <div key={i} className={this.getClassName(i)}>
              {s}
            </div>
          ))}
        </div>
      );
    } catch(e) {
      utils.sendErrorObject(e);
      return null;
    }
  };

现在我想对这个代码应用样式化组件,并根据classname处理多个样式,但我不知道如何指定条件,因为classname在代码中是动态的。
有人知道好主意吗?

共有1个答案

狄晟睿
2023-03-14

试试看:

import styled from 'styled-components';

const MyStyledComponent = styled.div`
   background-color: ${props => ~props.className.indexOf('current') ? 'red' : 'blue'}
`

...

render() {
   return <MyStyledComponent className={this.getClassName(i)}>Text</MyStyledComponent>
}
 类似资料:
  • 我正在开发一个带有样式组件的反应应用程序,我有一个组件“导航”。在这个组件中有更多的组件,如,等。Header例如是这样声明的: 问题是,我在不同的文件中有这个导航组件,对于所有文件,样式都很好,但现在我只想在其中一个文件中更改标题组件的背景色,它位于(?)导航组件。我该怎么做?我知道可以用const NewNav=styled(导航)之类的东西从导航组件更改样式,`但是标题呢? 先谢谢你。

  • 我试图找到一种方法来动态导入继承一些标准样式的svg图标。我没有看到其他人写这个...所以我想我走错了路。 我尝试过在样式化的组件中创建一个SVG包装器,但这给了我一个svg的巢 SVG图标代码 我的图标代码 导入正在工作并显示,但我希望将组件作为样式化组件,这将使我能够使用道具设置主题并动态更改SVG样式。

  • 当我启动应用程序时,它会显示启动图像和一个黑色状态栏。如何更改它,使状态栏在启动时变亮?我已经在AppDelegate didFinishLoading方法中将状态栏的外观设置为亮起,它适用于应用程序的其余部分。

  • 当将html输入与样式化组件一起使用并将值保存为react state with onChange时,组件似乎会在每次状态更改时重新呈现,并导致输入失去焦点。有没有办法防止输入失去焦点?为什么会发生这种情况?这里有一个例子。

  • Button组件通常由Text元素组成,该元素用TouchableHighlight(或其他touchable)包装。我正在尝试创建一个使用styled-components样式的按钮组件,但是我的样式很难动态响应道具。 下面,我创建了一个按钮组件,类似于样式化组件文档中的Adapting based on props示例。 导入后,我用的按钮是这样的... 所以,我希望我的纽扣看起来像这样...

  • 在按钮悬停我想做的改变:之前的内容太,我找不到一个答案在官方留档我想知道这是可能的。 这里是样式组件: