Reactivity

Element's reactivity system is based on signals, computed values, and effects. This creates a fine-grained reactive system that updates only what's necessary.

Signals

Signals are the basic building blocks of reactivity. They store values and notify dependents when changed.

const [count, setCount] = createSignal(0);
const [name, setName] = createSignal("John Doe");
const [fruits, setFruits] = createSignal(["Apple", "Banana", "Cherry"]);

Signal Usage

// Reading a signal
console.log(count()); // 0

// Setting a signal
setCount(42);
console.log(count()); // 42

// Signals use `Object.is()` for change detection
setCount(42); // Same value === No update

Computed Values

Computed values derive from other signals and automatically update when dependencies change.

const [firstName, setFirstName] = createSignal("John");
const [lastName, setLastName] = createSignal("Doe");

const fullName = createComputed(() => {
  return `${firstName()} ${lastName()}`;
});

console.log(fullName()); // "John Doe"
setFirstName("Jane");
console.log(fullName()); // "Jane Doe"

Effects

Effects run side effects and can clean up after themselves.

const [count, setCount] = createSignal(0);

createEffect(() => {
  const value = count();
  console.log("Count is:", value);

  // Optional cleanup function
  return () => {
    console.log("Count was:", value);
  };
});

Last updated