Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/476.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用样式化组件有条件地呈现组件_Javascript_Reactjs_Styled Components - Fatal编程技术网

Javascript 使用样式化组件有条件地呈现组件

Javascript 使用样式化组件有条件地呈现组件,javascript,reactjs,styled-components,Javascript,Reactjs,Styled Components,使用样式化组件,我可以传入值,然后根据这些值获得条件css。比如说我可以, const ContainerStyled = styled.div<{isOpen: boolean}>` ${({ isOpen }) => isOpen ? background-color: red : '' } ` 我猜您在问是否可以根据条件更改样式化目标 为此,您需要执行简单的步骤: 习俗 有条件地使用 在下一个示例中,该按钮在呈现样式化.div和样式化(组件)之间

使用样式化组件,我可以传入值,然后根据这些值获得条件css。比如说我可以,

const ContainerStyled = styled.div<{isOpen: boolean}>`
  ${({ isOpen }) => isOpen
    ? background-color: red
    : ''
  }
`

我猜您在问是否可以根据条件更改样式化目标

为此,您需要执行简单的步骤:

  • 习俗
  • 有条件地使用
  • 在下一个示例中,该按钮在呈现
    样式化.div
    样式化(组件)
    之间切换

    const Container=styled.div`
    宽度:100px;
    高度:100px;
    背景色:${({isOpen})=>(isOpen?`red`:`blue`)};
    `;
    常量组件=({className})=>Hello;
    常量应用=()=>{
    常量[isOpen,toggle]=useReducer(p=>!p,false);
    返回(
    切换
    );
    };
    

    您可以根据传递的
    isOpen
    属性,使用
    attrs
    附加为

    const ContainerStyled = styled(ArrowDownIcon).attrs(({ isOpen }) => ({
      as: isOpen ? ArrowUpIcon : undefined
    }))`
      background-color: ${({ isOpen }) => isOpen ? 'red' : ''};
    `;
    

    哪个范围是
    isOpen
    ?在编写
    样式时(isOpen?ArrowUpIcon:ArrowDownIcon)
    是否已计算
    isOpen
    ?你的例子不清楚。请尝试显示渲染的预期用例。同样,这似乎是一个XY问题:,请解释实际问题是什么,而不是您试图如何解决它
    const Container = styled.div`
      width: 100px;
      height: 100px;
      background-color: ${({ isOpen }) => (isOpen ? `red` : `blue`)};
    `;
    
    const Component = ({ className }) => <div className={className}>Hello</div>;
    
    const App = () => {
      const [isOpen, toggle] = useReducer(p => !p, false);
      return (
        <>
          <Container as={isOpen ? Component : 'div'} isOpen={isOpen} />
          <button onClick={toggle}>Toggle</button>
        </>
      );
    };
    
    const ContainerStyled = styled(ArrowDownIcon).attrs(({ isOpen }) => ({
      as: isOpen ? ArrowUpIcon : undefined
    }))`
      background-color: ${({ isOpen }) => isOpen ? 'red' : ''};
    `;