我是新来响应开发和使用实质性UI的人。我需要开发一个带有动态列的表,该列具有包含日期和时间输入控件的添加行。 我计划维护一个对象数组,并将每个对象设置为日期和时间选择器的值。最初是在设置状态时设置的值,然后在日期或时间更改后,更改不会显示在控制器中。
以下是代码的缩减版本,其中将对象数组添加到状态。单击按钮或更改时间或日期选择器时,它将不会显示在控件中。
我注意到的一件事是,在更改控件后更改代码(在代码中的随机位置添加空格)时,更改会得到反映。
import 'date-fns';
import React from 'react';
import Grid from '@material-ui/core/Grid';
import DateFnsUtils from '@date-io/date-fns';
import {
MuiPickersUtilsProvider,
KeyboardTimePicker,
KeyboardDatePicker,
} from '@material-ui/pickers';
export default function MaterialUIPickers() {
let addRowData: {
sessionItem: string,
sessionTimes: { headder: string, startTime: Date | null, endTime: Date | null }[]
} = {
sessionItem: "Test",
sessionTimes:[{ headder: "Test", startTime: new Date('2014-08-18T21:11:54'), endTime: new Date('2014-08-18T21:11:54') }]
};
// The first commit of Material-UI
const [selectedDate, setSelectedDate] = React.useState(
addRowData
);
const handleDateChange = (date: Date | null) => {
selectedDate.sessionTimes[0].startTime=date;
setSelectedDate(selectedDate);
};
const onButtonClick = ()=>{
selectedDate.sessionTimes[0].startTime=new Date();
setSelectedDate(selectedDate);
}
return (
<Grid container justify="space-around">
<MuiPickersUtilsProvider utils={DateFnsUtils}>
<KeyboardDatePicker
disableToolbar
variant="inline"
format="MM/dd/yyyy"
margin="normal"
id="date-picker-inline"
value={selectedDate.sessionTimes[0].startTime}
onChange={handleDateChange}
KeyboardButtonProps={{
'aria-label': 'change date',
}}
/>
<KeyboardDatePicker
margin="normal"
id="date-picker-dialog"
format="MM/dd/yyyy"
value={selectedDate.sessionTimes[0].startTime}
onChange={handleDateChange}
KeyboardButtonProps={{
'aria-label': 'change date',
}}
/>
<KeyboardTimePicker
margin="normal"
id="time-picker"
value={selectedDate.sessionTimes[0].startTime}
onChange={handleDateChange}
KeyboardButtonProps={{
'aria-label': 'change time',
}}
/>
</MuiPickersUtilsProvider>
<input type="Button" value="set" onClick={onButtonClick}/>
</Grid>
);
}