Каждый раз, когда вызывается пользовательский хук (для каждого рендера), создается новый компонент Slider (Broken
). Поскольку новый компонент создан, обработчики событий также воссоздаются, и перетаскивание отменяется. Вы можете решить эту проблему двумя способами:
Заверните компонент в useCallback()
и передайте value
при рендеринге компонента ( песочница ):
const Broken = useCallback(({ value }) => (
<Slider value={value} onChange={changeHandler} />
), [changeHandler]);
// usage
<Broken value={broken} />
Визуализация компонента в хуке и использование включения его в компонент ( песочница ):
function useComp() {
const [broken, setBroken] = React.useState(30);
const changeHandler = useCallback((_, v) => setBroken(v), []);
const slider = <Slider value={broken} onChange={changeHandler} />;
return { slider, broken };
}
// usage
<div>
Broken: {broken}
{slider}
OK: {ok}
<Slider value={ok} onChange={(_, v) => setOk(v)} />
</div>