【发布时间】:2019-09-23 08:20:31
【问题描述】:
我正在尝试基于本机输入/范围元素构建自定义滑块。汇总代码如下所示:
const Slider = ({ className, backgroundColor, ...inputAttributes }) => {
const [value, setValue] = useState(5);
const handleSliderChange = event => {
setValue(event.currentTarget.value);
};
const SliderElement = () => (
<input value={value} onChange={handleSliderChange} {...inputAttributes} />
);
// ...
return (
<>
<SliderElement />
<p>
<Display>{value}</Display>
</p>
</>
);
};
它是这样称呼的:
<Slider type="range" min={1} max={10} step={1} />
完整运行代码:https://codesandbox.io/s/000qm47pjw
带有嵌套的 SliderElement 组件
使用上面的代码,我一次只能移动一个滑块(我必须“取消单击”滑块并再次单击它以进行下一步)。我怀疑这是因为每次移动滑块时都会重新渲染SliderElement。
不过……
如果我完全跳过 SliderElement 并将 <input... 直接放入返回的 JSX 中,它可以完美运行。
完整运行代码:https://codesandbox.io/s/5469y582yn
没有嵌套的 SliderElement 组件
为什么SliderElement 每次我使用它时都会重新渲染(假设是这种情况)?
我怎样才能将<input... 包裹在嵌套组件中,并且仍然能够提供黄油般流畅的体验?
【问题讨论】:
标签: javascript reactjs nested custom-component rerender