Интерфейс Material: как получить значения ползунков с помощью события onClick кнопки?

#reactjs #material-ui #slider

#reactjs #материал-пользовательский интерфейс #ползунок

Вопрос:

У меня есть форма, состоящая из нескольких ползунков с кнопкой отправки в конце.

В среде, не связанной с реакцией, у меня обычно была бы функция, вызываемая для свойства кнопки onClick , где она перебирала бы все ползунки и переходила document.getElementById('mySliderIdX').value .

Но с Material UI в React я не могу получить доступ к значениям слайдера таким образом. Если я попытаюсь это сделать, я получу элемент span без value свойства.

Как мне получить значение всех моих ползунков с помощью кнопки?

Мой код здесь:

 let getSliderValues = function (arrOfIDs) {
  let ratings = {}
  arrOfIDs.forEach(name_id => {    
    let slider = document.getElementsByName(name_id);
    ratings[name_id] = slider.value // this is undefined
  });
  console.log("slider values: ",ratings)
}

class MySliders extends Component(){
this.sliders = ["a","b","c"]

render(){
  return(
    <div>
      <Slider id={this.sliders[0]} />
      <Slider id={this.sliders[1]} />
      <Slider id={this.sliders[2]} />
      <button onClick={e=>this.getValues(this.sliders)}>submit</button>
    </div>
  )
}
}

 

Ответ №1:

Вы должны использовать свойство value компонента. Что-то вроде этого:

 import React, { useState } from 'react';
import Button from '@material-ui/core/Button';
import Slider from '@material-ui/core/Slider';


export default function DiscreteSlider() {
  const [ratings, setRatings] = useState([0, 0, 0]);
  let getSliderValues = function () {
    console.log("slider values: ", ratings)
  }
  const getSliders = () => {
      const sliders = [];
      ratings.forEach((rating, index) => {
        sliders.push(<Slider
          key={index}
          value={ratings[index]}
          onChange={(event, newValue) => {
            ratings[index] = newValue;
            const newRatings = [...ratings];
            setRatings(newRatings);
          }}
        />)
      });
      return sliders;
  }

  return (
    <div>
      {getSliders()}
      <Button onClick={e=>getSliderValues()}>submit</Button>
    </div>
  );
}