ΠΠ°ΡΠ½ΡΠΌ Ρ ΡΠΎΠ³ΠΎ ΠΊΠ°ΠΊ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊ ΡΠ·Π½Π°ΡΡ ΡΡΠΎ Π΄Π°Π½Π½ΡΠ΅ Π² Π½Π°ΡΠ΅ΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»ΠΈΡΡ ΠΈ Π΅Ρ Π½ΡΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠΎΠ²Π°ΡΡ.
ΠΠΎΠΏΡΡΡΠΈΠΌ, Ρ Π½Π°Ρ Π΅ΡΡΡ ΡΠ»Π°Π²Π½ΡΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ Counter, Π²Ρ Π²ΡΠ΅ Π΅Π³ΠΎ ΡΠΆΠ΅ ΠΊΠΎΠ³Π΄Π°-ΡΠΎ Π²ΠΈΠ΄Π΅Π»ΠΈ:
[-] count [+]. ΠΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π½Π°ΠΆΠ°Π» ΠΊΠ½ΠΎΠΏΠΊΡ [+] ΠΈ ΠΌΡ ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°Π΅ΠΌ Π½Π΅ΠΊΠΈΠΉ count Π½Π° +1. ΠΡΠΎ ΠΏΡΠΎΡΡΠΎ. Π ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊ Π² ΡΡΠΎΡ ΠΌΠΎΠΌΠ΅Π½Ρ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠΎΠ½ΡΡΡ ΡΡΠΎ Π½ΡΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ Ρ Π½ΠΎΠ²ΡΠΌ count. ΠΠ°Π²Π°ΠΉΡΠ΅ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ Π½Π° ΠΏΡΠΈΠΌΠ΅ΡΠ°Ρ
ΠΊΠ°ΠΊ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠΈ ΠΏΠΎΠ½ΠΈΠΌΠ°ΡΡ ΡΡΠΎ ΠΏΡΠΎΠΈΠ·ΠΎΡΠ»ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½ΡΡ
:Dirty check
ΠΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΠΏΡΠΎΡΡΠΎΠΉ ΠΌΠ΅ΡΠΎΠ΄: ΠΌΡ ΡΠΎΡ ΡΠ°Π½ΡΠ΅ΠΌ ΡΠ½ΡΠΏΡΠΎΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ, ΠΈ ΠΏΡΠΈ Π»ΡΠ±ΠΎΠΌ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠΈ Ρ UI (ΠΊΠ°ΠΊ ΠΊΠ»ΠΈΠΊ ΠΏΠΎ ΠΊΠ½ΠΎΠΏΠΊΠ΅) Π²ΡΠ·ΡΠ²Π°Π΅ΠΌ Π²ΡΠ΅ Ρ ΡΠ½Π»Π΅ΡΡ, Π° Π·Π°ΡΠ΅ΠΌ ΠΏΡΠΎΡ ΠΎΠ΄ΠΈΠΌΡΡ ΠΏΠΎ Π²ΡΠ΅ΠΌ ΠΊΠ»ΡΡΠ°ΠΌ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ ΠΈ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»ΡΡ Π»ΠΈ ΡΡΡΠΉΡ ΠΏΠΎ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ ΡΠΎ ΡΠ½ΡΠΏΡΠΎΡΠΎΠΌ. ΠΡΠ»ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»ΡΡ β ΠΏΠ΅ΡΠ΅ΡΠΈΡΠΎΠ²ΡΠ²Π°Π΅ΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ. ΠΠ»Ρ Π½Π°Ρ ΡΡΠΎ ΠΎΠ±ΡΡΠ½ΠΎ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΠΊΠ°ΠΊ ΠΏΡΠΎΡΡΠΎΠΉ
this.count += 1.Π’Π°ΠΊΠΈΠΌ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ ΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Angular ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ (angular Π΅ΡΡ Π±ΡΠ΄Π΅Ρ Π² reactive streams Π½ΠΈΠΆΠ΅)
Reactive atoms / Invalidation API
ΠΠ΅ΠΊΠΎΡΠΎΡΡΠ΅ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠΈ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡ API Π΄Π»Ρ ΡΠΎΡΠ΅ΡΠ½ΠΎΠ³ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ. ΠΠΎΠ³Π΄Π° ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΡΡΠΎΡ API (ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌ ΡΡΡΠΉΡ) β ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ ΡΡΠΎ ΠΏΡΠΎΠΈΠ·ΠΎΡΠ»ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΈ ΠΏΠ»Π°Π½ΠΈΡΡΠ΅Ρ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠΎΠ²ΠΊΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ. Π’.ΠΊ. Javascript β Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ Π³ΠΈΠ±ΠΊΠΈΠΉ ΡΠ·ΡΠΊ, ΡΠ°ΠΊΠΎΠΉ API ΠΌΠΎΠΆΠ΅Ρ ΡΠΊΡΡΠ²Π°ΡΡΡΡ ΠΏΠΎΠ΄ ΡΠ°Π·Π½ΡΠΌ Π²ΠΈΠ΄ΠΎΠΌ:
count(count() + 1) Π² Knockout, setCount(getCount() + 1) Π² React ΠΈ SolidJS.ΠΡΠ΄Π΅Π»ΡΠ½ΠΎ Π½ΡΠΆΠ½ΠΎ ΠΎΠΏΠΈΡΠ°ΡΡ Svelte ΠΈ Vue, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΡΠΎΡ API ΠΏΡΡΡΡΡ ΠΎΡ Π΄Π΅Π²Π΅Π»ΠΎΠΏΠ΅ΡΠΎΠ²:
Svelte ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅Ρ
count += 1 Π² Π²ΡΠ·ΠΎΠ² API (ΠΌΡ ΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ°Ρ
Π΅ΡΡ ΠΏΠΎΡΠΎΠΌ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡΠΈΠΌ)Π° Vue Ρ ΠΈΡ
this.count += 1 Π² Π²Π΅ΡΡΠΈΠΈ 2.x ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π» Object.defineProperty c get/set ΠΏΠ°ΡΠΎΠΉ, Π° Ρ 3-ΠΉ Π²Π΅ΡΡΠΈΠΈ ΠΎΠ½ΠΈ ΠΏΠ΅ΡΠ΅ΡΠ»ΠΈ Π½Π° Proxy Π΄Π»Ρ Π²ΡΠ·ΠΎΠ²Π° ΡΠ²ΠΎΠ΅Π³ΠΎ API "ΠΏΠΎΠ΄ ΠΊΠ°ΠΏΠΎΡΠΎΠΌ".N.B: Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ API ΡΠ΅Π³ΠΈΡΡΡΠΈΡΡΡΡ ΡΠ°ΠΊΠΆΠ΅ ΠΈ ΡΡΠΈΡΡΠ²Π°Π½ΠΈΠ΅ Π΄Π°Π½Π½ΡΡ ΠΈΠ· Π°ΡΠΎΠΌΠΎΠ², ΡΡΠΎΠ±Ρ ΡΠΎΡΠ΅ΡΠ½ΠΎ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡΡ DOM ΡΠΎΠ»ΡΠΊΠΎ Π³Π΄Π΅ ΡΡΠΎΡ ΡΡΡΠΉΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ.
Reactive streams
ΠΡ, ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ, ΠΈΠ½ΠΎΠ³Π΄Π° Ρ ΠΎΡΠΈΠΌ ΡΠΏΡΠ°Π²Π»ΡΡΡ Π½Π΅ Π΄ΠΈΡΠΊΡΠ΅ΡΠ½ΡΠΌΠΈ ΡΡΠ΅Π·Π°ΠΌΠΈ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΉ, Π° ΠΏΠΎΡΠΎΠΊΠΎΠΌ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ. Π’Π°ΠΊ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΌΡ ΡΠΌΠΎΠΆΠ΅ΠΌ ΡΠ·Π½Π°ΡΡ ΠΊΠ°ΠΊ ΡΠ°ΡΡΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΊΠ»ΠΈΠΊΠ°Π΅Ρ
[-] ΠΈ ΡΠΎΠ·Π΄Π°ΡΡ ΠΎΡΠΎΠ±ΡΠΉ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ Π΄Π»Ρ ΠΆΡΡΡΠΊΠΈΡ
ΠΌΠΈΠ½ΡΡΠ°ΡΠΎΡΠΎΠ². ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Ρ
ΠΎΡΠΎΡΠΎ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ΡΡ ΡΠ΅Π°ΠΊΡΠΈΠ²Π½ΡΠ΅ ΠΏΠΎΡΠΎΠΊΠΈ. ΠΠ½ΠΈ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡ API Π½Π°ΠΌ Π΄Π»Ρ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ Π»ΠΎΠ³ΠΈΠΊΠΈ ΠΈ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΡ Π΄Π»Ρ "ΡΠ»Π΅ΠΆΠ΅Π½ΠΈΡ" Π·Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡΠΌΠΈ.clicks$.next(1);count$ = clicks$.scan((acc, curr) => acc + curr, 0);Π’Π°ΠΊΠΎΠΉ ΠΌΠ΅ΡΠΎΠ΄ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ Πngular (Π² OnPush ΡΡΡΠ°ΡΠ΅Π³ΠΈΠΈ) ΠΈ circlejs (Π½Ρ, ΠΈ ΠΌΠΎΠΉ ΡΠΊΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠ°Π»ΡΠ½ΡΠΉ recksjs, ΡΠ°ΠΌ Π²ΠΎΠΎΠ±ΡΠ΅ Π²Π΅Π·Π΄Π΅ ΠΏΠΎΡΠΎΠΊΠΈ).
Π Π΅Π°ΠΊΡΠΈΠ²Π½ΡΠ΅ ΠΏΠΎΡΠΎΠΊΠΈ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ Π»Π΅Π³ΠΊΠΎ ΠΏΡΠΈΠ΄Π΅Π»Π°ΡΡ ΠΊ ΡΠ΅Π°ΠΊΡΠΈΠ²Π½ΡΠΌ Π°ΡΠΎΠΌΠ°ΠΌ / invalidation API, ΡΠ°ΠΊ ΡΡΠΎ ΠΎΠ½ΠΈ ΡΠ°ΡΡΠΎ Π²ΡΡΡΠ΅ΡΠ°ΡΡΡΡ Π² ΠΊΠΎΠ΄ Π±Π°Π·Π°Ρ Ρ Π΄ΡΡΠ³ΠΈΠΌΠΈ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠ°ΠΌΠΈ.
.
ΠΠ°ΠΊ Π²ΠΈΠ΄Π½ΠΎ, ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ°Π·Π½ΡΠ΅, Π½ΠΎ ΡΠ΅Π»Ρ ΠΎΠ΄Π½Π° ΠΈ ΡΠ° ΠΆΠ΅: ΠΏΠ½ΡΡΡ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊ ΡΡΠΎΠ±Ρ ΠΎΠ½ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠΎΠ²Π°Π» ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ.
Π ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΡΠ°Π· ΠΌΡ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡΠΈΠΌ ΠΎ ΡΠΎΠΌ ΠΊΠ°ΠΊ Π² ΡΠ°Π·Π½ΡΡ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠ°Ρ ΠΌΡ Π·Π°Π΄Π°ΡΠΌ ΡΡΠΎΡ ΡΠ°ΠΌΡΠΉ UI, ΠΊΠΎΡΠΎΡΡΠΉ Π½ΡΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠΎΠ²ΡΠ²Π°ΡΡ.
ΠΡΡΠ°Π²Π»ΡΠΉΡΠ΅ ΡΠ²ΠΎΠΈ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°ΠΉΡΠ΅ΡΡ ΠΊ math.random ΠΊΠΎΠΌΠΌΡΡΠ½ΠΈΡΠΈ β ΠΌΡ Π»ΡΠ±ΠΈΠΌ Π³ΠΎΠ²ΠΎΡΠΈΡΡ ΠΎ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΡΡ .
ΠΠΎ Π·Π°Π²ΡΡΠ°!
___
ΠΡΠ»ΠΈ Ρ Π²Π°Ρ ΠΌΠ°Π»ΠΎ Π²ΠΊΠ»Π°Π΄ΠΎΠΊ Π² Π±ΡΠ°ΡΠ·Π΅ΡΠ΅:
A Hands-on Introduction to Fine-Grained Reactivity β https://dev.to/ryansolid/a-hands-on-introduction-to-fine-grained-reactivity-3ndf
Reactivity in Depth β https://v3.vuejs.org/guide/reactivity.htm
Angular Change Detection - How Does It Really Work? β https://blog.angular-university.io/how-does-angular-2-change-detection-really-work/
#thematicweek #frameworksweek