I would like to have the initial state for a date TextField be set to undefined until the user has selected a date, and then allow the user to easily reset the date back to undefined.
In the following code, the Reset button will properly reset parameters.count state to 0, but it will not reset parameters.date to undefined. Is undefined treated specially in this case?
import React, { useState } from "react";
import { Button, TextField } from "@material-ui/core";
import "./App.css";
export type Parameters = {
count: number;
date?: string;
};
const initialParameters: Parameters = {
count: 0,
date: undefined,
};
export const App: React.FC = () => {
const [parameters, setParameters] = useState<Parameters>(initialParameters);
const handleCountChange = (event: React.ChangeEvent<HTMLInputElement>) => {
setParameters({
...parameters,
count: Number(event.target.value),
});
};
const handleDateChange = (event: React.ChangeEvent<HTMLInputElement>) => {
setParameters({
...parameters,
date: event.target.value,
});
};
const resetState = () => {
setParameters(initialParameters);
};
return (
<div className="App">
<TextField
type="number"
label="Count"
value={parameters.count}
onChange={handleCountChange}
/>
<TextField
label="Date"
type="date"
value={parameters.date}
onChange={handleDateChange}
InputLabelProps={{
shrink: true,
}}
/>
<Button onClick={resetState}>Reset</Button>
</div>
);
};
The solution based on @cbr's comment is to coerce
undefinedto""before passing toTextField.