Búsqueda de sitios web

reactjs - ¿Cómo mostrar un valor al usar el tipo de fecha en TextField?


Estoy usando TextField de material-ui, y quiero mostrar la fecha actual en TextField, y también permitir al usuario elegir otra fecha. ¿Es posible?

El value={date} no aparece en el TextField al usar type="date". He intentado buscar ayuda en internet, pero no puedo encontrar nada. El código está a continuación:

  • ¡Cualquier ayuda es apreciada! Y gracias de antemano.
import React, { useState } from 'react';
import { TextField } from '@material-ui/core';
import { useForm } from 'react-hook-form';

export const AddDate: React.FC = () => {
    const [date, setDate] = useState(
        new Date().getDate() + '/' + (new Date().getMonth() + 1) + '/' + new Date().getFullYear(),
    );

    // handles when user changes input in date inputfield
    const handleChangeDate = (e: React.ChangeEvent<HTMLInputElement>): void => {
       setDate(e.target.value);
    };

    return(
        {/*Text field - date*/}
        <TextField
            name="date"
            id="date"
            label="Date"
            type="date"
            InputLabelProps={{ shrink: true }}
            inputRef={register}
            value={date}
            onChange={handleChangeDate}
            fullWidth
            required
          />
    );
};

Respuesta #1

Esto funciona para mí.

import React, { useState, useEffect } from "react";
import { TextField } from "@material-ui/core";
import "./styles.css";
import moment from 'moment';

const App =()=> {
  const [date, setDate] = useState(
    moment(new Date()).format("YYYY-MM-DD")
 );

 // handles when user changes input in date inputfield
 const handleChangeDate = e => {
    setDate(e.target.value);
 };

  console.log(date)

 return (
  <>
  <TextField
    name="date"
    id="date"
    label="Date"
    type="date"
    InputLabelProps={{ shrink: true }}
    value={date}
    onChange={handleChangeDate}
    fullWidth
    required
  />
</>
);
}

 export default App;

Acabo de cambiar tu código un poco. El único cambio proviene del useState. Solo tienes que usar moment js para convertir la fecha al tipo de fecha de material-ui.

Respuesta #2

Tienes que usar MuiPickersUtilsProvider. Además, deberías necesitar el formateador de fechas moment.js

import DateFnsUtils from '@date-io/date-fns';
import "react-datepicker/dist/react-datepicker.css";
import {
    MuiPickersUtilsProvider,
    KeyboardDatePicker,
} from '@material-ui/pickers';
import moment from 'moment';
import Input from '@material-ui/core/Input';

<MuiPickersUtilsProvider utils={DateFnsUtils}>
        <KeyboardDatePicker
            input={<Input/>}
            disableToolbar
            variant="inline"
            format="yyyy-mm-dd"
            margin="normal"
            value={value}
            onChange={event => {
                onValueChange(moment(event).format("YYYY-MM-DD"))
            }}
        />
</MuiPickersUtilsProvider>

instalar dependencias:

npm install @material-ui/[email 
npm install @date-io/[email 
npm install [email