LogoSignals.dart
Copy Markdown
rodydavis/signals.dart 999999

Type: SignalEquality

API reference and details for SignalEquality from signals.dart.

SignalEquality#

Kind: class  |  Package: package:preact_signals

Class: SignalEquality#

Defines the equality check algorithm used by signals to determine if a new value actually differs from the current value.

By default, signals use standard Dart operator equality (==). However, you can configure a signal to use different strategies, such as deep equality check for collections or custom comparator checks.

Strategies:

  • standard: Default value equality (a == b).
  • identity: Identity-based comparison (identical(a, b)).
  • deep: Deep collection comparison for Lists, Maps, and Sets.
  • custom: User-defined boolean comparison function.

Example Usage#

import 'package:preact_signals/preact_signals.dart';

void main() {
  // Create a list signal using deep equality check
  final items = signal(
    [1, 2, 3],
    options: SignalOptions(
      equality: SignalEquality.deep(),
    ),
  );

  effect(() {
    print('Items changed: ${items.value}');
  });

  // Reassigning an identical value structure does NOT trigger a rebuild!
  items.value = [1, 2, 3];

  // Triggers rebuild
  items.value = [1, 2, 3, 4];
}

Members of SignalEquality#

Member Type Signature Description
SignalEquality constructor dart SignalEquality() @nodoc
equals method dart bool equals(Object? a, Object? b) Check if two values are equal
standard method dart static SignalEquality standard() Standard equality check (a == b)
identity method dart static SignalEquality identity() Identity equality check (identical(a, b))
deep method dart static SignalEquality deep() Deep equality check
SignalEquality.custom constructor dart SignalEquality.custom(bool Function(T a, T b) fn) Custom equality check

References#

The SignalEquality type is referenced and used in the following pages: