Skip to content

Commit

Permalink
Adding hooks API for matching SolidJS style
Browse files Browse the repository at this point in the history
  • Loading branch information
rodydavis committed Feb 20, 2025
1 parent b2dc280 commit def666f
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 1 deletion.
14 changes: 13 additions & 1 deletion packages/signals_core/lib/src/extensions/signal.dart
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import '../core/signals.dart';

final Map<int, Stream<dynamic>> _streamCache = {};

/// Signal extensions
/// Readonly signal extensions
extension ReadonlySignalUtils<T> on ReadonlySignal<T> {
/// Convert a signal to a [Stream] to be consumed as
/// a read only stream.
Expand Down Expand Up @@ -49,3 +49,15 @@ extension ReadonlySignalUtils<T> on ReadonlySignal<T> {
);
}
}

/// Writeable signal extensions
extension WriteableSignalUtils<T> on Signal<T> {
/// Easy destructure to get and set the value
///
/// ```dart
/// final counter = signal(0);
/// ...
/// final (getCount, setCount) = counter.hooks;
/// ```
(T Function(), void Function(T)) get hooks => (get, set);
}
11 changes: 11 additions & 0 deletions packages/signals_core/test/extensions/signal_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -10,5 +10,16 @@ void main() {

expect(a.value.keys, b.value);
});

test('hooks', () {
final counter = signal(0);
final (getCount, setCount) = counter.hooks;

expect(getCount(), 0);

setCount(1);

expect(getCount(), 1);
});
});
}

0 comments on commit def666f

Please sign in to comment.