const App = () => {
const [apiTimeout, setApiTimeout] = useState(0); // <-- Stores timeout reference
const apiCall = (color) => {
// Your api call
}
return (
<input
type="color"
onChange={e => {
// In case timeout was already set, clear it
clearTimeout(apiTimeout);
// Set the next timeout
setApiTimeout(
setTimeout(() => {
apiCall(e.target.value);
}, 300) // <-- Delay api call by 300 milliseconds. Set to what you prefer
);
}}
/>
)
}
2条答案
按热度按时间agxfikkp1#
您可以使用
onMouseUp
:关于颜色更改(e)}/〉
https://developer.mozilla.org/en-US/docs/Web/API/Element/mouseup_event
好吧,就我所知,你的问题是每次你用颜色选择器在弹出模式中调整颜色时都会触发这个事件。根据docs,你只能使用
onChange
和onInput
事件,而且这两个事件都会在每次颜色变化后触发。不幸的是,似乎没有办法绕过这个问题。pxy2qtax2#
我迟到了,但是我通过在api调用中使用timeout来解决这个问题,基本上,在
onChange
中,你将api调用超时几毫秒,并取消之前的超时,这样,只有当用户在当前超时之前没有改变颜色时,你的api才会被调用。现在用户可以在颜色选择器上滑动,而无需运行大量的api调用。
示例: