💼 This rule is enabled in the 🔍 browser
config.
🔧 This rule is automatically fixable by the --fix
CLI option.
This rule disallows setting passive: true
for events on which it will have no effect.
Events where passive: true
has an effect are: touchstart
, touchmove
, touchenter
, touchend
, touchleave
, wheel
, and mousewheel
.
Adding passive: true
informs the browser that this event will not be calling preventDefault
and as such is safe to asynchronously dispatch, freeing up the main thread for lag-free operation. However many events are not cancel-able and as such setting passive: true
will have no effect on the browser.
It is safe to leave the option set, but this may have a negative effect on code authors, as they might believe setting passive: true
has a positive effect on their operations, leading to a false-confidence in code with passive: true
. As such, removing the option where it has no effect demonstrates to the code author that this code will need to avoid expensive operations as this might have a detrimental affect on UI performance.
👎 Examples of incorrect code for this rule:
// bad (passive has no effect here)
window.addEventListener(
'scroll',
() => {
console.log('Scroll event fired!')
},
{passive: true},
)
👍 Examples of correct code for this rule:
// good
window.addEventListener('scroll', () => {
console.log('Scroll event fired!')
})
4.3.2