Creates a cached derived value. It recomputes only when a signal it reads changes, and other effects read it like a signal.
import { createMemo } from '@barefootjs/client'
const getter = createMemo<T>(fn: () => T): Memo<T>const [todos, setTodos] = createSignal<Todo[]>([])
const [filter, setFilter] = createSignal<'all' | 'active' | 'done'>('all')
const filteredTodos = createMemo(() => {
const list = todos()
switch (filter()) {
case 'active': return list.filter(t => !t.done)
case 'done': return list.filter(t => t.done)
default: return list
}
})
createEffect(() => console.log(filteredTodos().length))Use a memo when a derived value is read in several places or costs something to compute. A one-off expression can stay inline: <p>{count() * 2}</p>.
#Memo vs effect
createMemo |
createEffect |
|
|---|---|---|
| Returns a value | Yes (getter) | No |
| Triggers other effects | Yes (acts as a signal) | No |
| Used for | Derived data | Side effects (DOM, fetch, logging) |