【问题标题】:React - Dynamic SliderReact - 动态滑块
【发布时间】:2019-02-05 19:11:09
【问题描述】:

我正在尝试动态使用 react-rangeslider。根据数组的大小,应该渲染许多滑块。问题是,我无法让他们引用不同的值。现在,滑块都引用相同的值,因此都更新相同。我希望每个 Slider 都能独立行动。

我在尝试解决此问题时遇到的问题是,由于在 for 循环中创建了 Slider,因此索引 (i) 已到达末尾(组件被渲染 arr.length 次),因此我不能将其用作一种索引值数组的方法,其中每个索引都与每个滑块相关联。

//value is set as a state i.e. value: 5    

for(var i = 0; i < arr.length; i++){
    <Slider
     min={0}
     max={10}
     value={value}
     orientation="horizontal"
    onChange={this.handleOnChange}
  />
}

  handleChange = value => {
   this.setState({
    value: value
  })
 };

【问题讨论】:

    标签: reactjs rangeslider


    【解决方案1】:

    您可以在滑块中设置id={i},然后在handleOnChange函数中访问它。

    这样的事情应该可以工作:

    将每个滑块值存储在状态中的数组中。在滑块值更改事件中,使用从该滑块传递的索引更新状态。

    this.state = {
        sliderValues: []
    }
    
    handleOnChange = (id, value) => {
      let sliderValues = [...this.state.sliderValues];
    
        let sliderValue = {
        ...sliderValues[id],
        value: value
        }
    
        sliderValues[id] = sliderValue;
        this.setState({sliderValues});
     }
    
    for(var i = 0; i < arr.length; i++)   {
        <Slider
         min={0}
         max={10}
         value={this.state.sliderValues[i]}
         orientation="horizontal"
         onChange={(e) => this.handleOnChange(i, e.target.value)}/>
     }
    

    【讨论】:

    • H 我如何知道哪个滑块有哪个 id?在 handleOnChange 中,我将如何根据 id 独立更新 Slider?
    • 我已经更新了答案,希望你现在清楚了。
    • 感谢您的澄清。我也收到一个错误无法读取未定义的属性“id”。不确定如何在句柄函数中读取 id。有什么想法吗?
    • 您是否看到滑块的 HTML 中包含“id”?
    • 不,我在检查的元素中看不到它。有什么想法吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-04
    • 1970-01-01
    • 2021-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多