Redux Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ middleware

ПишСм свой middleware для Redux

Π”ΠΎΠ±Ρ€ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ суток, Π΄Ρ€ΡƒΠ·ΡŒΡ. Π’ Π΄Π°Π½Π½ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ Ρ€Π°Π·Π±Π΅Ρ€Π΅ΠΌ понятиС middleware Π² Redux ΠΈ напишСм свою Π½Π΅Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ Redux-middleware для логирования. Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΎΠ±ΠΎ всСм ΠΏΠΎ порядку.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ middleware ΠΈ Π·Π°Ρ‡Π΅ΠΌ ΠΎΠ½ΠΈ Π½ΡƒΠΆΠ½Ρ‹?

Π‘Π°ΠΌΠΎ понятиС middleware довольно-Ρ‚Π°ΠΊΠΈ старая концСпция. Если ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π½Π° понятиС Π² ΠΎΠ±Ρ‰Π΅ΠΌ, Ρ‚ΠΎ это ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ΅ обСспСчСниС для срСднСго слоя ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

Π’ΠΎ Π΅ΡΡ‚ΡŒ, ΠΏΠΎ сути, это просто нСкая ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, которая выполняСт ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹Π΅ дСйствия ΠΈΠ»ΠΈ вычислСния ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ ΠΈΡ… Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅.

Π”Π°Π²Π°ΠΉΡ‚Π΅ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ посмотрим Π½Π° это понятиС Π² Redux. Redux-middleware являСтся функция, которая ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ Π΄Π°Π½Π½Ρ‹Π΅ послС ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ экшСна. Π”Π°Π»Π΅Π΅ ΠΎΠ½Π° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡ… ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ ΠΈΠ»ΠΈ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ с Π½ΠΈΠΌΠΈ ΠΈ Π·Π°Ρ‚Π΅ΠΌ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ дальшС ΠΏΠΎ Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠ΅ Π² Ρ€Π΅Π΄ΡŒΡŽΡΠ΅Ρ€.

Благодаря middleware Π² Redux имССтся Π·Π°ΠΌΠ΅Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½Π°Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Π½ΡƒΠΆΠ½Ρ‹Π΅ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹Π΅ дСйствия Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ взаимодСйствуСт с интСрфСйсом. НапримСр, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π»ΠΎΠ³ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅, ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅, ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π½ΡƒΠΆΠ½Ρ‹Π΅ Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠΈ ΠΈ Ρ‚Π΄.

ПишСм свою ΠΌΠΈΠ΄Π΅Π»Π²Π°Ρ€Ρƒ Logger для Redux

Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΠ΅Ρ€Π΅ΠΉΠ΄Π΅ΠΌ Π½Π°ΠΊΠΎΠ½Π΅Ρ† ΠΊ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ ΠΈ напишСм свою ΠΌΠΈΠ΄Π΅Π»Π²Π°Ρ€Ρƒ. Для этого создадим Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ logger, которая ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π² ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°Ρ… вСсь store. Ѐункция logger Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ Π°Π½ΠΎΠ½ΠΈΠΌΠ½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ Π² Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ next, которая Π½Π° самом Π΄Π΅Π»Π΅ являСтся Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ dispatch. ПослС Ρ‡Π΅Π³ΠΎ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ next с ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½Ρ‹ΠΌ Π² Π½Π΅Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ action. Π—Π²ΡƒΡ‡ΠΈΡ‚ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π·Π°ΠΏΡƒΡ‚Π°Π½Π½ΠΎ, поэтому Π΄Π°Π²Π°ΠΉΡ‚Π΅ опишСм эту ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ Π² ΠΊΠΎΠ΄Π΅, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ES5.

Π’ самой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π°ΠΌ потрСбуСтся воспроизвСсти ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ Π»ΠΎΠ³ΠΈΠΊΡƒ:

1. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠ΅ΠΌ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ состояниС store

2. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠ΅ΠΌ action

3. ΠŸΠ΅Ρ€Π΅Π΄Π°Π΅ΠΌ Ρ‡Π΅Ρ€Π΅Π· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ next ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΉ action для ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π΅Π³ΠΎ Ρ€Π΅Π΄ΡŒΡŽΡΠ΅Ρ€Ρƒ

4. Π‘Π½ΠΎΠ²Π° провСряСм store

5. Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ next(action) ΠΈΠ· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ logger

Π£ вас ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡΠ²ΠΈΡ‚ΡŒΡΡ вопрос: Β«ΠžΡ‚ΠΊΡƒΠ΄Π° Π² Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°Ρ… logger Π²Π΄Ρ€ΡƒΠ³ появился доступ ΠΊ store, функциям next ΠΈ action?Β» ВсС благодаря Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ applyMiddleware ΠΈ Π·Π°ΠΌΡ‹ΠΊΠ°Π½ΠΈΡŽ. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π²Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ logger ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ ΠΈΠ· области видимости Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ applyMiddleware Π½ΠΎΠ²Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π²Π½ΡƒΡ‚Ρ€ΠΈ самой ΠΌΠΈΠ΄Π΅Π»Π²Π°Ρ€Ρ‹.

Благодаря стрСлочным функциям ΠΈ Π·Π°ΠΌΡ‹ΠΊΠ°Π½ΠΈΡŽ ΠΌΠΎΠΆΠ½ΠΎ Π±ΠΎΠ»Π΅Π΅ ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚Π½ΠΎ ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ Π΄Π°Π½Π½ΡƒΡŽ ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ.

Π’ ΠΊΠΎΠ΄Π΅ Π²Ρ‹ΡˆΠ΅ для Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²ΠΊΠΈ Π»ΠΎΠ³ΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ распространСнныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ console.groupCollapsed() ΠΈ console.groupEnd().

Как Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΌΠΈΠ΄Π΅Π»Π²Π°Ρ€Ρƒ Π² Redux?

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠΈΠ΄Π΅Π»Π²Π°Ρ€Ρƒ logger Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ, Π½ΡƒΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π΅Π΅ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ applyMiddleware, которая импортируСтся ΠΈΠ· самого redux, ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π²Ρ‚ΠΎΡ€Ρ‹ΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ Π² createStore.

Π’Π°ΠΆΠ½ΠΎ! ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ ΠΌΠΈΠ΄Π΅Π»Π²Π°Ρ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π² applyMiddleware Π½Π΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΎ, ΠΈΡ… ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ сколько ΡƒΠ³ΠΎΠ΄Π½ΠΎ, Ρ‡Π΅Ρ€Π΅Π· Π·Π°ΠΏΡΡ‚ΡƒΡŽ.

Добавляя ΠΌΠΈΠ΄Π΅Π»Π²Π°Ρ€Ρ‹, слСдуСт ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΈΡ… ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π² ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ applyMiddleware Ρ‚ΠΎΠΆΠ΅ Π²Π°ΠΆΠ½Π°, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ создаСтся Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠ° Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² ΠΈ ΠΌΠΈΠ΄Π΅Π»Π²Π°Ρ€Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, пСрСдавая экшСн ΠΎΡ‚ ΠΎΠ΄Π½ΠΎΠΉ ΠΊ Π΄Ρ€ΡƒΠ³ΠΎΠΉ с ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ΠΉ Ρ€Π΅Π΄ΡŒΡŽΡΠ΅Ρ€Ρƒ.

НСбольшоС отступлСниС: Ссли Π²Ρ‹ Ρ€Π΅ΡˆΠΈΠ»ΠΈ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ свою ΡΠΎΠ±ΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ ΠΌΠΈΠ΄Π΅Π»Π²Π°Ρ€Ρƒ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π½Π° ΡƒΠΆΠ΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹Π΅ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ‚ΡƒΡ‚ ) ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ…, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ с большСй Π²Π΅Ρ€ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒΡŽ Π²Π°ΡˆΡƒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ ΡƒΠΆΠ΅ Ρ€Π΅ΡˆΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… middleware

Для большСй наглядности ΠΏΡ€ΠΈΠ²Π΅Π΄Ρƒ Π½ΠΈΠΆΠ΅ нСсколько ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² Redux-middleware, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π²Π°ΠΌ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹.

1. ΠŸΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ‚ ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ промисы с экшСном. Если промис resolve, Ρ‚ΠΎ Π΅Π³ΠΎ ΠΎΡ‚Π²Π΅Ρ‚ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚ΠΏΡ€Π°Π²Π»Π΅Π½ ΠΊΠ°ΠΊ action.

2. ΠŸΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ вмСсто экшСна. Данная ΠΌΠΈΠ΄Π΅Π»Π²Π°Ρ€ являСтся ΠΎΡ‡Π΅Π½ΡŒ популярной ΠΈ Π²Π΅Π»ΠΈΠΊΠ° Π²Π΅Ρ€ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ с Π½Π΅ΠΉ ΡƒΠΆΠ΅ Π·Π½Π°ΠΊΠΎΠΌΡ‹.

3. ΠŸΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ‚ ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ action, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ количСство миллисСкунд Π² ΠΏΠΎΠ»Π΅ meta.delay для Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠΈ выполнСния Π΄Π°Π½Π½ΠΎΠ³ΠΎ экшСна.

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

БСгодня ΠΌΡ‹ рассмотрСли ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ понятиС middleware. Написали свою Redux-middleware для логирования экшСнов ΠΈ стора. Π’ ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Ρ‹ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΊΠΎΠ΄Π° Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΌΠΈΠ΄Π΅Π»Π²Π°Ρ€ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² вашСй Π΅ΠΆΠ΅Π΄Π½Π΅Π²Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Π΅ ΠΈΠ»ΠΈ для ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Ρ†Π΅Π»Π΅ΠΉ. НадСюсь, Ρ‡Ρ‚ΠΎ Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π» Π±Ρ‹Π» Π²Π°ΠΌ ΠΏΠΎΠ»Π΅Π·Π΅Π½. Π£Ρ‡ΠΈΡ‚Π΅ΡΡŒ, Π΄ΡƒΠΌΠ°ΠΉΡ‚Π΅, ΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΊΠΎΠ΄. Π£Π΄Π°Ρ‡Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄ΠΈΠ½Π³Π°, Π΄Ρ€ΡƒΠ·ΡŒΡ!

ΠŸΠΎΠ΄ΠΏΠΈΡΡ‹Π²Π°ΠΉΡ‚Π΅ΡΡŒ Π½Π° наш ΠΊΠ°Π½Π°Π» Π² Telegram ΠΈ Π½Π° YouTube для получСния самой послСднСй ΠΈ Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

applyMiddleware(. middlewares)

НаиболСС распространСнным случаСм использования ΠΌΠΈΠ΄Π»Π²Π°Ρ€ΠΎΠ² являСтся ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° асинхронных экшСнов Π±Π΅Π· большого количСства шаблонного ΠΊΠΎΠ΄Π° ΠΈΠ»ΠΈ зависимости ΠΎΡ‚ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ Ρ‚ΠΈΠΏΠ° Rx. Π­Ρ‚ΠΎ позволяСт Π²Π°ΠΌ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ асинхронныС ΡΠΊΡˆΠ΅Π½Ρ‹ ΠΏΠΎΠΌΠΈΠΌΠΎ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ… экшСнов.

НапримСр, redux-thunk позволяСт Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π°ΠΌ экшСнов ΠΈΠ½Π²Π΅Ρ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ вызывая Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Они Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ dispatch ΠΊΠ°ΠΊ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ Π΅Π³ΠΎ асинхронно. Π’Π°ΠΊΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ прСобразоватСлями (thunks). Π”Ρ€ΡƒΠ³ΠΈΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ ΠΌΠΈΠ΄Π»Π²Π°Ρ€Π° являСтся redux-promise. Он позволяСт Π²Π°ΠΌ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ асинхронный экшСн c Promise ΠΈ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ ΡΠΊΡˆΠ΅Π½Ρ‹, ΠΊΠΎΠ³Π΄Π° промис Π²Π΅Ρ€Π½Π΅Ρ‚ resolve.

MΠΈΠ΄Π»Π²Π°Ρ€Ρ‹ нСльзя ΡΡ€Π°Π²Π½ΠΈΠ²Π°Ρ‚ΡŒ с createStore ΠΈ это Π½Π΅ Ρ„ΡƒΠ½Π΄Π°ΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Π°Ρ Ρ‡Π°ΡΡ‚ΡŒ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ Redux, Π½ΠΎ, ΠΌΡ‹ считаСм, Ρ‡Ρ‚ΠΎ достаточно ΠΏΠΎΠ»Π΅Π·Π½ΠΎ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ ΠΈΡ… прямо Π² ядрС. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, сущСствуСт СдинствСнный стандартный способ Ρ€Π°ΡΡˆΠΈΡ€ΠΈΡ‚ΡŒ dispatch Π² экосистСмС ΠΈ Ρ€Π°Π·Π½Ρ‹Π΅ ΠΌΠΈΠ΄Π»Π²Π°Ρ€Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ ΠΊΠΎΠ½ΠΊΡƒΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π² Π²Ρ‹Ρ€Π°Π·ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΈ полСзности.

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹

Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚

ΠŸΡ€ΠΈΠΌΠ΅Ρ€: ΠΌΠΈΠ΄Π»Π²Π°Ρ€ для кастомного логирования

ΠŸΡ€ΠΈΠΌΠ΅Ρ€: ИспользованиС Thunk ΠΌΠΈΠ΄Π»Π²Π°Ρ€Π° для асинхронных экшСнов

Π‘ΠΎΠ²Π΅Ρ‚Ρ‹

Если Π²Ρ‹ Ρ…ΠΎΠ΄ΠΈΡ‚Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΌΠΈΠ΄Π»Π²Π°Ρ€ ΠΏΠΎ ΡƒΡΠ»ΠΎΠ²ΠΈΡŽ, ΡƒΠ±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ импортируСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚ΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ:

Π­Ρ‚ΠΎ позволяСт инструмСнтам сборки эффСктивно ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ Π½Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ ΠΊΠΎΠ΄ ΠΈΠ· сборки ΠΈ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Ρ‚ΡŒ ΠΈΡ… Ρ€Π°Π·ΠΌΠ΅Ρ€.

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ compose() для примСнСния Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Ρ€Π°ΡΡˆΠΈΡ€ΠΈΡ‚Π΅Π»Π΅ΠΉ стора ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

MΠΈΠ΄Π»Π²Π°Ρ€ΒΆ

Π’Ρ‹ Π²ΠΈΠ΄Π΅Π»ΠΈ ΠΌΠΈΠ΄Π»Π²Π°Ρ€Ρ‹ (Middleware) Π² дСйствии Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ асинхронных экшСнов. Если Π²Ρ‹ ΠΊΠΎΠ³Π΄Π°-Π»ΠΈΠ±ΠΎ использовали Ρ‚Π°ΠΊΠΈΠ΅ сСрвСрныС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, ΠΊΠ°ΠΊ Express ΠΈ Koa, Ρ‚ΠΎ, вСроятно, Π²Ρ‹ ΡƒΠΆΠ΅ Ρ…ΠΎΡ€ΠΎΡˆΠΎ Π·Π½Π°ΠΊΠΎΠΌΡ‹ с ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠ΅ΠΉ ΠΌΠΈΠ΄Π»Π²Π°Ρ€. Π’ этих Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠ°Ρ… ΠΌΠΈΠ΄Π»Π²Π°Ρ€Ρ‹ β€” это части ΠΊΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΎΠΌ, ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‰ΠΈΠΌ запрос ΠΈ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΎΠΌ, Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΡ‚Π²Π΅Ρ‚. НапримСр, ΠΌΠΈΠ΄Π»Π²Π°Ρ€Ρ‹ ΠΈΠ· Express ΠΈΠ»ΠΈ Koa ΠΌΠΎΠ³ΡƒΡ‚ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ CORS-Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ, Π»ΠΎΠ³ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, сТатиС ΠΈ Ρ‚. Π΄. Π›ΡƒΡ‡ΡˆΠ°Ρ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒ ΠΌΠΈΠ΄Π»Π²Π°Ρ€ΠΎΠ² Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΈΡ… ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ΅Π΄ΠΈΠ½ΡΡ‚ΡŒ Π² Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠΈ/ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ мноТСство нСзависимых сторонних ΠΌΠΈΠ΄Π»Π²Π°Ρ€ΠΎΠ² Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅.

Redux-ΠΌΠΈΠ΄Π»Π²Π°Ρ€Ρ‹, Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ ΠΌΠΈΠ΄Π»Π²Π°Ρ€ΠΎΠ² Express ΠΈΠ»ΠΈ Koa, Ρ€Π΅ΡˆΠ°ΡŽΡ‚ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, Π½ΠΎ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎ схоТим способом. Они ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ ΡΡ‚ΠΎΡ€ΠΎΠ½Π½ΡŽΡŽ Ρ‚ΠΎΡ‡ΠΊΡƒ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ, ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΎΠΉ экшСна ΠΈ ΠΌΠΎΠΌΠ΅Π½Ρ‚ΠΎΠΌ, ΠΊΠΎΠ³Π΄Π° этот экшСн достигаСт Ρ€Π΅Π΄ΡŒΡŽΡΠ΅Ρ€Π°. Π›ΡŽΠ΄ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Redux-ΠΌΠΈΠ΄Π»Π²Π°Ρ€Ρ‹ для логирования, сообщСния ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ…, общСния с асинхронным API, Ρ€ΠΎΡƒΡ‚ΠΈΠ½Π³Π° ΠΈ Ρ‚.Π΄.

