使用材料 ui 键盘日期选择器动态设置日期

Posted

技术标签:

【中文标题】使用材料 ui 键盘日期选择器动态设置日期【英文标题】:Set date dynamically with material ui keyboarddatepicker 【发布时间】:2021-04-30 01:46:06 【问题描述】:

我正在使用 material-ui/pickers 中的 KeyboardDatePicker,它运行良好。但是我的表单中有多个日期选择器,我想将状态设置为

   
  const [selectedDate, setSelectedDate] = useState(
    selectedFromDate: new Date(),
    selectedToDate: new Date(),
  );

  // jsx
          <MuiPickersUtilsProvider utils=DateFnsUtils>
              <KeyboardDatePicker
                id="selectedFromDate"
                label="From Date"
                format="dd/MM/yyyy"
                value=selectedDate.selectedFromDate
                onChange=handleDateChange
                KeyboardButtonProps=
                  "aria-label": "change date",
                
              />
          </MuiPickersUtilsProvider>
          <MuiPickersUtilsProvider utils=DateFnsUtils>
              <KeyboardDatePicker
                id="selectedToDate"
                label="To Date"
                format="dd/MM/yyyy"
                value=selectedDate.selectedToDate
                onChange=handleDateChange
                KeyboardButtonProps=
                  "aria-label": "change date",
                
              />
          </MuiPickersUtilsProvider>

    const handleDateChange = (e) => 
    
    // here `e` is `DateIOType` and not event 
      setSelectedDate(
        ...selectedDate,
        [e.target.id]: e.target.value
      )
    ;

但我找不到在KeyboardDatePicker 中获取event 属性的方法,它们仅在(date: DateIOType, value?: string | null) 中提供documentation。是否有任何解决方法可以实现这一目标?提前致谢

【问题讨论】:

【参考方案1】:

由于 Id 没有返回,为 selectedFieldFor 添加一个状态变量:

const [selectedFieldFor, setSelectedFieldFor] = useState("")
const [selectedDate, setSelectedDate] = useState(
    selectedFromDate: new Date(),
    selectedToDate: new Date(),
);
              
<MuiPickersUtilsProvider utils=DateFnsUtils>
    <KeyboardDatePicker
        id="selectedFromDate"
        ......
        onClick=() => setSelectedFieldFor("selectedFromDate")
    />
</MuiPickersUtilsProvider>
<MuiPickersUtilsProvider utils=DateFnsUtils>
    <KeyboardDatePicker
        id="selectedToDate"
        ......
        onClick=() => setSelectedFieldFor("selectedToDate")
    />
</MuiPickersUtilsProvider>

const handleDateChange = (e) => 
    setSelectedDate(
        ...selectedDate,
        selectedFieldFor: e.target.value
    )
;

【讨论】:

以上是关于使用材料 ui 键盘日期选择器动态设置日期的主要内容,如果未能解决你的问题,请参考以下文章

如何使用获取的变量作为材料 UI 日期选择器的初始状态?

对话框中的材料 UI 更改日期字段样式

在材料ui的日期选择器中更改formatDate

如何在第一次单击日期文本字段时生成我的日期选择器 UI?

材料 ui 实验室日期选择器,无法解析“@material-ui/lab/AdapterDateFns”

带有手动输入和动态最小日期的 jQuery UI 日期选择器