Imperative event-listener helper, the counterpart to
addEvent. removeEvent(node, type, handler) removes
the listener and returns an on() function that re-attaches it (with
no arguments). Reach for it when you need to detach earlier than the
owner's cleanup would — e.g. once a one-shot condition
is met.
| name | type | description |
|---|---|---|
node |
Document | Window | Element |
the node from which to remove the event listener |
type |
string | event to remove, e.g. click. Case-sensitive, as with regular events |
handler |
fn | { handleEvent, once?, passive?, capture?, … } |
reference to the handler that was added with addEvent |
Returns: an on() function that re-attaches the listener.
Records the first mouse x-coordinate, then detaches its own listener so it never runs again.
import { addEvent, removeEvent, render, signal } from 'pota'
function App() {
const firstX = signal('move the mouse')
function onMove(e) {
firstX.write(`first mouse x: ${e.clientX}`)
removeEvent(window, 'mousemove', onMove)
}
addEvent(window, 'mousemove', onMove)
return <p>{firstX.read}</p>
}
render(App)
addEvent returns off(); removeEvent returns on() — the pair
lets you toggle a listener without re-stating the arguments. Click the
box to fire the handler; the buttons attach and detach it.
import {
addEvent,
removeEvent,
ready,
ref,
render,
signal,
} from 'pota'
function App() {
const box = ref()
const status = signal('listener off — use the buttons')
const handler = () => status.write('handler ran')
// addEvent returns off() (removes); removeEvent returns on()
// (re-adds). Captured once the box exists, then reused.
let off, on
ready(() => {
off = addEvent(box(), 'click', handler)
on = removeEvent(box(), 'click', handler)
})
return (
<div>
<div
use:ref={box}
style={{ padding: '1em', border: '1px solid #aaa' }}
>
click me
</div>
<button
on:click={() => {
off()
status.write('listener off')
}}
>
off()
</button>
<button
on:click={() => {
on()
status.write('listener on — click the box')
}}
>
on()
</button>
<p>{status.read}</p>
</div>
)
}
render(App)