Π­Ρ‚Π° ΡΡ‚Π°Ρ‚ΡŒΡ Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Π° Π½Π° ΡƒΠ³Π»ΡƒΠ±Π»Π΅Π½Π½ΠΎΠ΅ Π²Π²Π΅Π΄Π΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ Π²Π°ΠΌ Ρ…ΠΎΡ€ΠΎΡˆΠΎ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ Π² ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ, ΠΈ ΠΏΠ°Ρ€Ρƒ практичСских ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² Π² самом ΠΊΠΎΠ½Ρ†Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠΊΠ°ΠΆΡƒΡ‚ Π²Π°ΠΌ всю силу ΠΌΠΈΠ΄Π»Π²Π°Ρ€ΠΎΠ². Π’Π°ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌ пСриодичСскоС ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ этими частями, Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΌΠ΅ΠΆΠ΄Ρƒ скукой ΠΈ Π²Π΄ΠΎΡ…Π½ΠΎΠ²Π΅Π½ΠΈΠ΅ΠΌ.

ПониманиС ΠΌΠΈΠ΄Π»Π²Π°Ρ€ΠΎΠ²ΒΆ

Π’. ΠΊ. ΠΌΠΈΠ΄Π»Π²Π°Ρ€Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡, Π² Ρ‚ΠΎΠΌ числС ΠΈ для асинхронных ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΉ ΠΊ API, Ρ‚ΠΎ ΠΎΡ‡Π΅Π½ΡŒ Π²Π°ΠΆΠ½ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹ ΠΏΠΎΠ½ΠΈΠΌΠ°Π»ΠΈ, ΠΎΡ‚ΠΊΡƒΠ΄Π° ΠΎΠ½ΠΈ ΠΏΡ€ΠΈΡˆΠ»ΠΈ. ΠœΡ‹ ΠΏΠΎΠΊΠ°ΠΆΠ΅ΠΌ Π²Π°ΠΌ Ρ…ΠΎΠ΄ мыслСй, шаг Π·Π° шагом Π²Π΅Π΄ΡƒΡ‰ΠΈΠΉ ΠΊ ΠΌΠΈΠ΄Π»Π²Π°Ρ€Π°ΠΌ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π»ΠΎΠ³ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ сообщСния ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ… Π² качСствС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°.

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ°: Π»ΠΎΠ³ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΒΆ

Одно ΠΈΠ· достоинств Redux β€” ΠΎΠ½ Π΄Π΅Π»Π°Π΅Ρ‚ измСнСния состояния прилоТСния прСдсказуСмыми ΠΈ ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½Ρ‹ΠΌΠΈ. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° посылаСтся экшСн, Π½ΠΎΠ²ΠΎΠ΅ состояниС вычисляСтся ΠΈ сохраняСтся. БостояниС Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒΡΡ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ, ΠΎΠ½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ, ΠΊΠ°ΠΊ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… экшСнов.

Π Π°Π·Π²Π΅ Π½Π΅ Π±Ρ‹Π»ΠΎ Π±Ρ‹ Ρ…ΠΎΡ€ΠΎΡˆΠΎ, Ссли Π±Ρ‹ ΠΌΡ‹ записывали ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ дСйствиС, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ происходило Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ, вмСстС с состояниСм, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π±Ρ‹Π»ΠΎ вычислСно послС этого дСйствия? Когда Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ ΠΈΠ΄Π΅Ρ‚ Π½Π΅ Ρ‚Π°ΠΊ, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡ€ΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ наш Π»ΠΎΠ³ ΠΈ ΠΏΠΎΠ½ΡΡ‚ΡŒ, ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠΌΠ΅Π½Π½ΠΎ экшСн испортил нашС состояниС.

Redux Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ middleware. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Redux Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ middleware. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Redux Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ middleware. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Redux Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ middleware. Π€ΠΎΡ‚ΠΎ Redux Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ middleware

Как ΠΌΡ‹ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΠΌ ΠΊ этому с Redux?

ΠŸΠΎΠΏΡ‹Ρ‚ΠΊΠ° #1: Π›ΠΎΠ³ΠΈΡ€ΡƒΠ΅ΠΌ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽΒΆ

Если Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ react-redux ΠΈΠ»ΠΈ ΠΏΠΎΡ…ΠΎΠΆΠΈΠΉ Π±ΠΈΠ½Π΄ΠΈΠ½Π³, Ρƒ вас, скорСС всСго, Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ прямого доступа ΠΊ экзСмпляру стора Π² Π²Π°ΡˆΠΈΡ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°Ρ…. Для ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΏΠ°Ρ€Π°Π³Ρ€Π°Ρ„ΠΎΠ² ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚Π΅ состояниС явно.

НапримСр, Π²Ρ‹ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚Π΅ Ρ‚Π°ΠΊΠΎΠΉ ΠΊΠΎΠ΄, ΠΊΠΎΠ³Π΄Π° создаСтС todo-элСмСнт:

Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π»ΠΎΠ³ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ экшСн ΠΈ состояниС, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ‚Π°ΠΊ:

Π­Ρ‚ΠΎ даст ΠΆΠ΅Π»Π°Π΅ΠΌΡ‹ΠΉ эффСкт, Π½ΠΎ Π²Ρ‹ Π±Ρ‹ Π½Π΅ Ρ…ΠΎΡ‚Π΅Π»ΠΈ Π΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚Π°ΠΊ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·.

ΠŸΠΎΠΏΡ‹Ρ‚ΠΊΠ° #2: ΠžΠ±ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Π΅ΠΌ DispatchΒΆ

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ вынСсти Π»ΠΎΠ³ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ:

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π΅ Π²Π΅Π·Π΄Π΅ вмСсто ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ³ΠΎ store.dispatch() :

ΠœΡ‹ Π±Ρ‹ ΠΌΠΎΠ³Π»ΠΈ Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΡ‚ΡŒ Π½Π° этом, Π½ΠΎ Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ ΡƒΠ΄ΠΎΠ±Π½ΠΎ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·.

ΠŸΠΎΠΏΡ‹Ρ‚ΠΊΠ° #3: Monkeypatching для DispatchΒΆ

Π§Ρ‚ΠΎ, Ссли ΠΌΡ‹ просто Π·Π°ΠΌΠ΅Π½ΠΈΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ dispatch Π² экзСмплярС стора? Redux стор β€” это простой ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ с ΠΏΠ°Ρ€ΠΎΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², Π° ΠΌΡ‹ пишСм Π½Π° JavaScript, ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ‚Π΅Ρ…Π½ΠΈΠΊΡƒ monkeypatch для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ dispatch :

Π­Ρ‚ΠΎ ΡƒΠΆΠ΅ Π±Π»ΠΈΠΆΠ΅ ΠΊ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ! НС Π²Π°ΠΆΠ½ΠΎ, ΠΎΡ‚ΠΊΡƒΠ΄Π° ΠΌΡ‹ посылаСм экшСн, ΠΎΠ½ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°Π»ΠΎΠ³ΠΈΡ€ΠΎΠ²Π°Π½. Monkeypatching Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ покаТСтся ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΌ Ρ…ΠΎΠ΄ΠΎΠΌ, Π½ΠΎ ΠΏΠΎΠΊΠ° ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ с этим ΠΆΠΈΡ‚ΡŒ.

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ°: БообщСния ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ….ΒΆ

Π”Ρ€ΡƒΠ³ΠΎΠ΅ Ρ‚Π°ΠΊΠΎΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚ ΠΌΠ½Π΅ Π² Π³ΠΎΠ»ΠΎΠ²Ρƒ, это сообщСния ΠΎ JavaScript-ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ… Π² ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ΅Π½Π΅. Π“Π»ΠΎΠ±Π°Π»ΡŒΠ½ΠΎΠ΅ событиС window.onerror Π½Π΅ Π½Π°Π΄Π΅ΠΆΠ½ΠΎ ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΎ Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… старых Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π°Ρ… Π½Π΅ прСдоставляСт ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ стСкС Π²Ρ‹Π·ΠΎΠ²ΠΎΠ², которая Π²Π°ΠΆΠ½Π° для понимания Ρ‚ΠΎΠ³ΠΎ, ΠΏΠΎΡ‡Π΅ΠΌΡƒ ΠΆΠ΅ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»Π° ошибка.

Π Π°Π·Π²Π΅ Π½Π΅ Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ, Ссли Π±Ρ‹ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° ошибка Π²Ρ‹Π±Ρ€Π°ΡΡ‹Π²Π°Π»Π°ΡΡŒ, ΠΊΠ°ΠΊ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Π»ΠΈΠ±ΠΎ экшСна, ΠΌΡ‹ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ Π΅Π΅ (ΠΎΡˆΠΈΠ±ΠΊΡƒ), вмСстС со стСком Π²Ρ‹Π·ΠΎΠ²ΠΎΠ², экшСном, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹Π·Π²Π°Π» ΠΎΡˆΠΈΠ±ΠΊΡƒ ΠΈ Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΌ состояниСм Π² сСрвис сообщСния ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ…, Ρ‚Π°ΠΊΠΎΠΉ ΠΊΠ°ΠΊ Sentry. Π’ Ρ‚Π°ΠΊΠΎΠΌ случаС Π³ΠΎΡ€Π°Π·Π΄ΠΎ Π»Π΅Π³Ρ‡Π΅ воспроизвСсти ΠΎΡˆΠΈΠ±ΠΊΡƒ Π² Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅.

Однако Π²Π°ΠΆΠ½ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΌΡ‹ Π΄Π΅Ρ€ΠΆΠ°Π»ΠΈ Π»ΠΎΠ³ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ сообщСния ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ… Ρ€Π°Π·Π΄Π΅Π»ΡŒΠ½ΠΎ. Π’ идСальном случаС, ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΈΡ…, ΠΊΠ°ΠΊ Ρ€Π°Π·Π½Ρ‹Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ ΠΈΠ· Ρ€Π°Π·Π½Ρ‹Ρ… ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ². Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС, ΠΌΡ‹ Π½Π΅ смоТСм ΠΈΠΌΠ΅Ρ‚ΡŒ экосистСму ΠΈΠ· Ρ‚Π°ΠΊΠΎΠ³ΠΎ Ρ€ΠΎΠ΄Π° ΡƒΡ‚ΠΈΠ»ΠΈΡ‚. (Подсказка: ΠΌΡ‹ ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΠΌ ΠΊ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠΈΠ΄Π»Π²Π°Ρ€Ρ‹!)

Если Π»ΠΎΠ³ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ сообщСния ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ… ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π°ΠΌΠΈ, Ρ‚ΠΎ ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Ρ‚Π°ΠΊ:

Если эти Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½Ρ‹, ΠΊΠ°ΠΊ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ, Ρ‚ΠΎ ΠΏΠΎΠ·ΠΆΠ΅ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… для измСнСния нашСго стора:

Но это всС Π΅Ρ‰Π΅ Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ Ρ…ΠΎΡ€ΠΎΡˆΠΎ.

ΠŸΠΎΠΏΡ‹Ρ‚ΠΊΠ° #4: ΠŸΡ€ΡΡ‡Π΅ΠΌ MonkeypatchingΒΆ

ΠœΡ‹ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ-ΠΏΠΎΠΌΠΎΡ‰Π½ΠΈΠΊ Π²Π½ΡƒΡ‚Ρ€ΠΈ Redux, которая ΠΌΠΎΠ³Π»Π° Π±Ρ‹ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ monkeypatching, ΠΊΠ°ΠΊ Ρ‡Π°ΡΡ‚ΡŒ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ:

ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ для примСнСния Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΌΠΈΠ΄Π»Π²Π°Ρ€ΠΎΠ²:

ΠŸΠΎΠΏΡ‹Ρ‚ΠΊΠ° #5: Π£Π±ΠΈΡ€Π°Π΅ΠΌ MonkeypatchingΒΆ

Π­Ρ‚ΠΎ Π²Π°ΠΆΠ½ΠΎ для возмоТности ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΡ‚ΡŒ ΠΌΠΈΠ΄Π»Π²Π°Ρ€Ρ‹ Π² Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠΈ!

Но Π΅ΡΡ‚ΡŒ Π΅Ρ‰Π΅ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ объСдинСния ΠΌΠΈΠ΄Π»Π²Π°Ρ€ΠΎΠ² Π² Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠΈ (chaining). ΠœΠΈΠ΄Π»Π²Π°Ρ€ ΠΌΠΎΠ³ Π±Ρ‹ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ экшСна next() Π² ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°Ρ… вмСсто Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π΅Π΅ ΠΈΠ· экзСмпляра стора.

Π­Ρ‚ΠΎ Ρ‚ΠΎΡ‚ ΠΌΠΎΠΌΠ΅Π½Ρ‚, ΠΊΠΎΠ³Π΄Π° β€œwe need to go deeper”, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΈΠΌΠ΅Π΅Ρ‚ смысл ΠΏΠΎΡ‚Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Π΅ врСмя Π½Π° это. Каскад Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ выглядит ΠΏΡƒΠ³Π°ΡŽΡ‰ΠΈΠΌ. Π‘Ρ‚Ρ€Π΅Π»ΠΎΡ‡Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠ· ES6 Π΄Π΅Π»Π°ΡŽΡ‚ это ΠΊΠ°Ρ€Ρ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ‡ΡƒΡ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ простым для Π³Π»Π°Π·:

ИмСнно Ρ‚Π°ΠΊ выглядят ΠΌΠΈΠ΄Π»Π²Π°Ρ€Ρ‹ Π² Redux.

ΠŸΠΎΠΏΡ‹Ρ‚ΠΊΠ° #6: ΠŸΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠ΅Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΌΠΈΠ΄Π»Π²Π°Ρ€ΠΎΠ²ΒΆ

ΠŸΡ€Π΅Π΄ΠΎΡΡ‚Π΅Ρ€Π΅ΠΆΠ΅Π½ΠΈΠ΅: ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠ° Π²ΠΎ врСмя установки

Π€ΠΈΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΒΆ

Π”Π°Π½ ΠΌΠΈΠ΄Π»Π²Π°Ρ€ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚ΠΎ написали:

Π’ΠΎΡ‚ Ρ‚Π°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π΅Π³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΊ Redux стору:

Π’ΠΎΡ‚ ΠΈ всС! Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π»ΡŽΠ±Ρ‹Π΅ ΡΠΊΡˆΠ΅Π½Ρ‹, ΠΎΡ‚ΠΏΡ€Π°Π²Π»Π΅Π½Π½Ρ‹Π΅ Π² экзСмпляр стора, Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ Ρ‡Π΅Ρ€Π΅Π· logger ΠΈ crashReporter :

БСмь ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ²ΒΆ

Если ваша Π³ΠΎΠ»ΠΎΠ²Π° вскипСла ΠΎΡ‚ прочтСния ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ Ρ€Π°Π·Π΄Π΅Π»Π°, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΡŒΡ‚Π΅, ΠΊΠ°ΠΊΠΎΠ²ΠΎ Π±Ρ‹Π»ΠΎ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ это. Π­Ρ‚ΠΎΡ‚ Ρ€Π°Π·Π΄Π΅Π» ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для расслаблСния мСня ΠΈ вас ΠΈ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ваши ΡˆΠ΅ΡΡ‚Π΅Ρ€Π΅Π½ΠΊΠΈ.

КаТдая ΠΈΠ· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹Ρ… Π½ΠΈΠΆΠ΅, являСтся Π²Π°Π»ΠΈΠ΄Π½Ρ‹ΠΌ Redux-ΠΌΠΈΠ΄Π»Π²Π°Ρ€ΠΎΠΌ. Они Π½Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π² Ρ€Π°Π²Π½ΠΎΠΉ стСпСни ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌΠΈ, Π½ΠΎ, ΠΏΠΎ ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅, ΠΎΠ½ΠΈ Π² Ρ€Π°Π²Π½ΠΎΠΉ стСпСни Π·Π°Π±Π°Π²Π½Ρ‹.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Redux Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ middleware

