【问题标题】:Why my react date picker doesn't pop over when is displayed from a <Link>?当从 <Link> 显示时,为什么我的反应日期选择器没有弹出?
【发布时间】:2017-07-30 05:25:19
【问题描述】:

我有以下 React 组件:

import React from 'react'
import DatePicker from 'react-datepicker'
import moment from 'moment'

import 'react-datepicker/dist/react-datepicker.css'

class MyForm extends React.Component {
    constructor(props) {
      super(props)
      this.state = {
        //properties...
        myDate : moment()
      }
      this.handleDateChange = this.handleDateChange.bind(this)
      this.handleSubmit = this.handleSubmit.bind(this)
    }
    handleDateChange(date) {
      this.setState({
        myDate : date
      })
    }
    handleSubmit(event) {
      event.preventDefault()
      // implementation...
    }
    render() {
        return (
            <form onSubmit={ this.handleSubmit }>
                /* more components here... */
                <DatePicker 
                    dateFormat='DD/MM/YYYY' maxDate={ moment() } 
                    fixedHeight peekNextMonth showMonthDropdown showYearDropdown dropdownMode='select'
                    selected={ this.state.myDate } onChange={ this.handleDateChange }
                    />
            </form>
        )
    }
}

export default MyForm

此组件显示在 react 路由器使用的链接下。在我的 App.js 中:

class App extends Component {
    render() {
        <Router>
            <div className="App">
              <Link to="/myForm">My Form</Link>
              <Route path="/myForm" component={MyForm} />
            </div>
        </Router>
    }
}

当我访问http://localhost:3000/myForm 时,日期选择器组件显示为文本框,没有动画,没有要显示的日期选择器,什么都没有。

然后,我尝试在 App.js 中仅使用 &lt;DatePicker&gt; 并像示例中一样工作:

class App extends Component {
    constructor(props) {
      super(props)
      this.state = {
        dateField : moment()
      }
      this.handleDateChange = this.handleDateChange.bind(this)
    }
    handleDateChange(date) {
      this.setState({
        dateField: date
      })
    }
    render() {
        <Router>
            <div className="App">
              <Link to="/myForm">My Form</Link>
              <Route path="/myForm" component={MyForm} />
            </div>
            <DatePicker 
                dateFormat='DD/MM/YYYY' maxDate={ moment() } 
                fixedHeight peekNextMonth showMonthDropdown showYearDropdown dropdownMode='select'
                selected={ this.state.dateField } onChange={ this.handleDateChange }
                />
        </Router>
    }
}

现在,我在http://localhost:3000/myForm 看到了这两个组件,不同之处在于MyForm 中的选择器仍然无法弹出,但App 中的选择器可以。

显示这些结果的图片。

这里:日期选择器不会弹出。它在MyForm 组件内:

现在使用我在 App.js 中添加的日期选择器:

【问题讨论】:

  • 您确定将DatePicker 组件导入MyForm 吗?
  • 是的。查看MyForm中的import语句
  • 糟糕,不知道我是怎么错过的。
  • 控制台有输出吗?点击日期选择器时?
  • @JoseAPL 我没有任何输出。我已检查启用所有消息,但未显示警告或错误。

标签: javascript reactjs react-router react-datepicker


【解决方案1】:

MyForm 中,将selected={this.state.fechaNacimento} 更改为selected={this.state.myDate}

【讨论】:

  • 抱歉,以问题的形式调整代码时出现错误。我修好了。我认为这不是问题。
  • 嗯,不完全确定。尝试在浏览器中检查控制台,看看是否记录了任何错误。
  • 没有任何记录,因为我已在问题中回复 Jose。
猜你喜欢
  • 1970-01-01
  • 2014-03-06
  • 1970-01-01
  • 1970-01-01
  • 2017-11-24
  • 2019-01-13
  • 2018-06-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多