ReactJS +样式化组件+伪类

时间:2017-06-20 07:32:17

标签: reactjs

是否可以使用伪类来设置样式组件。我有一个复选框,它应该显示SVG图像:选中/未选中以显示状态为选中/未选中。我可以通过父母传递道具来做到这一点。但我被告知只有css(样式组件)才有可能。 我的代码的一部分:

 const CheckboxInput = styled.input`
  &:checked, &:not(:checked) {
  display: none;
 }`;

const CheckboxLabel = styled.label`
  cursor: pointer;
  -webkit-user-select: none; /* Chrome/Safari */
  -moz-user-select: none; /* Firefox */
  -ms-user-select: none; /* IE10+ */
`;

function Checkbox(props) {
  return (
    <CheckboxLabel htmlFor="id" onChange={() => { props.onchange(); }}>
      <CheckboxInput id="id" type="checkbox" checked={props.checked} value="cb" name="cb" />
      <Span><SVG glyph={checked} width={17} height={17} /></Span>
      <Span><SVG glyph={unchecked} width={17} height={17} /></Span>
      {props.children}
    </CheckboxLabel>
  );
}

1 个答案:

答案 0 :(得分:3)

使用styled-components中的跟随选择器,您可以使用输入/复选框的状态来仅使用CSS修改样式:

  &:checked + ${Label} {
    /* your CSS */
  }

以下是一个完整的例子:

import React from 'react';
import { render } from 'react-dom';
import styled from 'styled-components';


const Label = styled.label`
  background: red;
  display: block;
  padding: 1rem;
`;

const Input = styled.input`
  &:checked + ${Label} {
    background: blue;
  }
`;

const App = () => (
  <div>
    <Input id="input" type="checkbox" />
    <Label for="input" />
  </div>
);

render(<App />, document.getElementById('root'));

您可以在此处查看预览:https://codesandbox.io/s/oYQ21A4wz

这应该为您提供如何仅使用CSS更改样式的基本知识。