Titre réécrit comme : DateTimePicker intégré à React avec le formulaire de réaction-hook ne peut pas afficher correctement la date
P粉418854048
P粉418854048 2023-09-12 17:36:32
0
1
648

J'ai un formulaire auquel j'essaie d'ajouter un sélecteur de date/heure React, mais j'essaie également de l'intégrer avec react-hook-form pour qu'il fonctionne avec le reste du formulaire, mais cela ne semble pas fonctionner du tout .

Lors du premier rendu du formulaire, la date actuelle n'est pas affichée dans le sélecteur de date, seul "--------------" est affiché, et lorsque je sélectionne une date dans la fenêtre contextuelle, la date dans le champ ne s'affiche pas. ne change pas non plus.

import { Controller, useForm } from 'react-hook-form'
import DateTimePicker from 'react-datetime-picker'
import 'react-datetime-picker/dist/DateTimePicker.css'
import 'react-calendar/dist/Calendar.css'

const Jobs = () => {
    const { control, register, handleSubmit, watch, formState: { errors } } = useForm();

    const onSubmit = handleSubmit(async ({ firstname, startdate }) => {
        console.log(startdate)
    })

    return (
        <form onSubmit={handleSubmit(onSubmit)}>

            <div>
                <input
                    id="firstname"
                    name="firstname"
                    type="text"
                    { ...register("firstname") }
                />
            </div>

            <div>
                <Controller
                    control={control}
                    name='startdate'
                    render={({ field: { onChange, value } }) => (
                        <DateTimePicker
                            onChange={onChange}
                            selected={value}
                        />
                    )}
                />
            </div>
        </form>
    )
}

P粉418854048
P粉418854048

répondre à tous(1)
P粉438918323

On dirait que vous avez raison d'utiliser React-hook-form et React-datetime-picker. Le problème auquel vous êtes confronté peut être lié à la valeur initiale du champ de date mal définie.

Pour résoudre ce problème, vous pouvez définir la valeur initiale pour le champ de date en utilisant la propriété defaultValue dans le Controller. De plus, vous devez vous assurer que la valeur transmise à DateTimePicker est un objet Date, car React-datetime-picker attend une valeur Date.

Voici le code mis à jour :

import { Controller, useForm } from 'react-hook-form';
import DateTimePicker from 'react-datetime-picker';
import 'react-datetime-picker/dist/DateTimePicker.css';
import 'react-calendar/dist/Calendar.css';

const Jobs = () => {
  const {
    control,
    register,
    handleSubmit,
    formState: { errors },
  } = useForm();

  const onSubmit = handleSubmit(async ({ firstname, startdate }) => {
    console.log(startdate);
  });

  return (
    <form onSubmit={handleSubmit(onSubmit)}>
      <div>
        <input id="firstname" name="firstname" type="text" {...register('firstname')} />
      </div>

      <div>
        <Controller
          control={control}
          name="startdate"
          defaultValue={new Date()} // 将初始值设置为当前日期
          render={({ field: { onChange, value } }) => (
            <DateTimePicker onChange={onChange} value={value ? new Date(value) : null} />
          )}
        />
      </div>
    </form>
  );
};

En définissant defaultValue sur new Date(), le sélecteur de date devrait désormais afficher la date actuelle lors du premier rendu du formulaire. Assurez-vous également que lorsque vous transmettez la valeur au DateTimePicker à l’aide de new Date(value), il s’agit d’un objet Date.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal