最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - Material UI Slider component, update state on mouse release, while sliding in real time - Stack Overflow

programmeradmin1浏览0评论

I'm trying to find a way how to update the new state only on mouse release for a Material UI slider. While maintaining the ability to slide over the track and see the change in real-time.

Material UI provides 2 events: onChange and onChangeCommitted. The second provides the end result that I need, but the sliding trough the track is not visible in real-time, only at mouse release you see at what value you stopped. Here is my ponent:

export default function RangeSlider() {
  const classes = useStyles();
  const [range, setRange] = React.useState([0, 37]);

  const handleRange = (event, newValue) => {
    setRange(newValue);
  };

  return (
    <div className={classes.root}>
      <Typography id="range-slider" gutterBottom>
        Temperature range (onChangeCommitted event)
      </Typography>
      <Slider
        value={range}
        min={0}
        max={50}
        onChangeCommitted={handleRange}
        valueLabelDisplay="auto"
        getAriaValueText={valuetext}
      />
    </div>
  );
}

I want to find a way to have the ability to slide in real-time, and the state to be updated on mouse release. Is there an easy way to do this?

Please also check out this Sandbox, where I show you the 2 examples:

  1. First is the sliding experience I need
  2. Second is the way to update state

I'm trying to find a way how to update the new state only on mouse release for a Material UI slider. While maintaining the ability to slide over the track and see the change in real-time.

Material UI provides 2 events: onChange and onChangeCommitted. The second provides the end result that I need, but the sliding trough the track is not visible in real-time, only at mouse release you see at what value you stopped. Here is my ponent:

export default function RangeSlider() {
  const classes = useStyles();
  const [range, setRange] = React.useState([0, 37]);

  const handleRange = (event, newValue) => {
    setRange(newValue);
  };

  return (
    <div className={classes.root}>
      <Typography id="range-slider" gutterBottom>
        Temperature range (onChangeCommitted event)
      </Typography>
      <Slider
        value={range}
        min={0}
        max={50}
        onChangeCommitted={handleRange}
        valueLabelDisplay="auto"
        getAriaValueText={valuetext}
      />
    </div>
  );
}

I want to find a way to have the ability to slide in real-time, and the state to be updated on mouse release. Is there an easy way to do this?

Please also check out this Sandbox, where I show you the 2 examples:

  1. First is the sliding experience I need
  2. Second is the way to update state
Share Improve this question asked Sep 30, 2020 at 16:57 Valerxx22Valerxx22 8141 gold badge14 silver badges35 bronze badges 1
  • I don't understand, the first one works fine. What are you asking? Are you trying to fire a callback from a parent ponent when onChangeCommitted occurs? It's not clear. – Adam Jenkins Commented Sep 30, 2020 at 18:30
Add a ment  | 

3 Answers 3

Reset to default 4

You have to bine your examples:

   <Slider
    value={value}
    min={0}
    max={50}
    onChange={handleChange}
    onChangeCommitted={handleRange}
    valueLabelDisplay="auto"
    getAriaValueText={valuetext}
  />

Why not just make a second state for mitted change?

See sandbox

Edit: Code below.

Add state for range mit:

const [value2, setValue2] = React.useState([0, 37]);

On range mit handler (note: I am setting to the current state, unrelated to the mouse event this function gives me):

const setVal2 = () => setValue2(value);

Add range mit handler prop in addition to onChange:

   onChange={handleChange}
   onChangeCommitted={setVal2}

Display mited state:

    <Typography id="range-slider" gutterBottom>
        Temperature range (onChange event) - {value2[0]}:{value2[1]}
    </Typography>

Use onUpdate!

onChange() triggers mouse release onUpdate() triggers every change even when dragging...

与本文相关的文章

发布评论

评论列表(0)

  1. 暂无评论