如何在 react-datepicker 中自定义样式?

Posted

技术标签:

【中文标题】如何在 react-datepicker 中自定义样式?【英文标题】:How to customize the style in react-datepicker? 【发布时间】:2019-05-28 04:39:20 【问题描述】:

我想改变react-datepicker的样式:

1.将输入框改为自定义样式

2.更改日历的样式和语言

我看到一个帖子 (Custom Input Field on datepicker, [react-datepicker components] https://github.com/Hacker0x01/react-datepicker/blob/master/docs/datepicker.md) 谈论更换整个组件。我可以直接编辑样式而不编写新组件吗?如果是,我怎样才能做到这一点?此外,我不知道如何更改日历。如何找出我应该更改哪个组件?

import React, Component from 'react';
import render from 'react-dom';

import moment from 'moment';

import DatePicker from 'react-datepicker';
import 'react-datepicker/dist/react-datepicker.css';

const Input = (onChange, placeholder, value, isSecure, id, onClick) => (
    <input
        style=backgroundColor:"black"
        onChange=onChange
        placeholder=placeholder
        value=value
        isSecure=isSecure
        id=id
        onClick=onClick
    />
);

const NoClickInput = (onClick, ...props) => <Input ...props />;

class App extends Component 
    state = 
        startDate: moment(),
        endDate: moment()
    ;

    render() 
        const startDate, endDate = this.state;
        return (
            <div>
                <div>Start:</div>
                <DatePicker
                    selected=startDate
                    selectsStart
                    startDate=startDate
                    endDate=endDate
                    onChange=date=>this.setState(startDate)
                />
                <div>End:</div>
                <DatePicker
                    selected=endDate
                    selectsEnd
                    startDate=startDate
                    endDate=endDate
                    onChange=date => this.setState( endDate )
                />
            </div>
        );
    


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

【问题讨论】:

【参考方案1】:

您好,您需要创建自定义 css 样式表并将其导入到 react 中

还可以尝试在 css 代码中使用 !important 将自定义样式表应用于默认样式

【讨论】:

【参考方案2】: 从 node_modules 导入 sass 文件 覆盖类
@import 'node_modules/react-datepicker/src/stylesheets/datepicker.scss';

.react-datepicker__month-container 
  background-color: #081833;
  color: #969eac;
  font-size: 1rem;
  font-family: 'Mulish';

  .react-datepicker__month 
    padding: 1rem 0;
  

  .react-datepicker__month-text 
    display: inline-block;
    width: 5rem;
    margin: 0.5rem;
    font-size: 1rem;
    padding: 0.2rem;
    &:hover 
      background-color: #534cea;
    
  

  

使用 sass 文件或将其编译为 css 并使用。

【讨论】:

【参考方案3】:

对于简单的样式更改,如字体、字体大小或颜色,我建议简单地覆盖 react-datepicker 的默认 scss-variables。例如:

    创建一个带有变量的 scss 文件:variables.scss

    $datepicker__font-size: 1rem;

    从节点模块导入变量文件和 datepicker.scss 文件:

    @import 'variables.scss'; @import 'node_modules/react-datepicker/src/stylesheets/datepicker.scss';

    编译成css。新值应替换默认值$datepicker__font-size: 0.8rem !default;

可以找到完整的变量列表:node_modules/react-datepicker/src/stylesheets/variables.scss

【讨论】:

以上是关于如何在 react-datepicker 中自定义样式?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 react-datepicker 旁边设置日历图标?

抛出错误 RangeError:将自定义日期设置为 react-datepicker 的 DatePicker 时时间值无效

如何设置 react-datepicker 样式?

如何使 react-datepicker 正确显示?

如何使用 Formik 在 react-datepicker 中设置初始日期?

如何将 react-datepicker 与 redux 表单一起使用?