Skip to main content
Solid.js v2

createMemo

createMemo creates a derived signal that automatically updates when its dependencies change.

Basic Usage

import { createSignal, createMemo } from "solid-js";
function Counter() {
const [count, setCount] = createSignal(0);
const doubled = createMemo(() => count() * 2);
return (
<div>
Count: {count()}, Doubled: {doubled()}
</div>
);
}

Lazy evaluation

Starting from solid 2.0 createMemo evaluates lazily (not synchronously as in version ^1.0). It means that if the memo value is not used, the memo function won't be executed:

import { createMemo } from "solid-js";
/** Memo is not used */
function UnusedLazyMemoExample() {
const unusedValue = createMemo(() => {
console.log("This code is not running if the value is not used");
return "Test value";
});
return <div>Memo is not executed</div>;
}

Derived signals vs createMemo

Sometimes it's useful to use createMemo instead of derived signals: if you use derived signal, you subscribe to all signals which are used inside that derived signal. With createMemo you subscribe to memo result only.

import { createSignal, createMemo, createEffect } from "solid-js";
function DerivedSignalVsMemoExample() {
const [number1, setNumber1] = createSignal(0);
const [number2, setNumber2] = createSignal(0);
const derivedSum = () => number1() + number2();
// By default memo compares old and new values with `===`
const memoSum = createMemo(() => number1() + number2());
// this `createEffect` is subscribed to one signal (from `createMemo`)
createEffect(memoSum, (memoSum) => console.log(`Memo sum is logged only once: ${memoSum}`));
// Even the sum of two numbers is always 0
// This createEffect is subscribed to both signals instead of the result sum value
createEffect(derivedSum, (derivedSum) =>
console.log(`Derived sum is logged every time when you update numbers: ${derivedSum}`)
);
return (
<button
onClick={() => {
// Make the sum always the same
setNumber1((number1) => number1 + 1);
setNumber2((number2) => number2 - 1);
}}
>
Increase number1 and decrease number2
</button>
);
}

Last updated: 5/3/25, 4:09 AM

Edit this page on GitHub
Solid.js v2Rough WIP docs for Solid 2.0.