Π’Ρ‹ Π²ΠΈΠ΄Π΅Π»ΠΈ ΠΌΠΈΠ΄Π»Π²Π°Ρ€Ρ‹ Π² дСйствии Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ асинхронных экшСнов. Если Π²Ρ‹ ΠΊΠΎΠ³Π΄Π°-Π»ΠΈΠ±ΠΎ использовали Ρ‚Π°ΠΊΠΈΠ΅ сСрвСрныС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, ΠΊΠ°ΠΊ Express ΠΈ Koa, Ρ‚ΠΎ, вСроятно, Π²Ρ‹ ΡƒΠΆΠ΅ Ρ…ΠΎΡ€ΠΎΡˆΠΎ Π·Π½Π°ΠΊΠΎΠΌΡ‹ с ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠ΅ΠΉ ΠΌΠΈΠ΄Π»Π²Π°Ρ€. Π’ этих Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠ°Ρ… ΠΌΠΈΠ΄Π»Π²Π°Ρ€Ρ‹ β€” это части ΠΊΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΎΠΌ, ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‰ΠΈΠΌ запрос ΠΈ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΎΠΌ, Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΡ‚Π²Π΅Ρ‚. НапримСр, ΠΌΠΈΠ΄Π»Π²Π°Ρ€Ρ‹ ΠΈΠ· Express ΠΈΠ»ΠΈ Koa ΠΌΠΎΠ³ΡƒΡ‚ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ CORS-Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ, Π»ΠΎΠ³ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, сТатиС ΠΈ Ρ‚.Π΄. Π›ΡƒΡ‡ΡˆΠ°Ρ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒ ΠΌΠΈΠ΄Π»Π²Π°Ρ€ΠΎΠ² Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΈΡ… ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ΅Π΄ΠΈΠ½ΡΡ‚ΡŒ Π² Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠΈ/ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ мноТСство нСзависимых сторонних ΠΌΠΈΠ΄Π»Π²Π°Ρ€ΠΎΠ² Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅.

Redux-ΠΌΠΈΠ΄Π»Π²Π°Ρ€Ρ‹, Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ ΠΌΠΈΠ΄Π»Π²Π°Ρ€ΠΎΠ² Express ΠΈΠ»ΠΈ Koa, Ρ€Π΅ΡˆΠ°ΡŽΡ‚ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, Π½ΠΎ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎ схоТим способом. Они ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ ΡΡ‚ΠΎΡ€ΠΎΠ½Π½ΡŽΡŽ Ρ‚ΠΎΡ‡ΠΊΡƒ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ, ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΎΠΉ экшСна ΠΈ ΠΌΠΎΠΌΠ΅Π½Ρ‚ΠΎΠΌ, ΠΊΠΎΠ³Π΄Π° этот экшСн достигаСт Ρ€Π΅Π΄ΡŒΡŽΡΠ΅Ρ€Π°. Π›ΡŽΠ΄ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Redux-ΠΌΠΈΠ΄Π»Π²Π°Ρ€Ρ‹ для логирования, сообщСния ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ…, общСния с асинхронным API, Ρ€ΠΎΡƒΡ‚ΠΈΠ½Π³Π° ΠΈ Ρ‚.Π΄.

Π­Ρ‚Π° ΡΡ‚Π°Ρ‚ΡŒΡ Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Π° Π½Π° ΡƒΠ³Π»ΡƒΠ±Π»Π΅Π½Π½ΠΎΠ΅ Π²Π²Π΅Π΄Π΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ Π²Π°ΠΌ Ρ…ΠΎΡ€ΠΎΡˆΠΎ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ Π² ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ, ΠΈ ΠΏΠ°Ρ€Ρƒ практичСских ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² Π² самом ΠΊΠΎΠ½Ρ†Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠΊΠ°ΠΆΡƒΡ‚ Π²Π°ΠΌ всю силу ΠΌΠΈΠ΄Π»Π²Π°Ρ€ΠΎΠ². Π’Π°ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌ пСриодичСскоС ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ этими частями, Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΌΠ΅ΠΆΠ΄Ρƒ скукой ΠΈ Π²Π΄ΠΎΡ…Π½ΠΎΠ²Π΅Π½ΠΈΠ΅ΠΌ.

Π’.ΠΊ. ΠΌΠΈΠ΄Π»Π²Π°Ρ€Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡, Π² Ρ‚ΠΎΠΌ числС ΠΈ для асинхронных ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΉ ΠΊ API, Ρ‚ΠΎ ΠΎΡ‡Π΅Π½ΡŒ Π²Π°ΠΆΠ½ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹ ΠΏΠΎΠ½ΠΈΠΌΠ°Π»ΠΈ, ΠΎΡ‚ΠΊΡƒΠ΄Π° ΠΎΠ½ΠΈ ΠΏΡ€ΠΈΡˆΠ»ΠΈ. ΠœΡ‹ ΠΏΠΎΠΊΠ°ΠΆΠ΅ΠΌ Π²Π°ΠΌ Ρ…ΠΎΠ΄ мыслСй, шаг Π·Π° шагом Π²Π΅Π΄ΡƒΡ‰ΠΈΠΉ ΠΊ ΠΌΠΈΠ΄Π»Π²Π°Ρ€Π°ΠΌ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π»ΠΎΠ³ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ сообщСния ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ… Π² качСствС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°.

Одно ΠΈΠ· достоинств Redux β€” ΠΎΠ½ Π΄Π΅Π»Π°Π΅Ρ‚ измСнСния состояния прилоТСния прСдсказуСмыми ΠΈ ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½Ρ‹ΠΌΠΈ. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° посылаСтся экшСн, Π½ΠΎΠ²ΠΎΠ΅ состояниС вычисляСтся ΠΈ сохраняСтся. БостояниС Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒΡΡ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ, ΠΎΠ½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ, ΠΊΠ°ΠΊ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… экшСнов.

Π Π°Π·Π²Π΅ Π½Π΅ Π±Ρ‹Π»ΠΎ Π±Ρ‹ Ρ…ΠΎΡ€ΠΎΡˆΠΎ, Ссли Π±Ρ‹ ΠΌΡ‹ записывали ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ дСйствиС, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ происходило Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ, вмСстС с состояниСм, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π±Ρ‹Π»ΠΎ вычислСно послС этого дСйствия? Когда Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ ΠΈΠ΄Π΅Ρ‚ Π½Π΅ Ρ‚Π°ΠΊ, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡ€ΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ наш Π»ΠΎΠ³ ΠΈ ΠΏΠΎΠ½ΡΡ‚ΡŒ, ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠΌΠ΅Π½Π½ΠΎ экшСн испортил нашС состояниС.

Redux Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ middleware. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Redux Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ middleware. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Redux Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ middleware. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Redux Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ middleware. Π€ΠΎΡ‚ΠΎ Redux Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ middleware

Как ΠΌΡ‹ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΠΌ ΠΊ этому с Redux?

ΠŸΠΎΠΏΡ‹Ρ‚ΠΊΠ° #1: Π›ΠΎΠ³ΠΈΡ€ΡƒΠ΅ΠΌ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ

Если Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ react-redux ΠΈΠ»ΠΈ ΠΏΠΎΡ…ΠΎΠΆΠΈΠΉ Π±ΠΈΠ½Π΄ΠΈΠ½Π³, Ρƒ вас, скорСС всСго, Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ прямого доступа ΠΊ экзСмпляру стора Π² Π²Π°ΡˆΠΈΡ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°Ρ…. Для ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΏΠ°Ρ€Π°Π³Ρ€Π°Ρ„ΠΎΠ² ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚Π΅ состояниС явно.

НапримСр, Π²Ρ‹ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚Π΅ Ρ‚Π°ΠΊΠΎΠΉ ΠΊΠΎΠ΄, ΠΊΠΎΠ³Π΄Π° создаСтС todo-элСмСнт:

Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π»ΠΎΠ³ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ экшСн ΠΈ состояниС, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ‚Π°ΠΊ:

Π­Ρ‚ΠΎ даст ΠΆΠ΅Π»Π°Π΅ΠΌΡ‹ΠΉ эффСкт, Π½ΠΎ Π²Ρ‹ Π±Ρ‹ Π½Π΅ Ρ…ΠΎΡ‚Π΅Π»ΠΈ Π΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚Π°ΠΊ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·.

ΠŸΠΎΠΏΡ‹Ρ‚ΠΊΠ° #2: ΠžΠ±ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Π΅ΠΌ Dispatch

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ вынСсти Π»ΠΎΠ³ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ:

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π΅ Π²Π΅Π·Π΄Π΅ вмСсто ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ³ΠΎ store.dispatch() :

ΠœΡ‹ Π±Ρ‹ ΠΌΠΎΠ³Π»ΠΈ Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΡ‚ΡŒ Π½Π° этом, Π½ΠΎ Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ ΡƒΠ΄ΠΎΠ±Π½ΠΎ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·.

