【问题标题】:How to set global style for a react-select.js如何为 react-select.js 设置全局样式
【发布时间】:2019-05-31 11:19:54
【问题描述】:

我想为react-select 设置全局样式。据我了解,我可以做两种方式:

  1. 使用 classNameclassNamePrefix,然后使用 CSS 定位元素。

    优点:我可以在任何地方使用相同的样式

    缺点:每个新组件都必须使用完全相同的classNameclassNamePrefix

例子:

className='react-select-container'

classNamePrefix="react-select"

结果:

<div class="react-select-container">
  <div class="react-select__control">
    <div class="react-select__value-container">...</div>
    <div class="react-select__indicators">...</div>
  </div>
  <div class="react-select__menu">
    <div class="react-select__menu-list">
      <div class="react-select__option">...</div>
    </div>
  </div>
</div>
  1. 使用"Provided Styles and State"创建外部javascript文件

    优点:比 CSS 更灵活

    缺点:每个新组件都必须通过导入的外部文件使用样式属性。

例子:

const customStyles = {
  option: (provided, state) => ({
    ...provided,
    borderBottom: '1px dotted pink',
    color: state.isSelected ? 'red' : 'blue',
    padding: 20,
  }),
  control: () => ({
    // none of react-select's styles are passed to <Control />
    width: 200,
  }),
  singleValue: (provided, state) => {
    const opacity = state.isDisabled ? 0.5 : 1;
    const transition = 'opacity 300ms';

    return { ...provided, opacity, transition };
  }
}

  const App = () => (
    <Select
      styles={customStyles}
      options={...}
    />
  );

设置多个 react-select 组件样式的最佳方式是什么?是否可以全局设置样式,并且每个新的 react-select 组件都会自动使用该样式?

【问题讨论】:

    标签: javascript reactjs react-select


    【解决方案1】:

    一种方法是创建您自己的选择组件,例如您导入的CustomSelect,而不是您设置自定义styletheme 之一的react-select,例如:

    import React, { Component } from 'react'
    import Select from 'react-select'
    
    class CustomSelect extends Component {
      render() {
    
        const styles = {
          ...
          // what ever you need
        }
    
        return <Select styles={styles} {...this.props} />
      }
    }
    
    export default CustomSelect
    

    我真的无法判断这是否是最好的方法,但我已经尝试了这两种方法,并且在一个有很多选择的大型项目中,它是维护/修改它的最简单方法。另外,如果您在某些时候需要自定义组件,这真的很方便。

    【讨论】:

    • 我在考虑同样的方法,我认为你是对的,它比我提供的两种方法灵活得多。谢谢。
    • @Observer 我会在React 中添加越来越多的内容,您可以通过 CSS-in-JS 看到自定义,减少classes 和传统 CSS 的一般使用可能是一个好习惯
    猜你喜欢
    • 1970-01-01
    • 2020-12-16
    • 1970-01-01
    • 2019-06-07
    • 1970-01-01
    • 2019-12-05
    • 2017-12-27
    • 2021-11-09
    • 2019-09-11
    相关资源
    最近更新 更多