Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
NgRx Signal Store
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Rainer Hahnekamp
February 29, 2024
170
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
NgRx Signal Store
Rainer Hahnekamp
February 29, 2024
More Decks by Rainer Hahnekamp
See All by Rainer Hahnekamp
Angular Architecture Revisited Modernizing Angular Architectural Patterns
rainerhahnekamp
0
270
NgRx SignalStore: The Power of Extensibility
rainerhahnekamp
0
400
Vitest Highlights in Angular
rainerhahnekamp
0
440
From Hours to Minutes - An AI Case Study with Sheriff
rainerhahnekamp
0
65
RxJS, Signals, and Native Observables: Answering the Critical Questions
rainerhahnekamp
0
54
Zurück in den Browser – Das Comeback der Frontend-Tests
rainerhahnekamp
0
140
From Hours to Minutes: An AI Case Study with Sheriff
rainerhahnekamp
0
250
RxJS, Signals & Native Observables
rainerhahnekamp
0
220
The Road to Angular Today Milestones, Mistakes & Momentum
rainerhahnekamp
0
210
Featured
See All Featured
Testing 201, or: Great Expectations
jmmastey
46
8.3k
Abbi's Birthday
coloredviolet
3
9.8k
Music & Morning Musume
bryan
47
7.4k
Are puppies a ranking factor?
jonoalderson
2
3.9k
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
1
260
How Software Deployment tools have changed in the past 20 years
geshan
1
34k
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
360
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
1
310
Visual Storytelling: How to be a Superhuman Communicator
reverentgeek
2
650
Making Projects Easy
brettharned
120
6.7k
Git: the NoSQL Database
bkeepers
PRO
432
67k
4 Signs Your Business is Dying
shpigford
187
23k
Transcript
RainerHahnekamp Game Changer: NgRx Signal Store Rainer Hahnekamp - 29.
February 2024 - ngOslo
RainerHahnekamp About Me... Professional NgRx https://www.youtube.com/ @RainerHahnekamp https://www.ng-news.com https://github.com/softarc-consulting/sheriff •
Rainer Hahnekamp ANGULARarchitects.io • Developer / Trainer / Speaker Modern Spring for Angular @RainerHahnekamp
RainerHahnekamp signalStore withState withMethods withComputed Signal withHooks Slices aka. DeepSignal
patchState rxMethod
RainerHahnekamp In a Nutshell • Light-weight state management on top
of Signals • Logic and State in one Place
RainerHahnekamp withState({someState}) • Contains the State internally as a Signal
• Exposes Signal Slices • Allows easy updates via patchState
RainerHahnekamp signalStore & withState({someState}) export const QuizStore = signalStore( withState({
title: '', questions: [] as Question[], timeInSeconds: 180 }) )
RainerHahnekamp withMethods(() => {methods}) • Adds public methods to the
Store • Binds Data (State) and Logic (Methods) together • Provides Access to DI
RainerHahnekamp withMethods(() => {methods}) withMethods((store) => { const quizService =
inject(QuizService); return { answer(questionId: number, choiceId: number) { const question = store .questions() .find((question) => question.id === questionId); assertDefined(question); patchState(store, (quiz) => ({ // ... })); } })
RainerHahnekamp withComputed(() => {computeds}) • Adds derived Signals • Collection
of multiple computed() in one place
RainerHahnekamp withComputed(() => {computeds}) withComputed((state) => { return { status:
computed(() => { const status: Record<AnswerStatus, number> = { unanswered: 0, correct: 0, incorrect: 0, }; for (const question of state.questions()) { status[question.status]++; } return status; }), }; })
RainerHahnekamp rxMethod: Integrating RxJs withMethods((store) => { const quizService =
inject(QuizService); return { setId: rxMethod<number>( pipe( switchMap((id) => quizService.findById(id)), tap((quiz) => patchState(store, quiz)), ), ), }))
RainerHahnekamp Architectural Consequences • State Management becomes ◦ Less boilerplate
◦ Extends Signal • More Local than Global State Management • Data Module Type contains only API Services ◦ fetch/HttpClient-based Services ◦ OpenAPI
RainerHahnekamp Summary • Embraces (builds upon) Angular's Signal ◦ Reactivity
◦ Computed ◦ Immutability • Extends the Signal ◦ patchState ◦ Slices • Adds support for asynchronous + Signals • Optionally integrates RxJs • Brings Logic and Data in a structured way together • Highly Extensible • Provides Local and Global State
RainerHahnekamp Introducing NgRx Toolkit @angular-architects/ngrx-toolkit Redux DevTools Encapsulation Entities Extensions
with API @ ngrx/data
RainerHahnekamp Further Reading and Watching https://youtu.be/TLq0OcSshYI https://youtu.be/V-D2sk_azcs
RainerHahnekamp Further Reading and Watching • https://ngrx.io/guide/signals • https://medium.com/ngconf/ngrx-signal-store-the-missing-piece-to-signal s-ac125d804026
• https://www.angulararchitects.io/en/blog/the-new-ngrx-signal-store-for-a ngular-2-1-flavors • https://www.youtube.com/watch?v=yaOLbKwVRtc