【问题标题】:adding jquery to react component and update state添加 jquery 以响应组件并更新状态
【发布时间】:2016-12-12 17:46:06
【问题描述】:

我有 checkincheckout 字段,我正在尝试将 pickaday jquery datepicker 集成到我的反应组件 pickaday。我将签入和签出字段都作为父组件中的状态,并将它们作为道具传递给我创建的datepicker 组件。我所做的是使用componentDidMount 来初始化datepicker,它按预期工作。这里的问题是我最初只能设置 minDate ,之后它不会随着状态的变化而更新 props 的值。

DatePicker.js.jsx

var DatePicker = React.createClass({
//This is a callback to parent component for updating the state
    changeDuration: function (date) {
        this.props.onChange(this.props.name, date);
    },


    componentDidMount: function () {
        var _self = this;

        var picker = new Pikaday({
            field: document.getElementById(this.props.name),
            format: 'D MMM YYYY',
            onSelect: function () {
                _self.changeDuration(this.getMoment().toDate())
            },
            minDate: this.props.minDate
        });
    },


    render: function () {
        return (
            <input type="text" id={this.props.name} defaultValue={this.props.value}/>
        )
    }
});

在父组件中,我像这样调用上面的组件(我传递的minDate 只会在初始加载时工作,之后就不能工作了??)

          {/*Checkin and checkout dates*/}
            <div className="col s12 m6 l6 rd-custom-input">
                <DatePicker name={'checkIn'} value={this.props.checkIn}
                            onChange={this.handleNamedChange} minDate={this.props.checkIn}/>
            </div>
            <div className="col s12 m6 l6 rd-custom-input">
                <DatePicker name={'checkOut'} value={this.props.checkOut}
                            onChange={this.handleNamedChange} minDate={this.props.checkIn}/>
            </div>

我怀疑componentDidMountdatepicker 上选择date 时更新状态的位置错误。有人可以告诉我这里做错了什么吗?

【问题讨论】:

  • 我个人不会在 React 中使用任何 jQuery UI 库,而是找到一个 React 特定库来使用。主要问题是 jQuery 和 React 都希望控制 DOM 并能够改变 DOM。您可能会遇到 jQuery 更新 DOM/UI 并且 React 注意到某些更改但它没有更改它的情况。然后它将按照它想要的方式重新渲染 DOM。您可能没有遇到此类问题,但希望引起您的注意
  • @finalfreq 是的..我想你就在这里..但是我为 react 找到的所有 datepicker 库都使用 webpack,我发现很难与 rails 资产管道一起使用。如果按预期工作,jquery 库很容易集成,在我的情况下没有任何其他依赖项

标签: javascript jquery reactjs datepicker


【解决方案1】:

这是因为一旦组件被挂载,componentDidMount 生命周期事件就会被触发,而您正在寻找的是在 render 方法中执行某些操作。

var DatePicker = React.createClass({

    picker: null,

    changeDuration: function (date) {
        this.props.onChange(this.props.name, date);
    },


    componentDidMount: function () {
        var _self = this;

        var picker = new Pikaday({
            field: document.getElementById(this.props.name),
            format: 'D MMM YYYY',
            onSelect: function () {
                _self.changeDuration(this.getMoment().toDate())
            },
            minDate: this.props.minDate
        });

        this.picker = picker;
    },


    render: function () {

        if(this.picker){
          this.picker.setMinDate(this.props.minDate);
        }
        return (
            <input type="text" id={this.props.name} defaultValue={this.props.value}/>
        )
    }
});

因此,在这种情况下,您将选取器存储在名为 picker 的类属性中,稍后在渲染时您可以调用它的 gotoDate 方法。

【讨论】:

  • 这行得通。但是 gotoDate 没有工作,但 setMinDate 工作。我建议进行编辑。非常感谢..
  • @Abhilash 我拒绝了,我的错。我认为这是一个无效的编辑,正如我在 API 部分的插件页面上看到的那样。
猜你喜欢
  • 2022-08-16
  • 2011-03-30
  • 2021-09-05
  • 2020-05-02
  • 2017-02-26
  • 2019-08-30
  • 2021-06-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多