reactjs - styled-components:样式化组件而不将它们包装在容器/包装器中?

标签 reactjs styled-components

是否可以在无需创建容器的情况下设置 React 组件的样式?

这是我当前问题的一个例子。我总是需要将组件包装在容器/包装器中。像这样...

import React, { Component } from 'react';
import styled from 'styled-components';

const PitchSliderContainer = styled.input`
    text-align: right;
    float: right;
`;

const PitchSlider = () => <PitchSliderContainer
    type="range"
    min="0.9"
    max="1.1"
    step="any"
    onChange={this.props.onChange}
/>

export default PitchSlider;

有什么方法可以设置 PitchSlider 的样式吗?无需创建容器?

最佳答案

我认为你所做的是正确的方法。因为这就是样式化组件的全部意义所在。创建可重用 演示 成分。在这里,您的 PitchSliderContainer就是这样一种风格 input成分。您可以编写一个更通用的组件来接受某些 Prop ,并呈现 <input>根据 Prop 。这样的样式组件也绝对应该有一个名称。

你所要求的可以用另一种方式来完成。这不推荐用于结构组件,但因为您的组件只有一个 <input>标签,这应该没问题:

const PitchSlider = ({ className }) => <PitchSliderContainer
    type="range"
    min="0.9"
    max="1.1"
    step="any"
    onChange={this.props.onChange}
    className={className}
/>

export default styled(PitchSlider)`
  text-align: right;
  float: right;
`;

确保您收到 className作为 Prop 并将其传递给您的组件。

编辑 :正如 Phil Pluckthun 所建议的,你也可以这样做:
const PitchSlider = styled.input.attrs({
  type: 'range',
  min: '0.9'
  max: '1.1'
  step: 'any'
  onChange: this.props.onChange
})`
  text-align: right;
  float: right;
`;

关于reactjs - styled-components:样式化组件而不将它们包装在容器/包装器中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49106199/

相关文章:

javascript - 通过 redux-form、reducer 和 action Creator 发送数据表单

css - 悬停时如何更改特定元素?

javascript - 带样式的组件,在谷歌浏览器上中断

javascript - 使用 React.forwardRef 时在 React/TypeScript 中给 ref 什么类型?

javascript - 将此函数转换为无状态 react 组件

reactjs - 样式化组件和 React : Click event

reactjs - 防止带有样式组件的 Component/PureComponent 在状态更改后重新渲染所有项目

javascript - 在样式化的组件 ReactJS 上导入 fonts-face

css - 如何在 MUI 中设置 body 元素的样式

javascript - 在 ReactJS 中导入/导出子组件错误