π Π‘Π°ΠΌΡΠΉ Β«ΡΠΊΠΎΠ»ΡΠ·ΠΊΠΈΠΉΒ» ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ Π² Redux β useSelector
Redux Π²ΡΠΎΠ΄Π΅ ΠΊΠ°ΠΊ ΠΈΠ·ΡΡΠΈΠ»ΠΈ Π²Π΄ΠΎΠ»Ρ ΠΈ ΠΏΠΎΠΏΠ΅ΡΠ΅ΠΊ, Π½ΠΎ ΠΎΡ ΡΡΠΎΠ³ΠΎ ΠΎΠ½ Π½Π΅ ΡΡΠ°Π» ΠΈΠ΄Π΅Π°Π»ΡΠ½ΡΠΌ. Π Π΄Π°Π½Π½ΠΎΠΉ ΡΡΠ°ΡΡΠ΅ ΠΌΡ Π΄Π΅ΡΠ°Π»ΡΠ½ΠΎ ΡΠ°Π·Π±Π΅ΡΠ΅ΠΌ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΡΠ°ΠΌΡΡ Π½Π΅ΠΏΡΠΈΡΡΠ½ΡΡ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠΎΠ² Π² Redux, ΠΊΠΎΡΠΎΡΡΠΌ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΡΡΡΠ΅Π»ΡΡΡ ΡΠ΅Π±Π΅ Π² Π½ΠΎΠ³Ρ β useSelector.
ΠΡΠ΅ΠΌ ΠΏΡΠΈΠ²Π΅Ρ!
Redux Π²ΡΠΎΠ΄Π΅ ΠΊΠ°ΠΊ ΠΈΠ·ΡΡΠΈΠ»ΠΈ Π²Π΄ΠΎΠ»Ρ ΠΈ ΠΏΠΎΠΏΠ΅ΡΠ΅ΠΊ, Π½ΠΎ ΠΎΡ ΡΡΠΎΠ³ΠΎ ΠΎΠ½ Π½Π΅ ΡΡΠ°Π» ΠΈΠ΄Π΅Π°Π»ΡΠ½ΡΠΌ. Π ΡΡΠ°ΡΡΠ΅ ΠΌΡ Π΄Π΅ΡΠ°Π»ΡΠ½ΠΎ ΡΠ°Π·Π±Π΅ΡΠ΅ΠΌ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΡΠ°ΠΌΡΡ Π½Π΅ΠΏΡΠΈΡΡΠ½ΡΡ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠΎΠ² Π² Redux, ΠΊΠΎΡΠΎΡΡΠΌ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΡΡΡΠ΅Π»ΡΡΡ ΡΠ΅Π±Π΅ Π² Π½ΠΎΠ³Ρ. Π‘ΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎ, ΡΡΠΎΡ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ ΠΌΡ ΠΈ ΠΈΠ·ΡΡΠΈΠΌ Π² ΡΡΠ°ΡΡΠ΅ (Π΄Π°Π½Π½Π°Ρ ΡΡΠ°ΡΡΡ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ°ΡΡΠΈΡΡΠΎΠ²ΠΊΠΎΠΉ ΡΡΠΎΠ³ΠΎ Π²ΠΈΠ΄Π΅ΠΎ):
Π‘ΠΊΡΡΡΠ½Π°Ρ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΡ useSelector
Π ΡΠ°ΠΊ Π΄Π°Π²Π°ΠΉΡΠ΅ Π½Π°ΡΠ½Π΅ΠΌ Ρ ΠΎΠ±ΡΠ΅ΠΉ ΡΡ Π΅ΠΌΡ.
ΠΠΎΠΏΡΡΡΠΈΠΌ, Ρ Π½Π°Ρ Π΅ΡΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ Cars
ΡΠΎ ΡΠΏΠΈΡΠΊΠΎΠΌ ΠΌΠ°ΡΠΈΠ½. Π§ΡΠΎΠ±Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΡΠΎΡ ΡΠΏΠΈΡΠΎΠΊ ΠΌΠ°ΡΠΈΠ½, ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ useSelector
Ρ ΡΠ΅Π»Π΅ΠΊΡΠΎΡΠΎΠΌ getCars
, ΠΊΠΎΡΠΎΡΡΠΉ, Π² ΡΠ²ΠΎΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ, ΠΈΠ΄Π΅Ρ Π² Redux Π·Π° Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΡΠΌΠΈ Π½Π°ΠΌ Π΄Π°Π½Π½ΡΠΌΠΈ. Π Π² ΠΈΡΠΎΠ³Π΅ Π΄Π°Π½Π½ΡΠ΅ Π½Π°ΡΠΈΠ½Π°ΡΡ Π²ΡΡΡΠ³ΠΈΠ²Π°ΡΡΡΡ, ΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π½Π°ΠΊΠΎΠ½Π΅Ρ Π²ΠΈΠ΄ΠΈΡ ΡΠΏΠΈΡΠΎΠΊ ΠΌΠ°ΡΠΈΠ½ Ρ ΡΠ΅Π±Ρ Π½Π° ΡΡΡΠ°Π½ΠΈΡΠ΅:
ΠΠ°Π»Π΅Π΅, Π΄ΠΎΠΏΡΡΡΠΈΠΌ, ΡΡΠΎ Π² ΡΡΠΎΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ΅ ΠΌΡ Π²ΡΠ·Π²Π°Π»ΠΈ action Ρ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ Π½ΠΎΠ²ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Ρ Π² ΡΠΏΠΈΡΠΎΠΊ ΠΌΠ°ΡΠΈΠ½. Π‘ΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎ ΡΡΠΎΡ action ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»ΡΠ΅Ρ Redux store, ΡΡΠΎΠ±Ρ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π½ΠΎΠ²ΡΡ ΠΌΠ°ΡΠΈΠ½Ρ Π² ΡΠΏΠΈΡΠΎΠΊ:
ΠΠ°Π»Π΅Π΅, ΠΊΠ°ΠΊ ΠΌΡ Π·Π½Π°Π΅ΠΌ, Redux store Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΠ±Π½ΠΎΠ²ΠΈΡΡ Π½Π°Ρ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ. ΠΠΎ Π²ΠΎΠΏΡΠΎΡ, ΠΊΠ°ΠΊ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΎΠ½ ΡΡΠΎ Π΄Π΅Π»Π°Π΅Ρ Ρ ΡΠ΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΡΠΎΡΠΎΠ½Ρ?
Π Π°Π±ΠΎΡΠ°Π΅Ρ ΡΡΠΎ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ: useSelector
Π½Π΅ ΠΏΡΠΎΡΡΠΎ ΡΡΠΈΡΡΠ²Π°Π΅Ρ Π΄Π°Π½Π½ΡΠ΅ ΠΈΠ· Redux store ΠΏΡΠΈ Π»ΡΠ±ΠΎΠΌ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°, ΠΎΠ½ ΡΠ°ΠΊΠΆΠ΅ Π΅ΡΠ΅ Π½Π΅ΡΠ²Π½ΠΎ ΠΏΠΎΠ΄ΠΏΠΈΡΡΠ²Π°Π΅ΡΡΡ Π½Π° Π»ΡΠ±ΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Redux store (Π±Π΅ΠΆΠ΅Π²ΡΠ΅ ΡΠ΅ΡΡΠΎΡΠΊΠΈ Π½Π° ΡΠΈΡΡΠ½ΠΊΠ΅).
Π ΠΊΠΎΠ³Π΄Π° ΠΈΠ½ΡΠ΅ΡΠ΅ΡΡΡΡΠ΅Π΅ Π½Π°Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π² Redux store ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΡΡΡ, useSelector
Π΅ΡΠ΅ ΠΈ Π·Π°ΡΡΠ°Π²Π»ΡΠ΅Ρ Π²Π΅ΡΡ ΡΠ΅ΠΊΡΡΠΈΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ ΠΏΠ΅ΡΠ΅ ΡΠΈΡΠΎΠ²Π°ΡΡΡΡ. Π ΠΈΡΠΎΠ³Π΅ ΠΏΠΎΡΠ»Π΅ dispatch(addCar(newCar))
, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ reducer ΠΎΠ±Π½ΠΎΠ²ΠΈΡ Π½Π°Ρ Redux store. Π Π±Π»Π°Π³ΠΎΠ΄Π°ΡΡ ΡΠΎΠΌΡ, ΡΡΠΎ useSelector
ΠΏΠΎΠ΄ΠΏΠΈΡΠ°Π½ Π½Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π² Redux store ΠΌΡ ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ ΠΆΠ΅Π»Π°Π½Π½ΡΠΉ ΡΠ΅Π½Π΄Π΅Ρ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° Ρ Π½ΠΎΠ²ΡΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ cars
, Π³Π΄Π΅ ΡΠΆΠ΅ Π² ΡΠΏΠΈΡΠΊΠ΅ ΠΏΡΠΈΡΡΡΡΡΠ²ΡΠ΅Ρ ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠΎ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½Π°Ρ ΠΌΠ°ΡΠΈΠ½Π°:
ΠΠΎΠ»ΡΡΠ°Π΅ΡΡΡ, ΡΡΠΎ useSelector
Π½Π΅ ΡΠ°ΠΊ ΠΏΡΠΎΡΡ, ΠΊΠ°ΠΊ ΠΊΠ°ΠΆΠ΅ΡΡΡ. ΠΡΠΎ Π½Π΅ ΠΏΡΠΎΡΡΠΎ ΠΌΠ΅ΡΠΎΠ΄ Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ Π΄Π°Π½Π½ΡΡ
ΠΈΠ· Redux store. ΠΠ° Π½Π΅ΠΌ Π»Π΅ΠΆΠΈΡ ΠΊΡΠ΄Π° Π±ΠΎΠ»ΡΡΠ΅ ΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎΡΡΠΈ, ΡΠ΅ΠΌ ΠΊΠ°ΠΆΠ΅ΡΡΡ Π½Π° ΠΏΠ΅ΡΠ²ΡΠΉ Π²Π·Π³Π»ΡΠ΄.
ΠΠ°ΡΡΡΠ°Π±ΠΈΡΡΠ΅ΠΌ ΡΠΈΡΡΠ°ΡΠΈΡ
Π§ΡΠΎΠ±Ρ ΠΏΠΎΠ½ΡΡΡ Π²ΡΡ ΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎΡΡΡ, ΠΊΠΎΡΠΎΡΠ°Ρ Π»Π΅ΠΆΠΈΡ Π½Π° useSelector
, Π΄Π°Π²Π°ΠΉΡΠ΅ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΡΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅Ρ. ΠΠΎΠΏΡΡΡΠΈΠΌ, Ρ Π½Π°Ρ Π΅ΡΡΡ ΡΡΡΠ°Π½ΠΈΡΠΊΠ°, Π½Π° ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ ΡΠ΅ΠΊΡΡΠΈΠΉ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ. ΠΠΈΠΆΠ΅ ΠΌΡ Π²ΠΈΠ΄ΠΈΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ ΡΠΎ ΡΠΏΠΈΡΠΊΠΎΠΌ ΡΠ΅Ρ
ΡΠ°ΠΌΡΡ
ΠΌΠ°ΡΠΈΠ½, Π° ΠΏΠΎΡΠ»Π΅ Π½Π΅Π³ΠΎ ΠΏΡΡΡΡ Π΅ΡΠ΅ Π±ΡΠ΄Π΅Ρ ΡΠΏΠΈΡΠΎΠΊ Π΄ΠΈΠ»Π΅ΡΠΎΠ², Ρ ΠΊΠΎΡΠΎΡΡΡ
ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡΠΈΠΎΠ±ΡΠ΅ΡΡΠΈ Π½ΠΎΠ²ΠΎΠ΅ Π°Π²ΡΠΎ:
ΠΠ°ΠΆΠ΄ΡΠΉ ΠΈΠ· ΡΡΠΈΡ
ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ² Π½ΡΠΆΠ΄Π°Π΅ΡΡΡ Π² Π΄Π°Π½Π½ΡΡ
ΠΈΠ· Redux. ΠΡΠΎ Π·Π½Π°ΡΠΈΡ, ΡΡΠΎ Ρ Π½ΠΈΡ
Π²ΡΠ΅Ρ
ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ useSelector
. Π’ΠΎΠ»ΡΠΊΠΎ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ ΡΡΠ½Π΅Ρ ΡΠ²ΠΎΠΈ Π΄Π°Π½Π½ΡΠ΅. ΠΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ Ρ ΡΠ΅ΠΊΡΡΠΈΠΌ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΡΠ΅Π»Π΅ΠΊΡΠΎΡ getCurrentUser
, ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ Ρ ΠΌΠ°ΡΠΈΠ½Π°ΠΌΠΈ, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ, ΡΡΠ½Π΅Ρ ΡΠΏΠΈΡΠΎΠΊ ΠΌΠ°ΡΠΈΠ½ Ρ ΠΏΠΎΠΌΠΎΡΡΡ getCars
. Π ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ Ρ Π΄ΠΈΠ»Π΅ΡΠ°ΠΌΠΈ, ΠΊΠΎΠ½Π΅ΡΠ½ΠΎ ΠΆΠ΅, ΡΡΠ½Π΅Ρ ΡΠΏΠΈΡΠΎΠΊ Π΄ΠΈΠ»Π΅ΡΠΎΠ² Ρ ΠΏΠΎΠΌΠΎΡΡΡ getDealers
. ΠΠ° ΡΡΠΎ Ρ
ΠΎΡΠ΅Π»ΠΎΡΡ Π±Ρ ΠΎΠ±ΡΠ°ΡΠΈΡΡ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: Π²ΡΠ΅ ΡΡΠΈ ΡΠ΅Π»Π΅ΠΊΡΠΎΡΡ ΡΡΠ½ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ ΡΠΎΠ³ΠΎ ΠΆΠ΅ Redux store:
ΠΡΠΎΠ΄Π΅ Ρ Π½Π°ΡΠ°Π»ΡΠ½ΡΠΌΠΈ ΡΡΠ»ΠΎΠ²ΠΈΡΠΌΠΈ ΡΠ°Π·ΠΎΠ±ΡΠ°Π»ΠΈΡΡ.
ΠΠ°Π²Π°ΠΉΡΠ΅ ΡΠ΅ΠΏΠ΅ΡΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΠΌ, ΡΡΠΎ ΠΌΡ Π²ΡΠ·Π²Π°Π»ΠΈ ΡΠΎΡ ΡΠ°ΠΌΡΠΉ action Ρ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ Π½ΠΎΠ²ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Ρ. ΠΡΠ»Π΅Π΄ΡΡΠ²ΠΈΠ΅ ΡΠ΅Π³ΠΎ Redux store Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΠ±Π½ΠΎΠ²ΠΈΡΡΡΡ ΠΈ, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ, ΠΎΡΠΏΡΠ°Π²ΠΈΡΡ Π²ΡΠ΅ΠΌ useSelector
ΡΠΈΠ³Π½Π°Π», ΠΌΠΎΠ», ΠΏΡΠΎΠ²Π΅ΡΡΡΠ΅, Π½ΡΠΆΠ½ΠΎ ΠΎΠ±Π½ΠΎΠ²ΠΈΡΡ Π²Π°ΡΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ ΠΈΠ»ΠΈ Π½Π΅Ρ. Π, ΠΊΠΎΠ½Π΅ΡΠ½ΠΎ, ΠΌΡ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌ, ΡΡΠΎ useSelector
ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° Ρ ΠΌΠ°ΡΠΈΠ½Π°ΠΌΠΈ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΡΠΉ ΠΎΠ±Π½ΠΎΠ²ΠΈΡΡΡ Π² Π΄Π°Π½Π½ΠΎΠΉ ΡΠΈΡΡΠ°ΡΠΈΠΈ. ΠΡΠΎ Π·Π²ΡΡΠΈΡ Π»ΠΎΠ³ΠΈΡΠ½ΠΎ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΌΡ Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ ΠΌΠ°ΡΠΈΠ½Ρ, Π° Π½Π΅ ΠΎΠ±Π½ΠΎΠ²ΠΈΠ»ΠΈ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΈΠ»ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ Π΄ΠΈΠ»Π΅ΡΠ°
ΠΠ²ΡΡΠΈΡ ΠΊΡΠ°ΠΉΠ½Π΅ ΠΏΡΠΎΡΡΠΎ ΠΈ ΡΠ΄ΠΎΠ±Π½ΠΎ, Π½ΠΎ Ρ ΡΡΠΎΠ³ΠΎ Π²ΡΠ΅Π³ΠΎ Π΅ΡΡΡ ΠΎΠ΄Π½ΠΎ ΡΠ·ΠΊΠΎΠ΅ Π³ΠΎΡΠ»ΡΡΠΊΠΎ β useSelector
, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΌΠ΅Ρ
Π°Π½ΠΈΠ·ΠΌ Π²Π½ΡΡΡΠΈ Π½Π΅Π³ΠΎ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡ, Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΠ±Π½ΠΎΠ²ΠΈΡΡΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ ΠΈΠ»ΠΈ Π½Π΅Ρ. ΠΡΠΎΡ ΠΌΠ΅Ρ
Π°Π½ΠΈΠ·ΠΌ Π½Π°ΡΡΠΎΠ»ΡΠΊΠΎ Ρ
ΡΡΠΏΠΊΠΈΠΉ, ΡΡΠΎ Ρ Π½Π΅ΠΎΠ΄Π½ΠΎΠΊΡΠ°ΡΠ½ΠΎ Π²ΠΈΠ΄Π΅Π», ΠΊΠ°ΠΊ Π½Π° ΡΠ°Π·Π½ΡΡ
ΠΏΡΠΎΠ΅ΠΊΡΠ°Ρ
Π²ΠΌΠ΅ΡΡΠΎ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° Cars
ΠΎΠ±Π½ΠΎΠ²Π»ΡΡΡΡΡ Π½Π° Π»ΡΠ±ΠΎΠΉ ΡΠΈΡ
ΡΡΠ°Π·Ρ Π²ΡΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ. Π Π½Π΅Π²Π°ΠΆΠ½ΠΎ, Π΄ΠΎΠ±Π°Π²Π»ΡΠ»ΠΈ ΠΌΡ ΠΌΠ°ΡΠΈΠ½Ρ ΠΈΠ»ΠΈ ΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°Π»ΠΈ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ.
ΠΡΠΎΡΡΠΎ Π·Π°Π΄ΡΠΌΠ°ΠΉΡΠ΅ΡΡ, Π½Π°ΡΠΊΠΎΠ»ΡΠΊΠΎ Π²Π΅Π»ΠΈΠΊΠ° ΡΠ΅Π½Π° Π½Π΅ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΡ ΡΠ°Π±ΠΎΡΡ ΡΡΠΎΠ³ΠΎ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠ°, Π΅ΡΠ»ΠΈ Ρ Π²Π°Ρ Π²ΡΡ ΡΡΡΠ°Π½ΠΈΡΠ° Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ Redux Π΄Π°Π½Π½ΡΡ . ΠΠ΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½Π°Ρ ΡΠ°Π±ΠΎΡΠ° Ρ ΡΡΠΈΠΌ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠΎΠΌ ΠΌΠΎΠΆΠ΅Ρ Π·Π°ΡΡΠ°Π²ΠΈΡΡ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠΎΠ²ΡΠ²Π°ΡΡ Π°Π±ΡΠΎΠ»ΡΡΠ½ΠΎ Π²ΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π½Π° Π°Π±ΡΠΎΠ»ΡΡΠ½ΠΎ Π»ΡΠ±ΠΎΠΉ action. Π actions Ρ Π²Π°Ρ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΎΠ³ΡΠΎΠΌΠ½ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ. Π ΡΠ°ΠΊΠΎΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ ΠΎ Ρ ΠΎΡΠΎΡΠ΅ΠΌ Π±ΡΡΡΡΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ»ΡΠΊΠΎ ΠΌΠΎΠ»ΠΈΡΡΡΡ Π½Π° Π²ΡΠ½ΠΎΡΠ»ΠΈΠ²ΠΎΡΡΡ ΡΡΡΡΠΎΠΉΡΡΠ² ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ.
ΠΠ·ΡΡΠ°Π΅ΠΌ ΡΠ·ΠΊΠΎΠ΅ Π³ΠΎΡΠ»ΡΡΠΊΠΎ
Π‘Π°ΠΌΠΎΠ΅ Π²ΡΠ΅ΠΌΡ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅ΡΡ Π² Π΄Π΅ΡΠ°Π»ΡΡ , ΡΡΠΎ ΠΈΠ· ΡΠ΅Π±Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΡ ΡΠ°ΠΌΡΠΉ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ. ΠΠΎΠΊΠΎΠΏΠ°Π²ΡΠΈΡΡ Π² ΠΈΡΡ ΠΎΠ΄Π½ΠΈΠΊΠ°Ρ , Ρ Π±Ρ Π°ΠΊΡΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π» Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ ΠΌΠ΅ΡΡΠ΅. ΠΠ°ΡΠ½Π΅ΠΌ Ρ 70 ΠΈ 71 ΡΡΡΠΎΠΊ:
// We may be able to reuse the previous invocation's result. const prevSnapshot: Snapshot = (memoizedSnapshot: any); const prevSelection: Selection = (memoizedSelection: any);
ΠΠ΄Π΅ΡΡ ΠΌΡ ΡΠΎΠ·Π΄Π°Π΅ΠΌ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ prevSnapshot
ΠΈ Π½ΠΈΠΆΠ΅ prevSelection
. Π§ΡΠΎ ΠΎΠ·Π½Π°ΡΠ°ΡΡ ΡΠ»ΠΎΠ²Π° prev
, snapshot
ΠΈ selection
Π² ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄Π΅ Π½Π° Π·Π½Π°ΠΊΠΎΠΌΡΠ΅ Π½Π°ΠΌ ΡΠ»ΠΎΠ²Π°. Snapshot
Π½Π°Π·ΡΠ²Π°ΡΡ ΡΠΎ, ΡΡΠΎ ΠΌΡ Π½Π°Π·ΡΠ²Π°Π΅ΠΌ state
. Π’ΠΎ Π΅ΡΡΡ ΡΡΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ Π²ΡΠ΅Π³ΠΎ Redux store, ΠΈΠ· ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΌΡ ΠΏΠΎΡΠΎΠΌ Π΄ΠΎΡΡΠ°Π΅ΠΌ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΈΠ»ΠΈ ΡΠΏΠΈΡΠΎΠΊ ΠΌΠ°ΡΠΈΠ½ ΠΈ ΡΠ°ΠΊ Π΄Π°Π»Π΅Π΅.
const getCars = (state) => state.cars const getCurrentUser = (state) => state.currentUser
Π selection
ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ ΠΊΠ°ΠΊ ΡΠ°Π· ΡΠ°ΠΊΠΈ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΡΡΡΠΈΠ΅ Π½Π°Ρ Π΄Π°Π½Π½ΡΠ΅, ΡΠ΅ ΡΠ°ΠΌΡΠ΅ ΠΌΠ°ΡΠΈΠ½Ρ ΠΈΠ»ΠΈ ΡΠ΅ΠΊΡΡΠΈΠΉ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ. Π’Π΅ Π΄Π°Π½Π½ΡΠ΅, ΠΊΠΎΡΠΎΡΡΠ΅ Π·Π°ΠΏΡΠ°ΡΠΈΠ²Π°Π΅Ρ Π½Π°Ρ ΡΠ΅Π»Π΅ΠΊΡΠΎΡ.
ΠΠ°Π»Π΅Π΅ ΠΎ ΠΏΡΠΈΡΡΠ°Π²ΠΊΠ΅ prev
ΠΈ Π΅ΡΠ΅ ΡΠ²ΠΈΠ΄ΠΈΠΌ ΠΏΡΠΈΡΡΠ°Π²ΠΊΡ next
. ΠΠ½ΠΈ ΠΎΠ·Π½Π°ΡΠ°ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅. ΠΠΎΠΏΡΡΡΠΈΠΌ, Ρ Π½Π°Ρ Π΅ΡΡΡ ΡΠΏΠΈΡΠΎΠΊ ΠΈΠ· 2 ΠΌΠ°ΡΠΈΠ½. Π ΠΌΡ ΡΠ΅ΡΠΈΠ»ΠΈ ΡΡΠ΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π΅ΡΠ΅ ΠΎΠ΄Π½Ρ ΠΌΠ°ΡΠΈΠ½Ρ. Π‘ΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ, prev
ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅, ΡΡΠΎ ΠΊΠΎΠ³Π΄Π° ΠΌΠ°ΡΠΈΠ½Ρ Π΅ΡΠ΅ 2, Π° next
ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ β ΡΡΠΎ ΠΊΠΎΠ³Π΄Π° ΠΌΠ°ΡΠΈΠ½ ΡΠΆΠ΅ 3. Π’ΠΎ Π΅ΡΡΡ ΡΡΠΎ Π΄ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π»ΡΠ±ΠΎΠΉ ΡΠ°ΡΡΠΈ Redux store ΠΈ ΠΏΠΎΡΠ»Π΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ.
Π§ΡΠΎΠ±Ρ Π²Π°ΠΌ Π±ΡΠ»ΠΎ Π»Π΅Π³ΡΠ΅ Π²ΠΎΡΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ ΠΈΡΡ ΠΎΠ΄Π½ΠΈΠΊΠΈ, Ρ ΡΠ΅ΡΠΈΠ» ΠΈΡ ΠΏΠ΅ΡΠ΅ΠΏΠΈΡΠ°ΡΡ. Π’Π΅ΠΏΠ΅ΡΡ ΠΊΠΎΠ΄ Π±ΡΠ΄Π΅Ρ Π²ΡΠ³Π»ΡΠ΄Π΅ΡΡ ΡΠΎ Π·Π½Π°ΠΊΠΎΠΌΡΠΌΠΈ Π΄Π»Ρ Π½Π°Ρ Π²ΡΠ΅Ρ ΡΠ»ΠΎΠ²Π°ΠΌΠΈ Π½Π° ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΡΠΎ ΡΠΏΠΈΡΠΊΠΎΠΌ ΠΌΠ°ΡΠΈΠ½.
// We may be able to reuse the previous invocation's result. const prevState: State = (memoizedSnapshot: any); const prevCars: Cars = (memoizedSelection: any); if (is(prevState, nextState)) { // The snapshot is the same as last time. Reuse the previous selection. return prevState; } // The snapshot has changed, so we need to compute a new selection. const nextCars = getCars(nextState); // If a custom isEqual function is provided, use that to check if the data // has changed. If it hasn't, return the previous selection. That signals // to React that the selections are conceptually equal, and we can bail // out of rendering. if (isEqual !== undefined && isEqual(prevCars, nextCars)) { return prevCars; } memoizedSnapshot = nextState; memoizedSelection = nextCars; return nextCars;
ΠΠ΅ΡΠ²ΡΠ΅ ΡΡΡΠΎΠΊΠΈ ΠΌΡ ΡΠΆΠ΅ ΡΠ°Π·ΠΎΠ±ΡΠ°Π»ΠΈ. ΠΠ°Π»Π΅Π΅ ΠΌΡ Π²ΠΈΠ΄ΠΈΠΌ if
, Π³Π΄Π΅ ΡΡΠ°Π²Π½ΠΈΠ²Π°ΡΡΡΡ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅Π΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ Π²ΡΠ΅Π³ΠΎ ΡΡΠΎΡΠ° ΠΈ ΡΠ΅ΠΊΡΡΠ΅Π΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ Π²ΡΠ΅Π³ΠΎ ΡΡΠΎΡΠ°. Π‘ΡΠ°Π²Π½ΠΈΠ²Π°ΡΡΡΡ ΠΎΠ½ΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ is
. ΠΠΎΠ΄ ΠΊΠ°ΠΏΠΎΡΠΎΠΌ ΡΡΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»ΡΠ½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ Object.is. ΠΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΎΠ³ΡΠ³Π»ΠΈΡΡ, ΠΊΠ°ΠΊ ΠΎΠ½Π° ΡΠ°Π±ΠΎΡΠ°Π΅Ρ, Π½ΠΎ Π΅ΡΠ»ΠΈ Π²ΠΊΡΠ°ΡΡΠ΅, Π² Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΎΠ½Π° ΡΡΠ°Π²Π½ΠΈΠ²Π°Π΅Ρ ΡΡΡΠ»ΠΊΠΈ ΠΎΠ±ΠΎΠΈΡ
Redux store. ΠΡΠ»ΠΈ ΡΡΠΎ ΠΎΠ΄Π½Π° ΠΈ ΡΠ° ΠΆΠ΅ ΡΡΡΠ»ΠΊΠ° Π² ΠΏΠ°ΠΌΡΡΠΈ, ΠΌΡ ΠΏΡΠΎΡΡΠΎ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌ ΡΠΏΠΈΡΠΎΠΊ ΠΌΠ°ΡΠΈΠ½ ΠΈΠ· ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΡ
ΡΠ΅Π½Π΄Π΅ΡΠΎΠ².
ΠΠΎΡΡΠ½Ρ, Π΄Π»Ρ ΡΠ΅Π³ΠΎ ΡΡΠΎ Π½ΡΠΆΠ½ΠΎ Π½Π° ΠΏΡΠΎΡΡΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅. ΠΠΎΠΏΡΡΡΠΈΠΌ, Ρ Π½Π°Ρ Π΅ΡΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ Ρ ΠΊΠ°ΠΊΠΈΠΌ-ΡΠΎ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠΌ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ΠΌ. Π ΡΠ°ΠΊΠΆΠ΅ ΠΌΡ Π΄ΠΎΡΡΠ°Π΅ΠΌ ΠΈΠ· Redux store ΡΠΎΡ ΡΠ°ΠΌΡΠΉ ΡΠΏΠΈΡΠΎΠΊ ΠΌΠ°ΡΠΈΠ½. ΠΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π½Π° ΡΠΊΡΠ°Π½Π΅ Π²ΠΈΠ΄ΠΈΡ, ΠΊΠ°ΠΊ ΡΠΈΡΡΠ΅ΠΌΠ° ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ, ΡΠΊΠΎΠ»ΡΠΊΠΎ Ρ Π½Π΅Π΅ ΠΌΠ°ΡΠΈΠ½ Π² Π°Π²ΡΠΎΠΏΠ°ΡΠΊΠ΅. Π ΡΠΏΡΠ°ΡΠΈΠ²Π°Π΅Ρ: Β«Π ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΌΠ°ΡΠΈΠ½ Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π² Π½Π°Π»ΠΈΡΠΈΠΈ?Β». Π ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»Π΅Π½ΠΎ ΠΏΠΎΠ»Π΅ Π²Π²ΠΎΠ΄Π° Π΄Π»Ρ ΠΎΡΠ²Π΅ΡΠ° Π½Π° ΡΡΠΎΡ Π²ΠΎΠΏΡΠΎΡ.
import { useState } from 'react'; import { useSelector } from 'react-redux'; export const SomeComponent = () => { const [answer, setAnswer] = useState(''); const cars = useSelector(state => state.cars); const onChange = (event) => { setAnswer(event.target.value); } return ( <div> <h1>Π£ ΠΌΠ΅Π½Ρ {cars.length} ΠΌΠ°ΡΠΈΠ½! Π° Ρ ΡΠ΅Π±Ρ?</h1> <input value={answer} onChange={onChange} /> </div> ); };
Π’Π΅ΠΏΠ΅ΡΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΡΡΠ΅, ΡΡΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π²Π²ΠΎΠ΄ΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π² input
ΠΈ Π½Π° ΠΊΠ°ΠΆΠ΄ΡΡ Π±ΡΠΊΠ²Ρ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ setAnswer
. Π§ΡΠΎ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΡΠΈΡΠΈΠ½ΠΎΠΉ ΡΠ΅Π½Π΄Π΅ΡΠ° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°. Π Π°Π±ΡΠΎΠ»ΡΡΠ½ΠΎ Π½Π° ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ΅Π½Π΄Π΅Ρ useSelector
Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΎΠ΄ΠΈΠ½ ΠΈ ΡΠΎΡ ΠΆΠ΅ ΡΠΏΠΈΡΠΎΠΊ ΠΌΠ°ΡΠΈΠ½, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ Redux store Π½Π΅ ΠΌΠ΅Π½ΡΠ΅ΡΡΡ Π² ΡΡΠΈΡ
ΡΠ»ΡΡΠ°ΡΡ
. Π ΡΡΠΎΠ±Ρ useSelector
Π½Π΅ Π΄Π΅Π»Π°Π» Π»ΠΈΡΠ½ΠΈΡ
Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠΉ ΠΈ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΡΠ° ΡΠ°ΠΌΠ°Ρ if
ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π² ΠΊΠΎΠ΄Π΅, Π³Π΄Π΅ ΡΡΠ°Π²Π½ΠΈΠ²Π°Π΅ΡΡΡ, ΠΈΠ·ΠΌΠ΅Π½ΡΠ»ΡΡ Π»ΠΈ Redux store Ρ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅Π³ΠΎ ΡΠ΅Π½Π΄Π΅ΡΠ°.
Π₯ΠΎΡΠΎΡΠΎ, ΡΠ΅ΠΏΠ΅ΡΡ Π΄ΠΎΠΏΡΡΡΠΈΠΌ, ΡΡΠΎ Redux store ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»ΡΡ ΠΈ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠΈΠΉ ΠΊΠΎΠ΄.
// The snapshot has changed, so we need to compute a new selection. const nextCars = getCars(nextState); // If a custom isEqual function is provided, use that to check if the data // has changed. If it hasn't, return the previous selection. That signals // to React that the selections are conceptually equal, and we can bail // out of rendering. if (isEqual !== undefined && isEqual(prevCars, nextCars)) { return prevCars; } memoizedSnapshot = nextState; memoizedSelection = nextCars; return nextCars;
Π’Π°ΠΊ ΠΊΠ°ΠΊ Redux store ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»ΡΡ, Π½ΠΎ ΠΌΡ Π½Π΅ Π·Π½Π°Π΅ΠΌ, ΡΡΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»ΠΎΡΡ, Π±ΡΠ΄Π΅Ρ Π»ΠΎΠ³ΠΈΡΠ½ΠΎ Π΄ΠΎΡΡΠ°ΡΡ ΡΠΏΠΈΡΠΎΠΊ ΠΌΠ°ΡΠΈΠ½ ΠΈΠ· next Redux store ΠΈ ΡΠ°ΠΊΠΆΠ΅ Π΅Π³ΠΎ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ Π½Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ. Π§ΡΠΎ, ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎ, ΠΈ ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΠΈΡ. Π Π΄Π°Π»Π΅Π΅ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ isEqual
ΡΡΠ°Π²Π½ΠΈΠ²Π°Π΅ΠΌ, ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»ΡΡ ΡΠΏΠΈΡΠΎΠΊ ΠΌΠ°ΡΠΈΠ½ ΠΈΠ»ΠΈ Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»ΡΡ.
Π Π΅ΡΠ»ΠΈ ΡΠΏΠΈΡΠΎΠΊ ΠΌΠ°ΡΠΈΠ½ Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»ΡΡ, ΡΠΎ ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌ ΡΠΏΠΈΡΠΎΠΊ ΠΌΠ°ΡΠΈΠ½ ΠΈΠ· ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΡ ΡΠ΅Π½Π΄Π΅ΡΠΎΠ². Π Π΅ΡΠ»ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»ΡΡ, Π² ΡΠ°ΠΊΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌ ΡΠΆΠ΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½Π½ΡΠΉ ΡΠΏΠΈΡΠΎΠΊ ΠΌΠ°ΡΠΈΠ½ ΠΈ Π½Π΅ ΠΏΡΠΎΡΡΠΎ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½Π½ΡΠΉ ΡΠΏΠΈΡΠΎΠΊ ΠΌΠ°ΡΠΈΠ½, Π° Π΅ΡΠ΅ ΠΈ Π·Π°ΡΡΠ°Π²Π»ΡΠ΅ΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ ΡΠ΅Π½Π΄Π΅ΡΠΈΡΡΡΡ. Π’ΠΎ, ΠΎ ΡΠ΅ΠΌ ΠΌΡ Π³ΠΎΠ²ΠΎΡΠΈΠ»ΠΈ Π² ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΉ Π³Π»Π°Π²Π΅.
ΠΠΎΠ»ΡΡΠ°Π΅ΡΡΡ Π²ΠΎΡ ΡΡΠΈ Π΄Π²Π° if-ΡΡΠ»ΠΎΠ²ΠΈΡ ΠΈ Π΅ΡΡΡ ΡΠΎΡ ΡΠ°ΠΌΡΠΉ ΠΌΠ΅Ρ
Π°Π½ΠΈΠ·ΠΌ, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ΅ΡΠ°Π΅Ρ ΠΊΠΎΠΌΡ ΡΠ΅Π½Π΄Π΅ΡΠΈΡΡΡΡ ΠΏΠΎΡΠ»Π΅ Π»ΡΠ±ΠΎΠ³ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π² Redux store, Π° ΠΊΠΎΠΌΡ Π½Π΅ Π½ΡΠΆΠ½ΠΎ ΡΠ΅Π½Π΄Π΅ΡΠΈΡΡΡΡ. ΠΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎ, ΠΊΠ°ΠΊ ΠΈΠΌΠ΅Π½Π½ΠΎ useSelector
Π·Π°ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠ΅Π½Π΄Π΅ΡΠΈΡΡΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ·Π½Π°ΡΡ Π² Π΄ΡΡΠ³ΠΎΠΌ ΠΌΠΎΠ΅ΠΌ Π²ΠΈΠ΄Π΅ΠΎ Ρ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ Β«ΠΡΠ΅ Π»ΠΈ Π²Ρ Π·Π½Π°Π΅ΡΠ΅ ΠΎ useSelector?Β», Π° ΠΏΠΎΠΊΠ° Π΄Π°Π²Π°ΠΉΡΠ΅ Π²Π΅ΡΠ½Π΅ΠΌΡΡ ΠΊ Π½Π°ΡΠΈΠΌ if-ΡΡΠ»ΠΎΠ²ΠΈΡΠΌ.
ΠΡΠ»ΠΈ Π² ΠΏΠ΅ΡΠ²ΠΎΠΌ if-ΡΡΠ»ΠΎΠ²ΠΈΠΈ ΠΌΡ Π²ΠΈΠ΄ΠΈΠΌ, ΡΡΠΎ ΡΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ ΠΈΠ΄Π΅Ρ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Object.is ΠΈ Π²ΠΎΠΎΠ±ΡΠ΅ ΡΡΠ°Π²Π½ΠΈΠ²Π°ΡΡΡΡ ΠΈΠ½ΡΡΠ°Π½ΡΡ Redux store, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ ΠΌΡ ΡΠΎΠ·Π΄Π°Π΅ΠΌ, Π² ΡΠ°ΠΊΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΠ°Π½ΡΡ ΡΠ»ΠΎΠΌΠ°ΡΡ ΡΡΠΎ-ΡΠΎ Π·Π΄Π΅ΡΡ Π½Π΅ Π²Π΅Π»ΠΈΠΊΠΈ.
Π‘ Π΄ΡΡΠ³ΠΎΠΉ ΡΡΠΎΡΠΎΠ½Ρ, Π²ΡΠΎΡΠΎΠ΅ if-ΡΡΠ»ΠΎΠ²ΠΈΠ΅ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΠΊΡΠ΄Π° ΠΎΠΏΠ°ΡΠ½Π΅Π΅. ΠΠ΄Π΅ΡΡ ΡΡΠ°Π²Π½ΠΈΠ²Π°ΡΡΡΡ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌ ΠΈΠ· ΡΠ΅Π»Π΅ΠΊΡΠΎΡΠ°, Ρ. Π΅. Π² Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΌΡ ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΈΠ»ΠΈ ΡΠΏΠΈΡΠΎΠΊ ΠΌΠ°ΡΠΈΠ½. Π Π±ΡΠ΄Π΅Ρ Π»ΠΈ ΡΠΏΠΈΡΠΎΠΊ ΠΌΠ°ΡΠΈΠ½ ΠΎΠ΄Π½ΠΈΠΌ ΠΈ ΡΠ΅ΠΌ ΠΆΠ΅, Π·Π°Π²ΠΈΡΠΈΡ, ΠΊΠΎΠ½Π΅ΡΠ½ΠΎ ΠΆΠ΅, ΠΎΡ ΡΠΏΠΎΡΠΎΠ±Π° ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ. Π Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΌΡ Π²ΠΈΠ΄ΠΈΠΌ, ΡΡΠΎ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ isEqual
. Π ΡΡΠΎΠ±Ρ ΠΏΠΎΠ½ΡΡΡ, ΡΡΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ ΡΡΠΎ Π·Π° ΡΡΠ½ΠΊΡΠΈΡ, Π½ΡΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅ΠΉΡΠΈ ΠΊ ΠΈΡΡ
ΠΎΠ΄Π½ΠΈΠΊΠ°ΠΌ Ρ
ΡΠΊΠ° useSelector
return function useSelector<TState, Selected extends unknown>( selector: (state: TState) => Selected, equalityFn: EqualityFn<NoInfer<Selected>> = refEquality ) { // ... }
ΠΠ°ΠΊ Π²Ρ Π²ΠΈΠ΄ΠΈΡΠ΅, useSelector
ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π½Π΅ ΠΎΠ΄ΠΈΠ½, Π° ΡΠ΅Π»ΡΡ
Π΄Π²Π° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°. ΠΡΠΎΡΠΎΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ equalityFn
, ΠΊΠΎΡΠΎΡΡΠΉ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ. Π’ΠΎ Π΅ΡΡΡ, Π²ΠΎΡ ΡΠ°ΠΊΠΈΠΌ ΡΠΏΠΎΡΠΎΠ±ΠΎΠΌ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ deepEqual
, ΠΊΠΎΡΠΎΡΠ°Ρ Π±ΡΠ΄Π΅Ρ Π³Π»ΡΠ±ΠΎΠΊΠΎ ΡΡΠ°Π²Π½ΠΈΠ²Π°ΡΡ ΡΠΏΠΈΡΠΎΠΊ ΠΌΠ°ΡΠΈΠ½.
const cars = useSelector(getCars, deepEqual);
ΠΠΎ ΡΠ°ΡΠ΅ Π²ΡΠ΅Π³ΠΎ ΠΌΡ Π½Π΅ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΠΌ Π½ΠΈΠΊΠ°ΠΊΡΡ ΡΡΠ½ΠΊΡΠΈΡ Π²ΡΠΎΡΡΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠΌ. Π’Π°ΠΊ ΡΡΠΎ ΠΆΠ΅ Π·Π° ΡΡΠ½ΠΊΡΠΈΡ Π² ΡΠ°ΠΊΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΡΠ°Π²Π½ΠΈΠ²Π°Π΅Ρ ΡΠΏΠΈΡΠΊΠΈ ΠΌΠ°ΡΠΈΠ½? ΠΡΠ»ΠΈ Π²Π΅ΡΠ½ΡΡΡΡΡ ΠΊ ΠΊΠΎΠ΄Ρ ΠΈ Π²Π½ΠΈΠΌΠ°ΡΠ΅Π»ΡΠ½ΠΎ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ, Π²Ρ ΡΠ²ΠΈΠ΄ΠΈΡΠ΅, ΡΡΠΎ ΠΏΠΎ Π΄Π΅ΡΠΎΠ»ΡΡ ΠΏΠΎΠ΄ΡΡΠ°Π²Π»ΡΠ΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ refEquality
. ΠΠ½Π° ΠΎΠΏΠΈΡΠ°Π½Π° Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π²ΡΡΠ΅ Π² ΡΠΎΠΌ ΠΆΠ΅ ΡΠ°ΠΉΠ»Π΅. ΠΡΠ΅ ΡΡΠΎ ΠΎΠ½Π° Π΄Π΅Π»Π°Π΅Ρ, ΡΡΠΎ ΡΡΠ°Π²Π½ΠΈΠ²Π°Π΅Ρ Π΄Π²Π° Π·Π½Π°ΡΠ΅Π½ΠΈΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠΎΠΉΠ½ΠΎΠ³ΠΎ ΡΠ°Π²Π½ΠΎ. ΠΠ°, Π²ΡΠ΅ ΡΠ°ΠΊ ΠΏΡΠΎΡΡΠΎ. Π ΡΡΠΎΠΌ ΠΈ ΠΊΡΠΎΠ΅ΡΡΡ Ρ
ΡΡΠΏΠΊΠΎΡΡΡ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΌΠ΅Ρ
Π°Π½ΠΈΠ·ΠΌΠ°.
const refEquality: EqualityFn<any> = (a, b) => a === b
Π§ΡΠΎΠ±Ρ ΠΏΠΎΠ½ΠΈΠΌΠ°ΡΡ Π²ΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ½ΠΎΡΡΡ ΡΡΠΎΠΉ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ, Π½ΡΠΆΠ½ΠΎ Ρ ΠΎΡΠΎΡΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°ΡΡ ΡΠ°Π·Π½ΠΈΡΡ ΠΌΠ΅ΠΆΠ΄Ρ ΡΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ΠΌ ΠΏΠΎ ΡΡΡΠ»ΠΊΠ΅ ΠΈ ΠΏΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ. ΠΡΠ»ΠΈ Π²Ρ Π½Π΅ ΡΠ²Π΅ΡΠ΅Π½Ρ, ΡΡΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅ΡΠ΅, ΠΎ ΡΠ΅ΠΌ ΠΈΠ΄Π΅Ρ ΡΠ΅ΡΡ, ΠΏΠΎΠΏΡΠΎΠ±ΡΠΉΡΠ΅ ΠΏΠΎΠ³ΡΠ³Π»ΠΈΡΡ ΡΡΠ°Π·Ρ Β«js ΡΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡΡΡΠ»ΠΊΠ΅ ΠΈ ΠΏΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡΒ».
ΠΡΠΈΠΌΠ΅Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ
Π§ΡΠΎΠ±Ρ ΠΏΠΎΠ½ΡΡΡ Π²ΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΡΡΠ΅Π³ΠΎ, Π΄Π°Π²Π°ΠΉΡΠ΅ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΏΡΠΈΠΌΠ΅Ρ. Π£ Π½Π°Ρ Π΅ΡΡΡ ΡΠ΅Π»Π΅ΠΊΡΠΎΡ Π²ΡΠ΅ ΡΠ΅Ρ ΠΆΠ΅ ΠΌΠ°ΡΠΈΠ½. Π£ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π΅ΡΡΡ ΡΠΈΠ»ΡΡΡΡ ΠΏΠΎ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΠΎΠΉ ΠΈ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠΉ ΡΠ΅Π½Π΅ ΠΌΠ°ΡΠΈΠ½Ρ. Π Π½Π°ΠΌ Π½ΡΠΆΠ½ΠΎ Π²Π΅ΡΠ½ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΏΠΈΡΠΎΠΊ ΡΠ΅Ρ ΠΌΠ°ΡΠΈΠ½, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ΄ΠΎΠ²Π»Π΅ΡΠ²ΠΎΡΡΠ΅Ρ ΡΠΈΠ»ΡΡΡΠ°ΠΌ.
const getFilteredCars = (state) => { const minPrice = getMinPriceFilter(state); const maxPrice = getMaxPriceFilter(state); const cars = getCars(state); return cars.filter( (car) => car.price >= minPrice && car.price <= maxPrice ); };
Π Π΅ΡΠ΅Π½ΠΈΠ΅ Π²ΡΠΎΠ΄Π΅ ΠΊΠ°ΠΊ ΡΡΠΈΠ²ΠΈΠ°Π»ΡΠ½ΠΎΠ΅, Π½ΠΎ Π΅ΡΡΡ ΠΌΠ°Π»Π΅Π½ΡΠΊΠΈΠΉ ΠΏΠΎΠ΄Π²ΠΎΡ
. ΠΠ΅ΡΠΎΠ΄ filter
Π²ΡΠ΅Π³Π΄Π°, ΠΎΡ ΡΠ»ΠΎΠ²Π° 100%, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π½ΠΎΠ²ΡΡ ΡΡΡΠ»ΠΊΡ ΠΌΠ°ΡΡΠΈΠ²Π°.
ΠΡΠΎ Π·Π½Π°ΡΠΈΡ, ΡΡΠΎ Π΅ΡΠ»ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΈ ΡΠΎΡ ΠΆΠ΅ ΡΠ΅Π»Π΅ΠΊΡΠΎΡ, Ρ ΠΎΠ΄Π½ΠΈΠΌΠΈ ΠΈ ΡΠ΅ΠΌΠΈ ΠΆΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°ΠΌΠΈ Π²ΡΠ·Π²Π°ΡΡ Π΄Π²Π°ΠΆΠ΄Ρ ΠΈ ΡΡΠ°Π²Π½ΠΈΡΡ, ΡΠΎ ΠΎΠ½ΠΈ Π½Π΅ Π±ΡΠ΄ΡΡ ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½ΡΠ½ΡΠΌΠΈ. Π₯ΠΎΡΡ Π²Π½ΡΡΡΠΈ ΠΈ Π±ΡΠ΄ΡΡ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΠ΅ ΡΠΏΠΈΡΠΊΠΈ ΠΌΠ°ΡΠΈΠ½.
getFilteredCars(state) !== getFilteredCars(state)
Π‘ΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ, Π΅ΡΠ»ΠΈ Π²Π΅ΡΠ½ΡΡΡΡΡ ΠΊ ΠΏΡΠΈΠΌΠ΅ΡΠ°ΠΌ ΡΠ°Π½Π΅Π΅.
ΠΠ΅ Π²Π°ΠΆΠ½ΠΎ ΠΎΠ±Π½ΠΎΠ²ΠΈΠ»ΡΡ Ρ Π²Π°Ρ ΡΠΏΠΈΡΠΎΠΊ Π΄ΠΈΠ»Π΅ΡΠΎΠ² ΠΈΠ»ΠΈ ΠΆΠ΅ ΡΠ΅ΠΊΡΡΠΈΠΉ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ. Π£ Π²Π°Ρ Π²ΡΠ΅Π³Π΄Π° Π±ΡΠ΄Π΅Ρ ΡΠ΅Π½Π΄Π΅ΡΠΈΡΡΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ Ρ ΠΌΠ°ΡΠΈΠ½Π°ΠΌΠΈ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ getFilteredCars
ΡΠ΅Π»Π΅ΠΊΡΠΎΡ Π²ΡΠ΅Π³Π΄Π° Π±ΡΠ΄Π΅Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ Π½ΠΎΠ²ΡΡ ΡΡΡΠ»ΠΊΡ Π½Π° ΡΠΏΠΈΡΠΎΠΊ ΠΌΠ°ΡΠΈΠ½.
Π ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΡΡΠ΅, Π΅ΡΠ»ΠΈ Ρ Π²Π°Ρ Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ°ΠΊΠΎΠ³ΠΎ ΡΠΎΠ΄Π° ΡΠ»ΠΎΠΌΠ°Π½Π½ΡΡ ΡΠ΅Π»Π΅ΠΊΡΠΎΡΠΎΠ². Π ΡΠ΅ΠΏΠ΅ΡΡ Π½Π° Π°Π±ΡΠΎΠ»ΡΡΠ½ΠΎ Π»ΡΠ±ΠΎΠΉ ΡΠΊΡΠ΅Π½ Π±ΡΠ΄Π΅Ρ ΡΠ΅Π½Π΄Π΅ΡΠΈΡΡΡΡ ΡΡΡΡ Π»ΠΈ Π½Π΅ Π²ΡΡ ΡΡΡΠ°Π½ΠΈΡΠ°, ΠΏΡΠΎΡΡΠΎ ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΡΠ΅Π»Π΅ΠΊΡΠΎΡ Π½Π°ΠΏΠΈΡΠ°Π½ Π½Π΅ ΠΎΡΠ΅Π½Ρ ΡΠ΄Π°ΡΠ½ΠΎ. Π Ρ ΠΎΡΠΎΡΠ΅ΠΌ Π±ΡΡΡΡΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠΈ, ΠΌΠ½Π΅ ΠΊΠ°ΠΆΠ΅ΡΡΡ, Π² ΡΠ°ΠΊΠΎΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ ΠΌΠ΅ΡΡΠ°ΡΡ ΡΠΆΠ΅ Π½Π΅ ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡΡΡ.
ΠΠΎΠ½Π΅ΡΠ½ΠΎ ΠΆΠ΅, ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΡΠ°ΠΊΠΎΠ³ΠΎ ΡΠΎΠ΄Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌ ΡΠΆΠ΅ ΠΏΡΠΈΠ΄ΡΠΌΠ°Π½ΠΎ ΠΈ Π΄Π°ΠΆΠ΅ Π΅ΡΡΡ ΠΈΠΌΡ Ρ ΡΡΠΎΠ³ΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΡ β reselect
. ΠΠΎ ΡΠ΅Π³ΠΎΠ΄Π½Ρ Π΅Π³ΠΎ ΡΠ°Π·Π±ΠΈΡΠ°ΡΡ Π½Π΅ Π±ΡΠ΄Π΅ΠΌ
ΠΠ»Ρ ΡΠ΅Π³ΠΎ ΠΏΠΈΡΠ°Π»Π°ΡΡ ΡΡΠ° ΡΡΠ°ΡΡΡ
ΠΠ΄Π΅Ρ Π΄Π°Π½Π½ΠΎΠΉ ΡΡΠ°ΡΡΠΈ β ΠΏΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡΡ Π²Π°Ρ Ρ ΡΠΎΠ½ΠΊΠΎΡΡΡΠΌΠΈ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΈ Redux Π² React. ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΡΡΠ° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° ΠΏΡΠΈΡΡΡΡΡΠ²ΡΠ΅Ρ Π² Π²Π°ΡΠ΅ΠΌ ΠΏΡΠΎΠ΅ΠΊΡΠ΅ ΠΈ Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ ΡΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ Π½Π° ΡΠ°Π±ΠΎΡΠΎΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, Π½ΠΎ ΡΠ΅ΠΏΠ΅ΡΡ Π²Ρ Π±ΡΠ΄Π΅ΡΠ΅ Ρ ΠΎΡΡ Π±Ρ Π·Π½Π°ΡΡ ΠΎ Π½Π΅ΠΉ ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π½Π΅ Π±ΡΠ΄Π΅ΡΠ΅ Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡ ΡΠ°ΠΊΠΈΠ΅ ΡΠ΅Π»Π΅ΠΊΡΠΎΡΡ Π² Prod Π² Π±ΡΠ΄ΡΡΠ΅ΠΌ.