【问题标题】:How to styling React-Select如何设置 React-Select 样式
【发布时间】:2021-10-02 18:26:35
【问题描述】:

我想修改 react-select 的边框。我正在使用道具className,但实际上会创建一个新边框作为包装器。

这是我的代码:

import React from 'react'
import Select from "react-select"

const InputSelect = (props) => {
  const { options, placeholder } = props
  return (
    <Select
      options={options}
      placeholder={placeholder}
      className="border border-red-500" />
  )
}

export default InputSelect

结果:

然后我尝试使用 inputClassName 。但是什么也没发生

下面是我使用inputClassName的代码:

import React from 'react'
import Select from "react-select"

const InputSelect = (props) => {
  const { options, placeholder } = props
  return (
    <Select
      options={options}
      placeholder={placeholder}
      inputClassName="border border-red-500"
    />
  )
}

export default InputSelect

使用inputClassName 的结果:

【问题讨论】:

    标签: reactjs styling react-select


    【解决方案1】:

    您可以使用control 键来扩展react-select 组件的边框颜色和框阴影。将提供的样式传播到返回的对象中,您可以在保留现有样式的同时随意扩展它。您可以参考this link 来设置组件的其他样式。

    const options = [
      { value: 'chocolate', label: 'Chocolate' },
      { value: 'strawberry', label: 'Strawberry' },
      { value: 'vanilla', label: 'Vanilla' },
    ];
    
    class App extends React.Component {
        constructor(props) {
          super(props);
          this.state = {hasError: false};
        }
        
        onChange = (value) => {
          this.setState(prevState => ({ hasError: !prevState.hasError }));
        }
        
        render() {
            const {hasError} = this.state;
            const getColor = (isValid) => isValid ? 'gray' : 'red';
            const colourStyles = {
              control: (styles) => ({ 
                  ...styles, 
                  borderColor: getColor(!hasError), 
                  boxShadow: `0 0 0 1px ${getColor(!hasError)}`, 
                  ':hover' : { 
                    borderColor: getColor(!hasError), 
                    boxShadow: `0 0 0 1px ${getColor(!hasError)}`,  
                  } 
               })
            };
            return <Select onChange={this.onChange} styles={colourStyles} options={options} />;
        }
    }
    
    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/@babel/standalone@7.12.7/babel.min.js"></script>
    <script src="https://unpkg.com/prop-types@15.7.2/prop-types.js"></script>
    <script src="https://unpkg.com/classnames@2.2.6/index.js"></script>
    <script src="https://unpkg.com/react-input-autosize@2.2.2/dist/react-input-autosize.js"></script>
    <script src="https://unpkg.com/emotion@10.0.27/dist/emotion.umd.min.js"></script>
    <script src="https://unpkg.com/react-select@2.4.4/dist/react-select.js"></script>
    <div id="root"></div>

    【讨论】:

    • 如何动态调整类?例如我已经声明了isError。如果isErrortrue,则边框变为红色。否则边框变灰
    • 您可以传递状态并在此基础上更改颜色。我已经更新了解决方案。
    猜你喜欢
    • 2018-08-26
    • 1970-01-01
    • 1970-01-01
    • 2018-07-30
    • 2023-03-16
    • 1970-01-01
    • 2019-09-11
    • 1970-01-01
    • 2020-11-30
    相关资源
    最近更新 更多