3 回答
TA贡献1871条经验 获得超8个赞
演示:https ://codesandbox.io/s/optimistic-khayyam-3g8sv?file=/src/Slider.js
? !isNaN(value) ? value : 'no value'
: value >= 1000
? `$${(value / 1000).toFixed(2)}k`
: `$${value}`
}
TA贡献1801条经验 获得超8个赞
你有这条线
inputs[i].data = parseInt(e.target.value);
– 如果该值不可解析为整数,则您会得到NaN
.
您必须决定在这种情况下该怎么做;一个简单的解决方案是利用 s 为假的事实来替换零NaN
:
inputs[i].data = parseInt(e.target.value) || 0;
TA贡献1828条经验 获得超3个赞
我认为问题出在你的 onChange 函数上!你不加区别地使用 parseInt,如果给定一个非数字值,parseInt 可以返回 NaN!另外,你的 onChange 有点奇怪,当它运行时(在任何输入更改上),它会在每次输入发生更改时检查每个输入。除非您希望它们有某种联系,否则这是不必要的。您可以在 onChange 中为它们提供索引,以便在您的状态中访问它们,然后在 onChange 函数中使用它。就像这样。
const onChange = (event, index) => {
...etc
inputs[index].data = parseInt(e.target.value);
// fix your NaN problem around here
...etc
}
渲染你的组件:
{data.map((item, i) => {
const bgcolor = RangeSliderColors(item.name);
return (
<div
key={i}
style={{
display: "flex",
flexDirection: "column",
marginTop: "100px"
}}
>
<RangeSlider
name={item.name}
value={item.data}
width={20}
min={0}
minValue={10}
step={item.data > item.min ? 1 : item.min}
max={100}
bgcolor={bgcolor}
onChange={() => onChange(i)} // This will let you know which one is changed.
/>
</div>
);
})}
- 3 回答
- 0 关注
- 136 浏览
添加回答
举报