14

在我的 React (v16.3) 应用程序中,我正在使用material-ui-pickers库的 DatePicker 组件呈现日期选择器控件。该组件呈现一个 Material-UITextField组件。我喜欢更改它,因此它只呈现 Material-UIInput而没有TextField.

据我了解,可以使用 DatePickersTextFieldComponent字段(位于底部) 但我不知道如何使用该字段。

 <DatePicker 
     id={name}
     TextFieldComponent={...<HOW_TO> ...}
     value={value} 
     onChange={this.handleChange}
     disabled={isReadOnly} />

任何想法如何做到这一点?

更新: 通过找到正确的语法来使用更进一步,而不是在没有 chrome ( FormControl,InputLabel等) 的情况下呈现。但也不再打开 DatePicker。我必须以编程方式打开它吗?

<DatePicker 
    id={name}
    TextFieldComponent={(props) => this.renderInput(props)}
    value={value} 
    onChange={this.handleChange}
    disabled={isReadOnly} />

这是renderInput():

renderInput(props: TextFieldProps): any {
   return ( <Input
     id={props.id}
     value={props.value}
     onChange={this.handleChange}
     type={'text'}
     disabled={props.disabled}
   /> );
 }
4

1 回答 1

20

2020 年 10 月更新

@material-ui/pickers v3.x(最新)

要渲染一个Input而不是一个TextField组件,您可以将一个自定义组件传递给TextFieldComponentprop on DatePicker

您需要将以下道具传递给Input: valueonChangeonClick.

import React, { useState } from "react";
import { Input, TextFieldProps } from "@material-ui/core";
import { DatePicker } from "@material-ui/pickers";
import { MaterialUiPickersDate } from "@material-ui/pickers/typings/date";

export default function Demo() {
  const [selectedDate, setSelectedDate] = useState<MaterialUiPickersDate>(
    new Date()
  );

  const renderInput = (props: TextFieldProps): any => (
    <Input
      type="text"
      onClick={props.onClick}
      value={props.value}
      onChange={props.onChange}
    />
  );

  return (
    <DatePicker
      label="Basic example"
      value={selectedDate}
      onChange={setSelectedDate}
      TextFieldComponent={renderInput}
    />
  );
}

Edit Material UI Pickers Example

@material-ui/pickers v4.0.0-alpha12(下一个)

注意:v4 目前处于 alpha 阶段,因此 API 将来可能会发生变化。

In V4, you use the renderInput prop on DatePicker to customize the input (see docs). The following example renders a material ui Input instead of a TextField.

import React, { useState } from "react";
import { Input, TextFieldProps } from "@material-ui/core";
import { DatePicker } from "@material-ui/pickers";

export default function Demo() {
  const [selectedDate, setSelectedDate] = useState<Date | null>(new Date());

  const renderInput = (props: TextFieldProps): any => (
    <Input
      type="text"
      inputRef={props.inputRef}
      inputProps={props.inputProps}
      value={props.value}
      onClick={props.onClick}
      onChange={props.onChange}
      endAdornment={props.InputProps?.endAdornment}
    />
  );

  return (
    <DatePicker
      label="Basic example"
      value={selectedDate}
      onChange={setSelectedDate}
      renderInput={renderInput}
    />
  );
}

Edit Material UI Pickers v4 Example

于 2018-04-18T14:49:27.520 回答