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

样式化组件中的条件呈现

施阳夏
2023-03-14

如何在样式组件中使用条件渲染来设置我的按钮类在React中使用样式组件?

在css中,我会这样做:

<button className={this.state.active && 'active'}
      onClick={ () => this.setState({active: !this.state.active}) }>Click me</button>

如果我尝试使用'

import React from 'react'
import styled from 'styled-components'

const Tab = styled.button`
  width: 100%;
  outline: 0;
  border: 0;
  height: 100%;
  justify-content: center;
  align-items: center;
  line-height: 0.2;
`

export default class Hello extends React.Component {
  constructor() {
    super()
    this.state = {
      active: false
    }  
    this.handleButton = this.handleButton.bind(this)
}

  handleButton() {
    this.setState({ active: true })
  }

  render() {
     return(
       <div>
         <Tab onClick={this.handleButton}></Tab>
       </div>
     )
  }}

共有3个答案

应俭
2023-03-14

下面是一个简单的TypeScript示例:

import * as React from 'react';
import { FunctionComponent } from 'react';
import styled, { css } from 'styled-components';

interface IProps {
  isProcessing?: boolean;
  isDisabled?: boolean;
  onClick?: () => void;
}

const StyledButton = styled.button<IProps>`
  width: 10rem;
  height: 4rem;
  cursor: pointer;
  color: rgb(255, 255, 255);
  background-color: rgb(0, 0, 0);

  &:hover {
    background-color: rgba(0, 0, 0, 0.75);
  }

  ${({ disabled }) =>
    disabled &&
    css`
      opacity: 0.5;
      cursor: not-allowed;
    `}

  ${({ isProcessing }) =>
    isProcessing &&
    css`
      opacity: 0.5;
      cursor: progress;
    `}
`;

export const Button: FunctionComponent<IProps> = ({
  children,
  onClick,
  isProcessing,
}) => {
  return (
    <StyledButton
      type="button"
      onClick={onClick}
      disabled={isDisabled}
      isProcessing={isProcessing}
    >
      {!isProcessing ? children : <Spinner />}
    </StyledButton>
  );
};
<Button isProcessing={this.state.isProcessing} onClick={this.handleClick}>Save</Button>
壤驷宏才
2023-03-14

我没有注意到任何问题

// Props are component props that are passed using <StyledYourComponent prop1="A" prop2="B"> etc
const StyledYourComponent = styled(YourComponent)`
  background: ${props => props.active ? 'darkred' : 'limegreen'}
`

在上述情况下,当使用活动道具呈现StyledYourComponent时,背景将暗显,如果没有提供活动道具,或者是falsy Styled components自动为您生成类名:)

如果要添加多个样式属性,则必须使用css标记,该标记是从样式化组件导入的:

我没有注意到任何问题

import styled, { css } from 'styled-components'
// Props are component props that are passed using <StyledYourComponent prop1="A" prop2="B"> etc
const StyledYourComponent = styled(YourComponent)`
  ${props => props.active && css`
     background: darkred; 
     border: 1px solid limegreen;`
  }
`

或者您也可以使用object来传递样式,但请记住CSS属性应为camelCased:

import styled from 'styled-components'
// Props are component props that are passed using <StyledYourComponent prop1="A" prop2="B"> etc
const StyledYourComponent = styled(YourComponent)`
  ${props => props.active && ({
     background: 'darkred',
     border: '1px solid limegreen',
     borderRadius: '25px'
  })
`
欧阳乐生
2023-03-14

你可以简单地这么做

<Tab active={this.state.active} onClick={this.handleButton}></Tab>

在你的风格中,像这样:

const Tab = styled.button`
  width: 100%;
  outline: 0;
  border: 0;
  height: 100%;
  justify-content: center;
  align-items: center;
  line-height: 0.2;

  ${({ active }) => active && `
    background: blue;
  `}
`;
 类似资料:
  • 问题内容: 如何在样式组件中使用条件渲染以使用React中的样式组件将按钮类设置为活动状态? 在css中,我会这样做: 在样式化的组件中,如果我尝试在类名中使用“ &&”,则不喜欢它。 问题答案: 你可以简单地做到这一点 在您的样式中,如下所示:

  • 我正在有条件地设置我的

  • 我正在使用在我的应用程序中实现一个亮/暗主题。不确定这是否太重要了,但我正在使用打字脚本。我还是一个新的反应和ts。 当组件是一个基本的HTML元素时,这是很简单的: 或者在自定义组件上(我可能拥有也可能不拥有该类型)。这里,我将从中对进行样式化: 然而,当我需要对没有显式呈现的组件进行样式化时,我会遇到麻烦。对于上面的例子,我显然在代码的某个地方有: 但是关于样式呢,比如说我自己不呈现的的子级?

  • 我正在React.js网站上浏览react教程(井字游戏),我想在用户单击它时单独设置每个正方形的样式。更具体地说,当轮到玩家 X 时,正方形应该变成红色,当轮到玩家 O 时,正方形应该变成蓝色。我试图使用道具和状态来改变颜色。但是,react 会更改所有方块,而不是单独更改方块的颜色。 以下是我迄今为止所尝试的。

  • 对于在其生命周期的某个点隐藏的组件,呈现它的最佳方式是什么?1)渲染组件,但不显示它(显示:无)。2)只在需要时渲染组件。什么对性能更好?如果组件的道具和状态稍后更新,是否最好让组件存在,但隐藏在虚拟DOM中? 或者这个:

  • JSF的 @ViewScoped不可用,因为它与CDI冲突 提交表单时,JSF动态呈现组件的值变为空 有条件呈现的输入组件不更新值 未调用CommandButton/CommandLink/Ajax操作/Listener方法或未更新输入值 我能想到导致这种行为的几种情况: “rendered”似乎是基于backing bean中的值重新计算的,而不是UI中给出的新值(如果默认为1,则提交时再次为1