Π§Ρ‚ΠΎ, Ссли ΠΌΡ‹ просто Π·Π°ΠΌΠ΅Π½ΠΈΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ dispatch Π² экзСмплярС стора? Redux стор β€” это простой ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ с ΠΏΠ°Ρ€ΠΎΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², Π° ΠΌΡ‹ пишСм Π½Π° JavaScript, ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ‚Π΅Ρ…Π½ΠΈΠΊΡƒ monkeypatch для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ dispatch :

Π­Ρ‚ΠΎ ΡƒΠΆΠ΅ Π±Π»ΠΈΠΆΠ΅ ΠΊ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ! НС Π²Π°ΠΆΠ½ΠΎ, ΠΎΡ‚ΠΊΡƒΠ΄Π° ΠΌΡ‹ посылаСм экшСн, ΠΎΠ½ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°Π»ΠΎΠ³ΠΈΡ€ΠΎΠ²Π°Π½. Monkeypatching Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ покаТСтся ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΌ Ρ…ΠΎΠ΄ΠΎΠΌ, Π½ΠΎ ΠΏΠΎΠΊΠ° ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ с этим ΠΆΠΈΡ‚ΡŒ.

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ°: БообщСния ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ….

Π”Ρ€ΡƒΠ³ΠΎΠ΅ Ρ‚Π°ΠΊΠΎΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚ ΠΌΠ½Π΅ Π² Π³ΠΎΠ»ΠΎΠ²Ρƒ, это сообщСния ΠΎ JavaScript-ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ… Π² ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ΅Π½Π΅. Π“Π»ΠΎΠ±Π°Π»ΡŒΠ½ΠΎΠ΅ событиС window.onerror Π½Π΅ Π½Π°Π΄Π΅ΠΆΠ½ΠΎ ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΎ Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… старых Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π°Ρ… Π½Π΅ прСдоставляСт ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ стСкС Π²Ρ‹Π·ΠΎΠ²ΠΎΠ², которая Π²Π°ΠΆΠ½Π° для понимания Ρ‚ΠΎΠ³ΠΎ, ΠΏΠΎΡ‡Π΅ΠΌΡƒ ΠΆΠ΅ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»Π° ошибка.

Π Π°Π·Π²Π΅ Π½Π΅ Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ, Ссли Π±Ρ‹ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° ошибка Π²Ρ‹Π±Ρ€Π°ΡΡ‹Π²Π°Π»Π°ΡΡŒ, ΠΊΠ°ΠΊ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Π»ΠΈΠ±ΠΎ экшСна, ΠΌΡ‹ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ Π΅Π΅ (ΠΎΡˆΠΈΠ±ΠΊΡƒ), вмСстС со стСком Π²Ρ‹Π·ΠΎΠ²ΠΎΠ², экшСном, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹Π·Π²Π°Π» ΠΎΡˆΠΈΠ±ΠΊΡƒ ΠΈ Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΌ состояниСм Π² сСрвис сообщСния ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ…, Ρ‚Π°ΠΊΠΎΠΉ ΠΊΠ°ΠΊ Sentry. Π’ Ρ‚Π°ΠΊΠΎΠΌ случаС Π³ΠΎΡ€Π°Π·Π΄ΠΎ Π»Π΅Π³Ρ‡Π΅ воспроизвСсти ΠΎΡˆΠΈΠ±ΠΊΡƒ Π² Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅.

Однако Π²Π°ΠΆΠ½ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΌΡ‹ Π΄Π΅Ρ€ΠΆΠ°Π»ΠΈ Π»ΠΎΠ³ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ сообщСния ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ… Ρ€Π°Π·Π΄Π΅Π»ΡŒΠ½ΠΎ. Π’ идСальном случаС, ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΈΡ…, ΠΊΠ°ΠΊ Ρ€Π°Π·Π½Ρ‹Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ ΠΈΠ· Ρ€Π°Π·Π½Ρ‹Ρ… ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ². Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС, ΠΌΡ‹ Π½Π΅ смоТСм ΠΈΠΌΠ΅Ρ‚ΡŒ экосистСму ΠΈΠ· Ρ‚Π°ΠΊΠΎΠ³ΠΎ Ρ€ΠΎΠ΄Π° ΡƒΡ‚ΠΈΠ»ΠΈΡ‚. (Подсказка: ΠΌΡ‹ ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΠΌ ΠΊ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠΈΠ΄Π»Π²Π°Ρ€Ρ‹!)

Если Π»ΠΎΠ³ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ сообщСния ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ… ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π°ΠΌΠΈ, Ρ‚ΠΎ ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Ρ‚Π°ΠΊ:

Если эти Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½Ρ‹, ΠΊΠ°ΠΊ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ, Ρ‚ΠΎ ΠΏΠΎΠ·ΠΆΠ΅ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… для измСнСния нашСго стора:

Но это всС Π΅Ρ‰Π΅ Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ Ρ…ΠΎΡ€ΠΎΡˆΠΎ.

ΠŸΠΎΠΏΡ‹Ρ‚ΠΊΠ° #4: ΠŸΡ€ΡΡ‡Π΅ΠΌ Monkeypatching

ΠœΡ‹ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ-ΠΏΠΎΠΌΠΎΡ‰Π½ΠΈΠΊ Π²Π½ΡƒΡ‚Ρ€ΠΈ Redux, которая ΠΌΠΎΠ³Π»Π° Π±Ρ‹ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ monkeypatching, ΠΊΠ°ΠΊ Ρ‡Π°ΡΡ‚ΡŒ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ:

ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ для примСнСния Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΌΠΈΠ΄Π»Π²Π°Ρ€ΠΎΠ²:

ΠŸΠΎΠΏΡ‹Ρ‚ΠΊΠ° #5: Π£Π±ΠΈΡ€Π°Π΅ΠΌ Monkeypatching

Π­Ρ‚ΠΎ Π²Π°ΠΆΠ½ΠΎ для возмоТности ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΡ‚ΡŒ ΠΌΠΈΠ΄Π»Π²Π°Ρ€Ρ‹ Π² Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠΈ!

Но Π΅ΡΡ‚ΡŒ Π΅Ρ‰Π΅ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ объСдинСния ΠΌΠΈΠ΄Π»Π²Π°Ρ€ΠΎΠ² Π² Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠΈ (chaining). ΠœΠΈΠ΄Π»Π²Π°Ρ€ ΠΌΠΎΠ³ Π±Ρ‹ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ экшСна next() Π² ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°Ρ… вмСсто Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π΅Π΅ ΠΈΠ· экзСмпляра стора.

Π­Ρ‚ΠΎ Ρ‚ΠΎΡ‚ ΠΌΠΎΠΌΠ΅Π½Ρ‚, ΠΊΠΎΠ³Π΄Π° β€œwe need to go deeper”, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΈΠΌΠ΅Π΅Ρ‚ смысл ΠΏΠΎΡ‚Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Π΅ врСмя Π½Π° это. Каскад Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ выглядит ΠΏΡƒΠ³Π°ΡŽΡ‰ΠΈΠΌ. Π‘Ρ‚Ρ€Π΅Π»ΠΎΡ‡Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠ· ES6 Π΄Π΅Π»Π°ΡŽΡ‚ это ΠΊΠ°Ρ€Ρ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ‡ΡƒΡ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ простым для Π³Π»Π°Π·:

ИмСнно Ρ‚Π°ΠΊ выглядят ΠΌΠΈΠ΄Π»Π²Π°Ρ€Ρ‹ Π² Redux.

ΠŸΠΎΠΏΡ‹Ρ‚ΠΊΠ° #6: ΠŸΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠ΅Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΌΠΈΠ΄Π»Π²Π°Ρ€ΠΎΠ²

ΠŸΡ€Π΅Π΄ΠΎΡΡ‚Π΅Ρ€Π΅ΠΆΠ΅Π½ΠΈΠ΅: ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠ° Π²ΠΎ врСмя установки

Π”Π°Π½ ΠΌΠΈΠ΄Π»Π²Π°Ρ€ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚ΠΎ написали:

Π’ΠΎΡ‚ Ρ‚Π°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π΅Π³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΊ Redux стору:

Π’ΠΎΡ‚ ΠΈ всС! Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π»ΡŽΠ±Ρ‹Π΅ ΡΠΊΡˆΠ΅Π½Ρ‹, ΠΎΡ‚ΠΏΡ€Π°Π²Π»Π΅Π½Π½Ρ‹Π΅ Π² экзСмпляр стора, Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ Ρ‡Π΅Ρ€Π΅Π· logger ΠΈ crashReporter :

