因此,我尝试在我的 React 应用程序中使用 jquery 日期/时间选择器,该应用程序预装了一个叫做 smart admin 的东西。目前,我让这些工作的唯一方法是使用document.getElementById
. 这有两个问题 - 1. 显然你真的不应该document.getElementById
在 React 中使用或类似的东西。2. 我觉得我真的不能做任何其他日期操作,我需要。所以,下面是我想要工作的代码,但不是
DatePicker 本身:
import React from "react";
import $ from "jquery";
import "smartadmin-plugins/es6/jquery-ui.min";
export default class UiDatepicker extends React.Component {
componentDidMount() {
const onSelectCallbacks = [];
const props = this.props;
const element = $(this.refs.input);
console.log('PROPS:', props);
if (props.minRestrict) {
onSelectCallbacks.push(selectedDate => {
$(props.minRestrict).datepicker("option", "minDate", selectedDate);
});
}
if (props.maxRestrict) {
onSelectCallbacks.push(selectedDate => {
$(props.maxRestrict).datepicker("option", "maxDate", selectedDate);
});
}
//Let others know about changes to the data field
onSelectCallbacks.push(selectedDate => {
element.triggerHandler("change");
const form = element.closest("form");
if (typeof form.bootstrapValidator === "function") {
try {
form.bootstrapValidator("revalidateField", element);
} catch (e) {
console.log(e.message);
}
}
});
const options = {
prevText: '<i class="fa fa-chevron-left"></i>',
nextText: '<i class="fa fa-chevron-right"></i>',
onSelect: selectedDate => {
onSelectCallbacks.forEach(cb => {
cb.call(cb, selectedDate);
console.log(selectedDate); <----- this consoles out the date, which is what I need!!!
});
}
};
if (props.numberOfMonths) options.numberOfMonths = props.numberOfMonths;
if (props.dateFormat) options.dateFormat = props.dateFormat;
if (props.defaultDate) options.defaultDate = props.defaultDate;
if (props.changeMonth) options.changeMonth = props.changeMonth;
element.datepicker(options);
}
render() {
const {
minRestrict,
maxRestrict,
changesMonth,
numberOfMonths,
dateFormat,
defaultDate,
changeMonth,
...props
} = { ...this.props };
return <input type="text" {...props} ref="input" />;
}
}
我已经读到该onSelect
函数与您将要访问 onChange 一样接近,但我不知道如何在我的 Search.js 文件中使用该函数。如果我能弄清楚,那就太好了,因为我的控制台日志正在打印日期,这正是我所需要的。
我的 Search.js 文件中的代码是:
export default class Search extends Component {
constructor(props) {
super(props)
this.state = {
... other state
startDate: "",
... other state
}
handleChange = (event) => {
this.setState({
[event.target.name]: event.target.value
}
, () => {console.log('START DATE:', this.state.startDate)});
}
我的另一个带有 JSX 代码的文件:
<label className="input">
{" "}
<i className="icon-append fa fa-calendar" />
<UiDatepicker
type="text"
id="search-rec-min-sd"
minRestrict="#search-rec-max-sd"
placeholder="Select Date"
dateFormat="mm/dd/yy"
name="startDate"
value={props.data.startDate}
onChange={props.handleChange}
/>
</label>
这不起作用。它适用于所有其他表单输入,除非我使用日期或时间选择器。有没有解决的办法?我真的不想继续使用document.getElementById
(我没有在这里展示,但我认为它不是必需的)。有没有办法将该selectedDate
变量传递给我的Search.js
组件并将其设置在 stat 对象中?我还不够精通 React!任何帮助,将不胜感激