当前位置: 首页 > 知识库问答 >
问题:

如何在react js中单击按钮或单击图标打开datepicker

韩玉石
2023-03-14

我正在我的演示应用程序中使用这个datepicker

https://www.npmjs.com/package/react-datepicker但是我的datepicker是在我点击输入字段时打开的。当用户点击右侧的按钮和图标而不是点击输入时,我们可以打开日期选择器吗?

import React from "react";
import ReactDOM from "react-dom";
import DatePicker from "react-datepicker";

import "react-datepicker/dist/react-datepicker.css";

import "./styles.css";

class Example extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      startDate: new Date()
    };
    this.handleChange = this.handleChange.bind(this);
  }

  handleChange(date) {
    this.setState({
      startDate: date
    });
  }

  openDatePicker = () => {};

  render() {
    return (
      <div>
        <DatePicker
          selected={this.state.startDate}
          onChange={this.handleChange}
        />
        <button onClick={this.openDatePicker}>openDate</button>
      </div>
    );
  }
}

const rootElement = document.getElementById("root");
ReactDOM.render(<Example />, rootElement);

共有2个答案

松阳泽
2023-03-14

您需要将按钮设置为customInput

import React from 'react'

const CustomInput = React.forwardRef((props,ref) => {

    return (
       <button onClick={props.onClick} ref={ref}>
         {props.value || props.placeholder}
       </button>
    )

})

export default CustomInput;

然后在主组件中。这样做

import React from "react";
import ReactDOM from "react-dom";
import DatePicker from "react-datepicker";
import CustomInput from "./CustomInput"
import "react-datepicker/dist/react-datepicker.css";

import "./styles.css";

class Example extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      startDate: new Date()
    };
    this.handleChange = this.handleChange.bind(this);
  }

  handleChange(date) {
    this.setState({
      startDate: date
    });
  }

  render() {
    return (
      <div>
        <DatePicker
          selected={this.state.startDate}
          onChange={this.handleChange}
          customInput={<CustomInput />}
          placeholderText="openDate"
        />
      </div>
    );
  }
}

const rootElement = document.getElementById("root");
ReactDOM.render(<Example />, rootElement);

段干茂实
2023-03-14

是的,除了单击组件本身之外,还可以使其打开。您可以使用DatePicker的open属性对其进行控制。以下是您的代码的修改版本:

import React from "react";
import ReactDOM from "react-dom";
import DatePicker from "react-datepicker";

import "react-datepicker/dist/react-datepicker.css";

import "./styles.css";

class Example extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      startDate: new Date(),
      datePickerIsOpen: false,
    };
    this.handleChange = this.handleChange.bind(this);
    this.openDatePicker = this.openDatePicker.bind(this)
  }

  handleChange(date) {
    this.setState({
      startDate: date
    });
  }

  openDatePicker() {
    this.setState({
      datePickerIsOpen: !this.state.datePickerIsOpen,
    });
  };

  render() {
    return (
      <div>
        <button onClick={this.openDatePicker}>openDate</button>
        <DatePicker
          selected={this.state.startDate}
          onChange={this.handleChange}
          onClickOutside={this.openDatePicker}
          open={this.state.datePickerIsOpen}
        />
      </div>
    );
  }
}

const rootElement = document.getElementById("root");
ReactDOM.render(<Example />, rootElement);

正如您所看到的,我们已经向示例类添加了一个状态,它控制DatePicker的open属性。我还添加了onClickOutter,它可以用来确定当datepicker打开后,如果用户单击datepicker之外的内容,应该发生什么。

 类似资料:
  • 我正在编写一个包含许多按钮的程序,当我单击其中一个按钮时,我希望它打开一个包含一些txt文件信息的JTextArea。我试图将JTextArea添加到按钮中,但它没有打开任何东西。我是Java新手,所以我不知道这是否是正确的方法。 我在GUI中定义了按钮和JTextArea 这是我在public void actionPerformed(ActionEvent e)中编写的代码

  • 编辑:底部的解决方案 这是一个跳棋游戏。单击一个按钮后,它等待单击第二个按钮与之交换。然而,有时你可能不想移动那个按钮,但一旦你点击了它,就没有回头路了,因为我无法禁用它。 在这里的其他帖子中,我看到人们使用 这只是使它在第一次单击后不可见。 这什么都干不了。 这也没什么用。编辑:所有这些方法都用true和false进行了尝试。 私有无效交换(){ 但你也需要 这样它就重新启用了它,或者其他什么,

  • 问题内容: 我创建了一个简单的电话目录,并且能够通过单击按钮来打开Whatsapp联系人。 这是示例代码: 如何通过单击android中的按钮来打开Whatsapp组? 希望给我任何建议! 问题答案: 您必须使用群组链接。当用户安装您的应用程序时,您应该要求他们从whatsapp组信息中复制组链接,然后将其存储以直接从您的应用程序访问该组。该链接仅对群组管理员可见,因此,如果用户不是管理员,则应指

  • 问题内容: 单击按钮后,我将尝试呈现一个段落。 这是我的代码。 在这里,我试图在单击按钮时呈现“你好朋友”。但是没有用。 问题答案: 这不是正确的方法,因为它是一个事件处理程序,它将不呈现元素,您需要的是“元素的条件呈现”。 有关详细信息,请参阅“文档”。 条件渲染 。 脚步: 1-使用具有初始值的状态变量。 2-点击按钮将值更新为。 3-使用该状态值进行条件渲染。 工作代码:

  • 问题内容: 我正在尝试在应用程序中实现一项功能,当互联网连接不可用时会显示警报。该警报具有两个操作(“确定”和“设置”),每当用户单击设置时,我都希望以编程方式将其设置为电话设置。 我正在使用Swift和Xcode。 问题答案: 使用 Swift 5.1更新 斯威夫特4.2

  • 作为我程序的一部分,我需要有一个按钮,当用户单击它时,它会打开一个新窗口。 嗯,我想我应该有一个类来创建框架并按按钮调用它。但我不知道该怎么开始。我刚刚在程序中找到了我的按钮,但它不起作用。有人能告诉我怎么做吗?或对其进行编码。