computed

Derive a read-only value by tracking the refs read during a computation.

computedComputed and Effects

Derive a read-only value by tracking the refs read during a computation.

Overview

The computed function allows you to create a computed property that depends on reactive data and automatically updates when its dependencies change. Computed properties are useful for performing complex calculations or transformations on reactive data.

Try It Online

Try it live

Three ways to derive a valueLive API
100computed · seats × price
8computeRef · seats × 2
29computeMany · seats + price

Three read-only values, three ways to specify their dependencies.

import { computed, computeMany, computeRef, html, ref } from 'regor'

export function createDerived(interactive = false) {
  const seats = ref(4)
  const price = ref(25)
  return {
    interactive,
    seats,
    price,
    total: computed(() => seats() * price()),
    double: computeRef(seats, (value) => value * 2),
    combined: computeMany([seats, price], (count, cost) => count + cost),
  }
}

export const derivedTemplate = html` <div class="guide-demo">
  <div class="guide-filter">
    <label
      >Seats · {{ seats }}<input
        type="range"
        min="1"
        max="12"
        r-model.number="seats"
        :value="seats"
        :disabled="!interactive" /></label
    ><label
      >Price · {{ price }}<input
        type="range"
        min="10"
        max="50"
        step="5"
        r-model.number="price"
        :value="price"
        :disabled="!interactive"
    /></label>
  </div>
  <div class="guide-metrics">
    <div>
      <output class="api-derived-total">{{ total }}</output
      ><span>computed · seats × price</span>
    </div>
    <div><output>{{ double }}</output><span>computeRef · seats × 2</span></div>
    <div>
      <output>{{ combined }}</output><span>computeMany · seats + price</span>
    </div>
  </div>
  <p class="guide-hint">
    Three read-only values, three ways to specify their dependencies.
  </p>
</div>`
import { createApp, RegorConfig, useScope } from 'regor'
import { apiExamples } from './examples'

const element = document.getElementById('api-demo')
const name = element?.dataset.example
if (element && name && Object.hasOwn(apiExamples, name)) {
  const example = apiExamples[name as keyof typeof apiExamples]
  const scope = useScope<object>(() => example.create(true))
  const config =
    'config' in scope.context && scope.context.config instanceof RegorConfig
      ? scope.context.config
      : undefined
  createApp(scope, { element, template: example.template }, config)
}

Move either slider. The three read-only outputs use computed, computeRef, and computeMany.

Usage

Creating Computed Properties

To create a computed property using computed, you provide a function (compute) that calculates the computed value based on reactive data. The computed property will automatically update whenever the reactive data it depends on changes.

import { computed, ref } from 'regor'

const myRef = ref(5)

// Create a computed property
const computedValue = computed(() => myRef.value * 2)

console.log(computedValue.value) // Outputs 10

// Later, when myRef changes, computedValue will automatically update
myRef.value = 7
console.log(computedValue.value) // Outputs 14

Parameters

  • compute: A function that calculates the computed value based on reactive data. This function should not have any side effects and should only depend on reactive data.

Return Value

  • The computed function returns a computed ref object that holds the calculated value. You can access the computed value using the .value property of the computed ref or by invoking it directly.

Example

import { computed, ref } from 'regor'

const myRef = ref(5)

// Create a computed property
const computedValue = computed(() => myRef.value * 2)

console.log(computedValue.value) // Outputs 10

// Later, when myRef changes, computedValue will automatically update
myRef.value = 7
console.log(computedValue.value) // Outputs 14
Derivations should stay pure

Read source state and return a result. Put side effects in watchEffect or explicit observers.

See Also

Related APIs and guides Continue with the references connected to computed.

Back to the API list