reactjs - 样式组件切换类

标签 reactjs styled-components

this.state.checkBool 是 true/false
像这样的 HTML 结构,切换 class1class2

<div class='common class1'>
<div class='common class2'>

css看起来像
common {
  display: block;
  background: grey;
}

.class1 {
  position: absolute;
  left: 1px;
  right: auto;
  top: 2px;
  background: blue;
}


.class2 {
  position: absolute;
  left: auto;
  top: 2px;
  right: 30px;
  background: yellow;
}

样式化组件
const Wrapper = styled.div`
  display: block;
  background: grey;

  // Should this part use props to check true or false?

  ${prosp => } 
`

我被困在如何切换类(class)上
<Wrapper toggle={this.state.checkBool ? class1 :class2 }/>

最佳答案

您想将所有 CSS 保留在 styled.div 中并使用 toggle prop 来决定你应该为组件使用哪个 CSS,这取决于它的值。

示例

const Wrapper = styled.div`
  display: block;
  background: grey;
  ${props => {
    if (props.toggle) {
      return `
        position: absolute;
        left: 1px;
        right: auto;
        top: 2px;
        background: blue;
      `;
    } else {
      return `
        position: absolute;
        left: auto;
        top: 2px;
        right: 30px;
        background: yellow;
      `;
    }
  }}
`;

class App extends React.Component {
  state = { checkBool: false };

  componentDidMount() {
    setTimeout(() => {
      this.setState({ checkBool: true });
    }, 1000);
  }

  render() {
    return <Wrapper toggle={this.state.checkBool}> Foo </Wrapper>;
  }
}

ReactDOM.render(<App />, document.getElementById("root"));
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>
<script src="https://unpkg.com/styled-components/dist/styled-components.min.js"></script>

<div id="root"></div>

关于reactjs - 样式组件切换类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54842948/

相关文章:

reactjs - 编辑数组后在 React 中重新渲染子组件数组

javascript - React 中的臃肿状态

javascript - 计算流数据集的时间差

styled-components - 我正在使用样式组件中的样式,但它不起作用。有人可以告诉我我在这方面做错了什么吗?

css - 如何防止 SVG 线条的粗细不一致和间隙?

javascript - 对样式组件概念的误解

react-native - 向文本添加实心笔划

javascript - react native componetWillUpdate 不起作用

javascript - React 实时更新输入文本表单

javascript - 如何扩展 css 情感风格的基础组件?