我想使用滑块更新元素的字体大小。滑动滑块时,值会更改,并且可以使用e.target.value
成功地将其存储到状态中。
但是问题是字体大小没有按我预期的那样更新。我不知道为什么吗?
这是我的React组件代码:
import React, { useState } from 'react';
function App() {
const [slider, setSlider] = useState(20);
const handleChange = (e) => {
setSlider( e.target.value );
console.log(slider);
}
return (
<div className="container">
<label style={ { fontSize: slider } }>Example range</label>
<input
type="range"
className="custom-range"
id="customRange1"
min="10"
max="30"
defaultValue={slider}
onChange={handleChange}
/>
</div>
);
}
export default App;
答案 0 :(得分:6)
如果将defaultValue
替换为value
道具,并按如下所示更新<label>
元素style
,则组件将按预期工作:
function App() {
const [slider, setSlider] = useState(20);
const handleChange = (e) => {
setSlider( e.target.value );
console.log(slider);
}
return (<div className="container">
{/* Format valid value for fontSize property */ }
<label style={{ fontSize: `${slider}px` }}>Example range</label>
{/* Supply slider state via value prop rather than defaultValue */ }
<input
type="range"
className="custom-range"
id="customRange1"
min="10"
max="30"
value={slider}
onChange={handleChange}
/>
</div>
);
}
请参阅this link for relevant documentation,其中讨论了指定了value
属性(称为“受控组件”)的表单/输入元素
答案 1 :(得分:5)
您想念这里的单位
<label style={ { fontSize: `${slider}px` } }>Example range</label>
{{3}}
答案 2 :(得分:1)
const [slider, setSlider] = useState(20);
在这里,您要为滑块分配 Number ,然后使用 string (console.log(typeof e.target.value))
更新它,即您正在更改某种数据类型,这不是一个好习惯编码。因为它可能会影响您的代码,所以如果您在多个地方依赖它(滑块),则程序可能会中断,并且您永远不会发现此类错误,请遵循良好的编码习惯。
尝试使用setSlider(Number(e.target.value));
代替setSlider(e.target.value);
答案 3 :(得分:0)
示例范围 如果您提到不带单位,它将采用默认的字体大小。在您的情况下,字体大小在滑块中更新,但由于缺少单位而无法使用。