如何在material-table中集成timepicker

How to integrate timepicker in material-table

如何访问 material-table 中的一行(在 editable 模式下)并集成来自 materialui 的时间选择器?

<MaterialTable
    title=""
    columns={columns}
    data={state.data}
    editable={{
      onRowAdd: newData =>
        new Promise(resolve => {
          setTimeout(() => {
            resolve();
            setState(prevState => {
              const data = [...prevState.data];
              data.push(newData);
              return { ...prevState, data };
            });
          }, 600);
        }),

      //onRowUpdate...

      //onRowDelete...

    }}
  />

fields to change (yellow):

您必须覆盖列的渲染和编辑组件。

我创建了一个 SandBox 来教你怎么做。

数据应该有一个名为 time 的日期或 timeInMillis 值。这将传递给列的渲染函数,该函数会将其解析为人类可读的:

render: ({ time }) => `${time.getHours()}:${time.getMinutes()}`

要进行编辑,您必须使用 TimePicker 覆盖 editComponent:

 editComponent: ({value, onChange}) => <MuiPickersUtilsProvider utils={DateFnsUtils}>
    <KeyboardTimePicker
      margin="normal"
      id="time-picker"
      label="Time picker"
      value={value}
      onChange={onChange}
      KeyboardButtonProps={{
        "aria-label": "change time"
      }}
    />
  </MuiPickersUtilsProvider>

这将使您 edit/set 该行的新时间,并在用户单击保存后将其传递回 table 的 editable 回调。

回调将允许您更新数据。

更新:

更新到 1.69.0 以解决此问题。


似乎已接受答案中的 SandBox 代码不再有效。 我为正在寻找工作代码的其他人创建了一个新的 codesandbox here

Note: Warning: Unknown event handler property `onBulkEditRowChanged`. It will be ignored.

is an issue with latest version (1.68.0) of material-table.

添加: 要解决上述问题,目前 - 2020/08/16,我们需要使用 1.66.0

在 1.67.1 中仍然出现了一些警告。