首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用aphrodite进行样式反应选择

使用aphrodite进行样式反应选择
EN

Stack Overflow用户
提问于 2019-02-12 08:37:11
回答 1查看 534关注 0票数 1

我正在尝试使用aphrodite中内置的一些现有样式来设置第三方组件react-select的样式。组件上有一些道具,允许您传递定义用于组件主容器的类的className。然后,它有一个classNamePrefix属性,用于为组件中的子项添加前缀。文档详细说明了在样式表中使用什么classNamePrefix + name组合来设置每个项目的样式。

https://react-select.com/styles#using-classnames

我正在寻找一个我如何使用aphrodite来做到这一点的例子。我遇到的问题是,当我调用css()时,我得到一个随机的类名。我想不出一种方法来指定classNamePrefix。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-02-13 23:38:40

我最终使用了React Select Aphrodite API,下面是我如何使用Component将自定义样式注入到React Select组件的各个部分的一个示例。

代码语言:javascript
复制
// Node Modules
import { css } from 'aphrodite';
import PropTypes from 'prop-types';
import React, { Fragment } from 'react';
import ReactSelect, { components } from 'react-select';
// Styles
import styles from './SelectStyles';
import { fontStyles } from 'styles';
// Assets
import caretImg from 'images/downCaret.svg';

class Select extends React.Component {
  render() {
    const { noOptionsMessage, onChange, options, value } = this.props;

    const Control = props => (
      <components.Control {...props} className={css(styles.selectControl)} />
    );

    const DropdownIndicator = props => {
      return (
        components.DropdownIndicator && (
          <components.DropdownIndicator {...props}>
            <img src={caretImg} height="6px" alt="▼" className={css(styles.caret)} />
          </components.DropdownIndicator>
        )
      );
    };

    const IndicatorSeparator = ({ innerProps }) => {
      return <span className={css(styles.indicatorSeparator)} {...innerProps} />;
    };

    const Menu = props => {
      return (
        <Fragment>
          <components.Menu {...props} className={css(styles.menu)}>
            {props.children}
          </components.Menu>
        </Fragment>
      );
    };

    const Option = props => (
      <components.Option
        {...props}
        className={css(
          fontStyles.regular,
          props.isSelected ? styles.menuOptionSelected : styles.menuOption,
        )}
      />
    );

    const ValueContainer = ({ children, ...props }) => (
      <components.ValueContainer {...props}>{children}</components.ValueContainer>
    );

    return (
      <ReactSelect
        className={css(fontStyles.semibold, styles.selectContainer)}
        components={{
          Control,
          DropdownIndicator,
          IndicatorSeparator,
          Menu,
          Option,
          ValueContainer,
        }}
        isSearchable={true}
        noOptionsMessage={() => noOptionsMessage}
        onChange={onChange}
        options={options}
        value={value}
      />
    );
  }
}

Select.propTypes = {
  noOptionsMessage: PropTypes.string,
  onChange: PropTypes.func.isRequired,
  options: PropTypes.arrayOf(PropTypes.object),
  value: PropTypes.object,
};

export default Select;
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54641179

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档