【发布时间】:2016-02-24 17:01:08
【问题描述】:
目前正在为表单创建一个反应组件。我正在通过常规 javascript 文件将 datepicker 应用于我的输入,这些输入在 react (jsx) 中呈现。
当从日期选择器中选择日期时,我试图从输入中提取状态。不幸的是,反应并没有获得价值。我知道这可能与从常规 javascript 文件调用 datepicker 到呈现的输入有关。问题是,当我在选择日期后在输入上调用常规 .val 时,它会为我提供值。
另外应该提一下,我正在使用 bootstrap-datepicker
任何建议或建议将不胜感激:)
form.js.jsx
var StepOne = React.createClass({
getInitialState: function() {
return {start: '', end: ''};
},
startDateChange: function(e) {
this.setState({start: e.target.value});
},
endDateChange: function(e) {
this.setState({end: e.target.value});
},
render: function() {
return (
<div className="stepOne">
<ul>
<li>
<label>Starts</label>
<input id="event-start" type="text" value={this.state.start} onChange={this.startDateChange} />
<label>Ends</label>
<input id="event-end" type="text" value={this.state.end} onChange={this.endDateChange} />
</li>
</ul>
</div>
);
},
}); // end of component
stepone_datepicker.js
$(function() {
var date = new Date();
date.setDate(date.getDate()-1);
$('#event-start, #event-end').each(function() {
$(this).datepicker({
autoclose: true,
minDate: new Date(),
startDate: date
});
});
});
【问题讨论】:
-
您使用的日期选择器控件是什么?
-
首先,我注意到您在一端使用
this.state.end,并将状态设置为end_date。其次,我不会混合 jquery 对此做出反应。也许您可以尝试 github 上提供的一些 react datepicker 组件。如果你真的需要使用 jQuery,使用 react 组件的componentDidMount生命周期钩子来运行你的 jquery 代码,不要乱用 react 的渲染方式。 -
@AlexMoldovan 是正确的。由于 React 的虚拟 DOM 的工作方式,如果 jQuery 从外部修改 DOM,React 不会“知道”它,相反,当 React 重新渲染时,jQuery 不会知道这些更新。如果你想在 React 中使用 jQuery,你需要在 React 的生命周期方法中使用它,并且应该使用
ReactDOM.findDOMNode()来引用 DOM 元素。 -
有道理。我知道 jQuery 会对 DOM 产生不同的影响,但不认为它会影响从输入中获取实际值。看起来我终于要让 Browserify 运行并使用实际的反应日期选择器。感谢您帮助我理解这一点!
标签: javascript jquery reactjs datepicker