reactjs - Material-UI: Hur får man värdet i Slider?
Jag använder Material-UI Slider och jag vill få värdet med onChange-funktionen.
Min kod ser ut så här:
const SliderScale: React.FC = () => {
const classes = useStyles();
const [inputValue, setInputValue] = useState(0);
const updateRange = (value: number) : void => {
setInputValue(value);
};
return (
<div className={classes.root}>
<Typography id="discrete-slider" gutterBottom>
value
</Typography>
<Slider
defaultValue={0}
value={inputValue}
getAriaValueText={valuetext}
aria-labelledby="discrete-slider"
valueLabelDisplay="on"
step={0.5}
marks={false}
min={0}
max={10}
onChange={updateRange}
/>
</div>
);
};
export default SliderScale;
det här fungerar inte och visar detta fel.
(JSX-attribut) onChange?: ((event: React.ChangeEvent<{}>, value: number | number[]) => void) | undefined Ingen överlagring matchar detta anrop. Överlagring 1 av 2, '(props: { component: ElementType; } & { 'aria-label'?: string | undefined; 'aria-labelledby'?: string | undefined; 'aria-valuetext'?: string | undefined; color?: "primary" | "secondary" | undefined; ... 18 till ...; valueLabelFormat?: string | ... 1 till mer ... | undefined; } & CommonProps<...> & Pick<. ..>): Element', gav följande fel. Typ '(value: number) => void' kan inte tilldelas till typ '(event: ChangeEvent<{}>, value: number | number[]) => void'. Typerna av parametrarna 'value' och 'event' är inkompatibla. Typ 'ChangeEvent<{}>' kan inte tilldelas till typ 'number'. Överlagring 2 av 2, '(props: DefaultComponentProps
>): Element', gav följande fel.
Vet någon hur man får tag på det?
Svar #1
Signaturen för onChange från dokumentationen är:
function(event: object, value: number | number[]) => void
Det nya värdet finns i den andra parametern, inte den första i onChange-callbacken. Ändra din kod till detta:
<Slider {...props} onChange={(_, value) => setInputValue(value)} />
Svar #2
Du behöver ändra updateRange-funktionen till något liknande detta:
const updateRange = (event: React.ChangeEvent<{}>, newValue: number | number[]) => {
setInputValue(newValue as number[]);
}
