J'essaie de configurer un exemple de sélecteur de plage de dates d'interface utilisateur matérielle en suivant le code de la documentation, mais cela me donne une erreur, TypeError: undefined n'est pas une fonction.
Je n'ai jamais vu useState suivi d'un composant auparavant et c'est ce qui génère l'erreur.
React.useState<DateRange>([null, null])
https://dev.material-ui-pickers.dev/demo/daterangepicker
Code complet:
import * as React from "react";
import { TextField } from "@material-ui/core";
import { DateRangePicker, DateRange, DateRangeDelimiter } from "@material-ui/pickers";
function BasicDateRangePicker() {
const [selectedDate, handleDateChange] = React.useState<DateRange>([null, null]);
return (
<DateRangePicker
startText="Check-in"
endText="Check-out"
value={selectedDate}
onChange={date => handleDateChange(date)}
renderInput={(startProps, endProps) => (
<>
<TextField {...startProps} />
<DateRangeDelimiter> to </DateRangeDelimiter>
<TextField {...endProps} />
</>
)}
/>
);
}
export default BasicDateRangePicker;
3 Réponses :
Le composant DateRangePicker également besoin du DateFnsAdapter et le bloc entier doit être encapsulé avec LocalizationProvider .
Votre code doit ressembler à ceci:
import React from 'react';
import { TextField } from "@material-ui/core";
import DateFnsAdapter from '@material-ui/pickers/adapter/date-fns'; // choose your lib
import { DateRangePicker, DateRange, DateRangeDelimiter, LocalizationProvider } from "@material-ui/pickers";
function BasicDateRangePicker() {
const [selectedDate, handleDateChange] = React.useState<DateRange>([null, null]);
return (
<LocalizationProvider dateAdapter={DateFnsUtils}>
<DateRangePicker
startText="Check-in"
endText="Check-out"
value={selectedDate}
onChange={date => handleDateChange(date)}
renderInput={(startProps, endProps) => (
<>
<TextField {...startProps} />
<DateRangeDelimiter> to </DateRangeDelimiter>
<TextField {...endProps} />
</>
)}
/>
</LocalizationProvider>
);
}
export default BasicDateRangePicker;
Vous pouvez en savoir plus sur dateAdapter dans le démarrage rapide et dans l' installation .
Merci mais j'obtiens toujours une erreur TypeError: undefined n'est pas une fonction sur React.useState<DateRange>([null, null])
Je ne suis pas trop familier avec le typographie, VS Code dit que "les arguments de type ne peuvent être utilisés que dans les fichiers TypeScript" sur <DateRange>. Quelle en serait la version non dactylographiée?
Qu'en est-il de la version non dactylographiée? Y a-t-il ?
@Omid supprimez simplement le <DateRange> que vous avez là après le useState .
Voici une version de travail. J'ai ajouté le LocalizationProvider et supprimé la <DateRange> .
import React from "react";
import TextField from "@material-ui/core/TextField";
import {
DateRangePicker,
DateRangeDelimiter,
LocalizationProvider
} from "@material-ui/pickers";
import DateFnsUtils from "@material-ui/pickers/adapter/date-fns"; // choose your lib
export default function BasicDateRangePicker() {
const [selectedDate, handleDateChange] = React.useState([null, null]);
return (
<LocalizationProvider dateAdapter={DateFnsUtils}>
<DateRangePicker
startText="Check-in"
endText="Check-out"
value={selectedDate}
onChange={date => handleDateChange(date)}
renderInput={(startProps, endProps) => (
<>
<TextField {...startProps} />
<DateRangeDelimiter> to </DateRangeDelimiter>
<TextField {...endProps} />
</>
)}
/>
</LocalizationProvider>
);
}
J'étais également confronté à une erreur pour Mui DateRangePicker avec typographie, "Le type 'null []' manque les propriétés suivantes du type 'RangeInput': 0, 1"
dernières versions -> "@ material-ui / pickers": "^ 4.0.0-alpha.12", "date-fns": "^ 2.16.1"
Code de travail:
import React from "react";
import TextField from "@material-ui/core/TextField"
import {
DateRangePicker,
DateRangeDelimiter,
LocalizationProvider,
DateRange,
} from "@material-ui/pickers"
import DateFnsUtils from "@material-ui/pickers/adapter/date-fns"
export default function BasicDateRangePicker() {
const [selectedDate, handleDateChange] = React.useState<DateRange<Date | null>>([null, null]);
return (
<LocalizationProvider dateAdapter={DateFnsUtils}>
<DateRangePicker
startText="from"
endText="to"
value={selectedDate}
onChange={(date: any) => handleDateChange(date)}
renderInput={(startProps: any, endProps: any) => (
<>
<TextField {...startProps} />
<DateRangeDelimiter> to </DateRangeDelimiter>
<TextField {...endProps} />
</>
)
}
/>
</LocalizationProvider>
);
}
J'ai réalisé que l'erreur provenait de cela en utilisant TypeScript, ce que je ne suis pas, existe-t-il un moyen simple de le convertir en non TypeScript?
Supprimez simplement
<DateRange>après `` React.useState`.Cela génère une erreur différente "React.createElement: type is invalid - attend une chaîne (pour les composants intégrés) ou une classe / fonction (pour les composants composites) mais obtient: undefined. Vous avez probablement oublié d'exporter votre composant à partir de dans lequel il est défini, ou vous avez peut-être confondu les importations par défaut et nommées "
Cet exemple concerne la v4.
v4.0.0-alpha.7vousv4.0.0-alpha.7? Ou utilisez-vous la v3?J'utilise v4.0.0-alpha.7