Если ваша Π³ΠΎΠ»ΠΎΠ²Π° вскипСла ΠΎΡ‚ прочтСния ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ Ρ€Π°Π·Π΄Π΅Π»Π°, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΡŒΡ‚Π΅, ΠΊΠ°ΠΊΠΎΠ²ΠΎ Π±Ρ‹Π»ΠΎ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ это. Π­Ρ‚ΠΎΡ‚ Ρ€Π°Π·Π΄Π΅Π» ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для расслаблСния мСня ΠΈ вас ΠΈ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ваши ΡˆΠ΅ΡΡ‚Π΅Ρ€Π΅Π½ΠΊΠΈ.

КаТдая ΠΈΠ· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹Ρ… Π½ΠΈΠΆΠ΅, являСтся Π²Π°Π»ΠΈΠ΄Π½Ρ‹ΠΌ Redux-ΠΌΠΈΠ΄Π»Π²Π°Ρ€ΠΎΠΌ. Они Π½Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π² Ρ€Π°Π²Π½ΠΎΠΉ стСпСни ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌΠΈ, Π½ΠΎ, ΠΏΠΎ ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅, ΠΎΠ½ΠΈ Π² Ρ€Π°Π²Π½ΠΎΠΉ стСпСни Π·Π°Π±Π°Π²Π½Ρ‹.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Redux. ΠŸΡ€ΠΎΡΡ‚ΠΎΠΉ ΠΊΠ°ΠΊ Π³Ρ€Π°Π±Π»ΠΈ

МнС ΡƒΠΆΠ΅ доводилось Π·Π°Π³Π»ΡΠ΄Ρ‹Π²Π°Ρ‚ΡŒ Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ redux, Π½ΠΎ ΠΎΡ‚ΠΊΡƒΠ΄Π°-Ρ‚ΠΎ появилась ΠΌΡ‹ΡΠ»ΡŒ ΡƒΠ³Π»ΡƒΠ±ΠΈΡ‚ΡŒΡΡ Π² Π΅Π³ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ. Π‘Π²ΠΎΠΈΠΌ Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Ρ€ΠΎΠ΄Π΅ ΡˆΠΎΠΊΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΌ ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ Ρ€Π°Π·ΠΎΡ‡Π°Ρ€ΠΎΠ²Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΌ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ΠΌ я Ρ…ΠΎΡ‚Π΅Π» Π±Ρ‹ ΠΏΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ с сообщСством.

TL;DR: базовая Π»ΠΎΠ³ΠΈΠΊΠ° redux помСщаСтся Π² 7 строк JS ΠΊΠΎΠ΄Π°.

О redux Π²ΠΊΡ€Π°Ρ‚Ρ†Π΅ (Π²ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° Π½Π° Π³ΠΈΡ‚Ρ…Π°Π±Π΅):

Redux β€” Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° управлСния состояниСм для ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, написанных Π½Π° JavaScript.

Она ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΠΏΠΈΡΠ°Ρ‚ΡŒ прилоТСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Π΅Π΄ΡƒΡ‚ сСбя ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎ/прСдсказуСмо, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Π½Π° Ρ€Π°Π·Π½Ρ‹Ρ… окруТСниях (ΠΊΠ»ΠΈΠ΅Π½Ρ‚/сСрвСр/Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄) ΠΈ Π»Π΅Π³ΠΊΠΎ тСстируСмы.

Π― склонировал Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ redux, ΠΎΡ‚ΠΊΡ€Ρ‹Π» Π² Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π΅ ΠΏΠ°ΠΏΠΊΡƒ с исходниками (игнорируя docs, examples ΠΈ ΠΏΡ€ΠΎΡ‡Π΅Π΅) ΠΈ взялся Π·Π° Π½ΠΎΠΆΠ½ΠΈΡ†Ρ‹ ΠΊΠ»Π°Π²ΠΈΡˆΡƒ Delete:

… ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΌΠΎΠ³. Ну ΠΈΠ»ΠΈ ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ полСнился ΠΏΠΈΡΠ°Ρ‚ΡŒ для Π½ΠΈΡ… ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹. Но Π±Π΅Π· ΠΊΠΎΡ€Π½Π΅Ρ€-кСйсов ΠΎΠ½ΠΈ Π΅Ρ‰Ρ‘ ΠΌΠ΅Π½Π΅Π΅ интСрСсны, Ρ‡Π΅ΠΌ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΆΠ΄Ρ‘Ρ‚ вас Π²ΠΏΠ΅Ρ€Π΅Π΄ΠΈ.

А Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π΄Π°Π²Π°ΠΉΡ‚Π΅ Ρ€Π°Π·Π±Π΅Ρ€Ρ‘ΠΌ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΡΡ‚Π°Π»ΠΎΡΡŒ

ПишСм redux Π·Π° 7 строк

Π’Π΅ΡΡŒ Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π» redux умСщаСтся Π² малюсСнький Ρ„Π°ΠΉΠ»ΠΈΠΊ, Ρ€Π°Π΄ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ вряд Π»ΠΈ ΠΊΡ‚ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ github Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ πŸ™‚

Π’Π°ΠΊ устроСн redux. 18 страниц вакансий Π½Π° HeadHunter с поисковым запросом Β«reduxΒ» β€” люди, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π°Π΄Π΅ΡŽΡ‚ΡΡ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Ρ€Π°Π·Π±Π΅Ρ€Π΅Ρ‚Π΅ΡΡŒ Π² 7 строках ΠΊΠΎΠ΄Π°. Всё ΠΎΡΡ‚Π°Π»ΡŒΠ½ΠΎΠ΅ β€” синтаксичСский сахар.

Π‘ этими 7 строками ΡƒΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΈΡΠ°Ρ‚ΡŒ TodoApp. Или Ρ‡Ρ‚ΠΎ ΡƒΠ³ΠΎΠ΄Π½ΠΎ. Но ΠΌΡ‹ Π±Ρ‹ΡΡ‚Ρ€Π΅Π½ΡŒΠΊΠΎ ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡˆΠ΅ΠΌ TodoApp ΠΈΠ· Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ ΠΊ redux.

Π£ΠΆΠ΅ Π½Π° этом этапС я Π΄ΡƒΠΌΠ°Π» Π±Ρ€ΠΎΡΠΈΡ‚ΡŒ ΠΌΠΈΠΊΡ€ΠΎΡ„ΠΎΠ½ со сцСны ΠΈ ΡƒΠΉΡ‚ΠΈ, Π½ΠΎ show must go on.
Π”Π°Π²Π°ΠΉΡ‚Π΅ посмотрим, ΠΊΠ°ΠΊ устроСн ΠΌΠ΅Ρ‚ΠΎΠ΄.

combineReducers

Π­Ρ‚ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт вмСсто Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½ ΠΎΠ³Ρ€ΠΎΠΌΠ½Ρ‹ΠΉ reducer для всСго состояния прилоТСния сразу, Ρ€Π°Π·Π±ΠΈΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π½Π° ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ.

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΎΠ½ Ρ‚Π°ΠΊ:

Π”Π°Π»ΡŒΡˆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ этот store ΠΌΠΎΠΆΠ½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΉ.

Π Π°Π·Π½ΠΈΡ†Π° ΠΌΠΎΠ΅Π³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° ΠΈ описанного Π² Ρ‚ΠΎΠΉ ΠΆΠ΅ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ ΠΊ TodoApp довольно забавная.

Π’ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΠΌΠΎΠ΄Π½Ρ‹ΠΉ синтаксис ΠΈΠ· ES6 (7/8/∞):

ΠΈ соотвСтствСнно ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Ρ‹Π²Π°ΡŽΡ‚ todoReducer Π² todos ΠΈ counterReducer Π² counter. И ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Π² своём ΠΊΠΎΠ΄Π΅ Π΄Π΅Π»Π°ΡŽΡ‚ Ρ‚ΠΎ ΠΆΠ΅ самоС. Π’ ΠΈΡ‚ΠΎΠ³Π΅ Ρ€Π°Π·Π½ΠΈΡ†Ρ‹ Π½Π΅Ρ‚, Π½ΠΎ для Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠ°, знакомящСгося с redux, с ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ Ρ€Π°Π·Π° эта ΡˆΡ‚ΡƒΠΊΠ° выглядит ΠΌΠ°Π³ΠΈΠ΅ΠΉ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΊΠ»ΡŽΡ‡ части состояния (state.todos) соотвСтствуСт Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π½Π°Π·Π²Π°Π½Π½ΠΎΠΉ Ρ‚Π°ΠΊΠΆΠ΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎ ТСланию Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° (function todos()<>).

Если Π±Ρ‹ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π» Π½Π° нашСм micro-redux, ΠΌΡ‹ Π±Ρ‹ сдСлали Ρ‚Π°ΠΊ:

