html - React Js 数学问题

标签 html css twitter-bootstrap reactjs jsx

我对 React js 有疑问,我似乎无法让它工作。

我正在将一个高达 3000 的值转换为一个百分比,这样它将以正确的数量填充 Bootstrap 百分比条,但我一直从中获取随机值。

例如,如果我输入 480 到框中,我得到 0.13 的输出百分比,但是如果我输入 480.00,我得到 16%这是正确的。

显然,如果他们没有指定某些内容,我必须通过自动添加 .00 来使其成为人类证明,但我无法自动添加它。

onChange = (e) => {
    console.log(e.target.value)
    this.setState({ sliderValue: e.target.value });
    this.updateSlideValue();
}
updateSlideValue(){
    console.log(this.state.sliderValue);
    this.setState({slideValue: this.state.sliderValue / 3000 * 100});
    console.log("gets to update Slide Value");
    console.log(this.state.slideValue);
}

然后这是我的 html/jsx 调用它

<div>
    <div class="col-md-12">
        <div class="col-md-9">
            <div class="progress">
                <div class="progress-bar progress-bar-info" style={SlideValue}></div>
            </div>
        </div>
        <div class="col-md-3">
            <input style={rangeSliderClass} className="range-slider__value form-control" onChange={this.onChange.bind(this)} type="number" value={this.state.sliderValue}></input>
        </div>
    </div>
  </div>

最佳答案

这是 React 的一个常见错误。实际上 setState 是异步的。这意味着,当您调用它时,您无法保证它会在下一条指令中更新。

// imagine this.state.value === 0
this.setState({ value: 1 })
// this.state.value => still 0

要确保值已更新,您可以向 setState 提供第二个参数,这是一个在状态更新时将调用的回调

// imagine this.state.value === 0
this.setState({ value: 1 }, () => {
  this.state.value // => 1
})
// this.state.value => still 0

现在,在您的情况下,我认为您不需要使用回调方法。我认为您可以直接在 render 方法中计算百分比,因为这只是显示原始数据的一种方式。

如果我是你,我会这样做:

onChange(e) {
    this.setState({ sliderValue: e.target.value });
}

render(props) {
  var slideValue = this.state.sliderValue / 3000 * 100;

  return (<div>
    ... 
    <div style={{ width: slideValue + "%" }}></div>
    ...
   </div>)
}

render 方法只在状态更新时被调用,所以你确定你在这里得到了最后的状态:)

关于html - React Js 数学问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44700678/

相关文章:

python - django-debug-toolbar 出现,但为空(面板未填充)

html - 如何制作一个灰色的 HTML 表单?

html - 选择正确的 Html 5 框架 - HTML5 Boilerplate、Skeleton、Twitter Bootstrap 和 HTML KickStart

javascript - 处理 Bootstrap 关闭模态

javascript - 在窗体上的按钮上引发点击事件

javascript - 不扩展父级的绝对定位

asp.net - 如何在 Umbraco 4 中使用自定义字体

jquery - Selectize.js 和 Datatables 水平滚动

javascript - 如何以格式排列选项卡的颜色

css - Popover 内容出现在不同的位置