createEffect

Creates a reactive effect that automatically re-executes when its dependencies change.

Signature

function createEffect(fn: Subscriber): Dispose;

Parameters

  • fn: Subscriber - A function to execute. Can optionally return a cleanup function.

Returns

  • Dispose - A function to manually detach the effect from its dependencies

Type Definition

type Subscriber = () => void;
type Cleanup = () => void;
type Dispose = () => void;

Example

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

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

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

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

// Effect with dispose
const disposeEffect = createEffect(() => {
  const value = count();

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

setCount(21); // Logs: Count was 0, Count is 21
disposeEffect(); // Log: Count is 21
setCount(42); // Nothing...

Advanced Usage

Idioms and Patterns: Reactive Patterns

Effect with conditional dependencies:

Effect for DOM manipulation:

Effect with timer:

Behavior

  • Automatically tracks all signals accessed within the effect function

  • Re-executes whenever any tracked signal changes

  • Cleanup functions are called before the effect re-runs or when the effect is disposed

  • Effects run immediately when created

  • Side effects like DOM manipulation, API calls, or logging should be done in effects

Best Practices

  • Use effects for side effects, not for computing values (use createComputed instead)

  • Always clean up resources like intervals, subscriptions, or event listeners

  • Keep effects focused on a single responsibility

  • Avoid infinite loops by not updating signals that the effect depends on

Last updated