Π­Ρ‚ΠΎΡ‚ ΠΊΠΎΠ΄ ΠΏΠ»ΠΎΡ…ΠΎ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅Ρ‚ΡΡ. Если Ρƒ нас 2 Β«ΠΏΠΎΠ΄-состояния», Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π΄Π²Π°ΠΆΠ΄Ρ‹ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ (state, action), Π° Ρ…ΠΎΡ€ΠΎΡˆΠΈΠ΅ программисты Ρ‚Π°ΠΊ Π½Π΅ Π΄Π΅Π»Π°ΡŽΡ‚, ΠΏΡ€Π°Π²Π΄Π°?

Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΎΡ‚ вас оТидаСтся, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π½Π΅ ΠΈΡΠΏΡƒΠ³Π°Π΅Ρ‚Π΅ΡΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Object.entries ΠΈ ДСструктуризации ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

Однако рСализация ΠΌΠ΅Ρ‚ΠΎΠ΄Π° combineReducers довольно простая (напоминаю, это Ссли ΡƒΠ±Ρ€Π°Ρ‚ΡŒ Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΡŽ ΠΈ Π²Ρ‹Π²ΠΎΠ΄ ошибок) ΠΈ ΡΠ°ΠΌΡƒΡŽ ΠΌΠ°Π»ΠΎΡΡ‚ΡŒ ΠΎΡ‚Ρ€Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΡ‚ΡŒ Π½Π° свой вкус:

ΠœΡ‹ Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ ΠΊ Π½Π°ΡˆΠ΅ΠΌΡƒ Π΄Π΅Ρ‚Ρ‘Π½Ρ‹ΡˆΡƒ redux Π΅Ρ‰Ρ‘ 9 строк ΠΈ массу удобства.

ΠŸΠ΅Ρ€Π΅ΠΉΠ΄Ρ‘ΠΌ ΠΊ Π΅Ρ‰Ρ‘ ΠΎΠ΄Π½ΠΎΠΉ Π²Π°ΠΆΠ½ΠΎΠΉ Ρ„ΠΈΡ‡Π΅, которая каТСтся слишком слоТной, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠΉΡ‚ΠΈ ΠΌΠΈΠΌΠΎ Π½Π΅Ρ‘.

applyMiddleware

middleware Π² Ρ€Π°Π·Ρ€Π΅Π·Π΅ redux β€” это какая-Ρ‚ΠΎ ΡˆΡ‚ΡƒΠΊΠ°, которая ΡΠ»ΡƒΡˆΠ°Π΅Ρ‚ всС dispatch ΠΈ ΠΏΡ€ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… условиях Π΄Π΅Π»Π°Π΅Ρ‚ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ. Π›ΠΎΠ³ΠΈΡ€ΡƒΠ΅Ρ‚, ΠΏΡ€ΠΎΠΈΠ³Ρ€Ρ‹Π²Π°Π΅Ρ‚ Π·Π²ΡƒΠΊΠΈ, Π΄Π΅Π»Π°Π΅Ρ‚ запросы ΠΊ сСрвСру,… β€” Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ.

Π’ ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠΌ ΠΊΠΎΠ΄Π΅ middleware ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Π² createStore, Π½ΠΎ Ссли Π½Π΅ ΠΆΠ°Π»Π΅Ρ‚ΡŒ лишнюю строчку ΠΊΠΎΠ΄Π°, Ρ‚ΠΎ использованиС этого Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»Π° выглядит Ρ‚Π°ΠΊ:

ΠŸΡ€ΠΈ этом рСализация ΠΌΠ΅Ρ‚ΠΎΠ΄Π° applyMiddleware, ΠΊΠΎΠ³Π΄Π° Ρ‚Ρ‹ ΠΏΠΎΡ‚Ρ€Π°Ρ‚ΠΈΡˆΡŒ 10 ΠΌΠΈΠ½ΡƒΡ‚ Π½Π° ковыряниС Π² Ρ‡ΡƒΠΆΠΎΠΌ ΠΊΠΎΠ΄Π΅, сводится ΠΊ ΠΎΡ‡Π΅Π½ΡŒ простой Π²Π΅Ρ‰ΠΈ: createStore Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ с ΠΏΠΎΠ»Π΅ΠΌ Β«dispatchΒ». dispatch, ΠΊΠ°ΠΊ ΠΌΡ‹ ΠΏΠΎΠΌΠ½ΠΈΠΌ (Π½Π΅ ΠΏΠΎΠΌΠ½ΠΈΠΌ) ΠΈΠ· ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ листинга ΠΊΠΎΠ΄Π°, β€” это функция, которая всСго лишь примСняСт Ρ€Π΅Π΄ΡŽΡΠ΅Ρ€ ΠΊ Π½Π°ΡˆΠ΅ΠΌΡƒ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌΡƒ ΡΠΎΡΡ‚ΠΎΡΠ½ΠΈΡŽ (newState = reducer(state, action)).
Π’Π°ΠΊ Π²ΠΎΡ‚ applyMiddleware Π½Π΅ Π±ΠΎΠ»Π΅Π΅ Ρ‡Π΅ΠΌ пСрСопрСдСляСт ΠΌΠ΅Ρ‚ΠΎΠ΄ dispatch, добавляя ΠΏΠ΅Ρ€Π΅Π΄ (ΠΈΠ»ΠΈ послС) ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ΠΌ состояния ΠΊΠ°ΠΊΡƒΡŽ-Ρ‚ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΡƒΡŽ Π»ΠΎΠ³ΠΈΠΊΡƒ.

Π’ΠΎΠ·ΡŒΠΌΡ‘ΠΌ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, самый популярный middleware ΠΎΡ‚ создатСлСй redux β€” redux-thunk

Π•Π³ΠΎ смысл сводится ΠΊ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ

Π½ΠΎ ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ Π² store.dispatch слоТныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

И Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ

я понимаю, Ρ‡Ρ‚ΠΎ конструкция выглядит ΠΆΡƒΡ‚ΠΊΠΎΠ²Π°Ρ‚ΠΎ, Π½ΠΎ Π΅Ρ‘ Ρ‚ΠΎΠΆΠ΅ просто Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Ρƒ Ρ€Π°Π· с ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ ΠΈ Π²Ρ‹ осознаСтС, Ρ‡Ρ‚ΠΎ всё Π½Π΅ Ρ‚Π°ΠΊ ΡΡ‚Ρ€Π°ΡˆΠ½ΠΎ, это просто функция, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰Π°Ρ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ (Π»Π°Π΄Π½ΠΎ, согласСн, ΡΡ‚Ρ€Π°ΡˆΠ½ΠΎ)

Напомню, ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ createStore выглядСл Ρ‚Π°ΠΊ

Π’ΠΎ Π΅ΡΡ‚ΡŒ ΠΎΠ½ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π» Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ (reducer, initialState) ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π» ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ с ΠΊΠ»ΡŽΡ‡Π°ΠΌΠΈ < dispatch, getState >.

Оказалось, Ρ‡Ρ‚ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ applyMiddleware ΠΏΡ€ΠΎΡ‰Π΅, Ρ‡Π΅ΠΌ ΠΏΠΎΠ½ΡΡ‚ΡŒ, ΠΊΠ°ΠΊ ΠΎΠ½ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚.
ΠœΡ‹ Π±Π΅Ρ€Ρ‘ΠΌ ΡƒΠΆΠ΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ createStore ΠΈ пСрСопрСдСляСм Π΅Π³ΠΎ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅:

Π’Ρ‹Π²ΠΎΠ΄

Под ΠΊΠ°ΠΏΠΎΡ‚ΠΎΠΌ redux содСрТатся ΠΎΡ‡Π΅Π½ΡŒ простыС логичСскиС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ. ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ «Если Π±Π΅Π½Π·ΠΈΠ½ Π² Ρ†ΠΈΠ»ΠΈΠ½Π΄Ρ€Π΅ загораСтся, Π΄Π°Π²Π»Π΅Π½ΠΈΠ΅ увСличиваСтся». А Π²ΠΎΡ‚ Ρ‚ΠΎ, смоТСтС Π»ΠΈ Π²Ρ‹ ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Π½Π° этих понятиях Π±ΠΎΠ»ΠΈΠ΄ Π€ΠΎΡ€ΠΌΡƒΠ»Ρ‹ 1 β€” ΡƒΠΆΠ΅ Ρ€Π΅ΡˆΠ°ΠΉΡ‚Π΅ сами.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π’Π°Ρˆ адрСс email Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ *