Imperatively toggle a single class on an element: a truthy value
adds the class, a falsy one removes it. The value may be a reactive
accessor, in which case the class follows it. The declarative form is
class:myClass={…}. To add or remove many classes at once see
setClassList.
JSX's class:myClass= already flows through setClass. Use the
function when building nodes imperatively, in a ref-driven
effect, or driving a class from outside JSX.
| name | type | description |
|---|---|---|
node |
Element |
Target element. |
name |
string |
Class name to toggle. |
value |
boolean | () => boolean |
Truthy adds the class, falsy removes it; functions are tracked reactively. |
Returns: void
Passes the signal reader so the selected class follows the signal
automatically as the card is clicked.
import { ref, render, setClass, signal } from 'pota'
function App() {
const card = ref()
const selected = signal(false)
return (
<div>
<div
use:ref={card}
class="card"
on:click={() => selected.update(s => !s)}
>
click me
</div>
{() => setClass(card(), 'selected', selected.read())}
</div>
)
}
render(App)
Toggles a class per element from inside the use:connected lifecycle
callback, deriving each link's active state from the current
location.
import { render, setClass } from 'pota'
import { location } from 'pota/use/location'
import { A } from 'pota/components'
import { css } from 'pota/use/css'
function App() {
return (
<ul
use:connected={menu => {
for (const link of menu.querySelectorAll('a')) {
setClass(
link.parentElement,
'selected',
() => location.href() === link.href,
)
}
}}
>
{css`
.selected a {
color: aqua;
}
`}
<li>
<A href="#one">one</A>
</li>
<li>
<A href="#two">two</A>
</li>
<li>
<A href="#three">three</A>
</li>
</ul>
)
}
render(App)