Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ spa ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅

Single Page Application: ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ сайт-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅

Π­Ρ‚ΠΎ Π½Π΅ сайт ΠΈ Π½Π΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π§Ρ‚ΠΎ это?

Π­Ρ‚Π° ΡΡ‚Π°Ρ‚ΡŒΡ для Ρ‚Π΅Ρ…, ΠΊΠΎΠΌΡƒ интСрСсны Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ Π²Π΅Π±Π° ΠΈ ΠΊΡ‚ΠΎ Ρ…ΠΎΡ‡Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π² ΡΠ΅Ρ€ΡŒΡ‘Π·Π½ΠΎΠΉ Π²Π΅Π±-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅.

ΠžΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ сайт состоит ΠΈΠ· мноТСства HTML-страниц. Π’Ρ‹ ΠΊΠ»ΠΈΠΊΠ°Π΅Ρ‚Π΅ ΠΏΠΎ ссылкам, Π±Ρ€Π°ΡƒΠ·Π΅Ρ€ Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ Π½ΠΎΠ²Ρ‹Π΅ страницы ΠΏΠΎ этим ссылкам, Ρƒ вас появляСтся ΠΎΡ‰ΡƒΡ‰Π΅Π½ΠΈΠ΅ двиТСния ΠΎΡ‚ ΠΎΠ΄Π½ΠΎΠΉ страницы ΠΊ Π΄Ρ€ΡƒΠ³ΠΎΠΉ. Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π»Π΅ΠΆΠ°Ρ‚ΡŒ ΠΊΠ°ΠΊ Ρ„Π°ΠΉΠ»Ρ‹ Π½Π° ΠΊΠ°ΠΊΠΎΠΌ-Ρ‚ΠΎ сСрвСрС ΠΈΠ»ΠΈ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΏΠΎΠ΄ ваш запрос ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ сСрвСрной ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ. Но, условно говоря, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ «экран» сайта β€” это ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Π°Ρ тСхничСская ΡΡƒΡ‰Π½ΠΎΡΡ‚ΡŒ, ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚. И ΠΌΡ‹ ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΈΠΌΠΈ пСрСмСщаСмся.

ΠœΠΎΠ±ΠΈΠ»ΡŒΠ½Ρ‹Π΅ прилоТСния, Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚, ΠΊΠ°ΠΊ Π±ΡƒΠ΄Ρ‚ΠΎ стоят Π½Π° мСстС. Π’ Π½ΠΈΡ… Π·Π°Π³Ρ€ΡƒΠΆΠ°ΡŽΡ‚ΡΡ Π΄Π°Π½Π½Ρ‹Π΅, ΡΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ экраны, Π½ΠΎ Ρƒ нас ΠΎΡ‰ΡƒΡ‰Π΅Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ всСгда Π²Π½ΡƒΡ‚Ρ€ΠΈ этого прилоТСния.

Π’ Π½Π°Ρ‡Π°Π»Π΅ 2010-Ρ… появилась новая концСпция β€” Π½Π΅Ρ‡Ρ‚ΠΎ срСднСС ΠΌΠ΅ΠΆΠ΄Ρƒ сайтом ΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ. Π’Π°ΠΊΡƒΡŽ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρƒ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ SPA β€” Single Page Application. Если Π²Ρ‹ пользовались VK.com ΠΈΠ»ΠΈ Facebook.com, Π²Ρ‹ ΡƒΠΆΠ΅ ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°Π»ΠΈΡΡŒ с Ρ‚Π°ΠΊΠΈΠΌΠΈ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π°ΠΌΠΈ.

ΠšΠΎΡ€ΠΎΡ‚ΠΊΠΎ Π³Π»Π°Π²Π½ΠΎΠ΅

SPA Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ‚Π°ΠΊ: ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ страницу, Π±Ρ€Π°ΡƒΠ·Π΅Ρ€ Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ сразу вСсь ΠΊΠΎΠ΄ прилоТСния. Но ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ β€” Ρ‡Π°ΡΡ‚ΡŒ сайта, которая Π½ΡƒΠΆΠ½Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ. Когда ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ Π² Π΄Ρ€ΡƒΠ³ΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ прилоТСния, Π±Ρ€Π°ΡƒΠ·Π΅Ρ€ Π±Π΅Ρ€Ρ‘Ρ‚ ΡƒΠΆΠ΅ Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π΅ΠΌΡƒ. И, Ссли Π½ΡƒΠΆΠ½ΠΎ, динамичСски ΠΏΠΎΠ΄Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ с сСрвСра Π½ΡƒΠΆΠ½Ρ‹ΠΉ ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚ Π±Π΅Π· обновлСния страницы.

Π‘ ΠΎΠ΄Π½ΠΎΠΉ стороны, Ρ‚Π°ΠΊΠΈΠ΅ прилоТСния Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ быстро ΠΈ мСньшС Π½Π°Π³Ρ€ΡƒΠΆΠ°ΡŽΡ‚ сСрвСр. Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, ΠΎΠ½ΠΈ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ большСй Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π½Π° стартС.

Объясним Π½Π° ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π°Ρ…

Допустим, Ρƒ вас Π΅ΡΡ‚ΡŒ сСрвис, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ смотрят Ρ†Π²Π΅Ρ‚Π½Ρ‹Π΅ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Ρ‹. Π’ интСрфСйсС Π΅ΡΡ‚ΡŒ ΠΊΠ½ΠΎΠΏΠΊΠΈ с Ρ†Π²Π΅Ρ‚Π°ΠΌΠΈ, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠΊΡ€Π°ΡΠΈΡ‚ΡŒ Ρ„ΠΈΠ³ΡƒΡ€Ρ‹. Π’Ρ‹ сдСлали для сСрвиса ΠΈ статичСский сайт, ΠΈ одностраничноС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅:

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ spa ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ spa ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ spa ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ spa ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ spa ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅

На ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ взгляд, Ρ€Π°Π·Π½ΠΈΡ†Ρ‹ ΠΌΠ΅ΠΆΠ΄Ρƒ сайтом ΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ Π½Π΅Ρ‚. Π§Ρ‚ΠΎΠ±Ρ‹ Π΅Ρ‘ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Π½Π°ΠΆΠΌΡ‘ΠΌ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡƒ с Π΄Ρ€ΡƒΠ³ΠΈΠΌ Ρ†Π²Π΅Ρ‚ΠΎΠΌ.

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ spa ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ spa ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ spa ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ spa ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ spa ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅

Π—Π΄Π΅ΡΡŒ становится Π·Π°ΠΌΠ΅Ρ‚Π½ΠΎ, Ρ‡Ρ‚ΠΎ сайт ΠΈ одностраничноС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π²Π΅Π΄ΡƒΡ‚ сСбя ΠΏΠΎ-Ρ€Π°Π·Π½ΠΎΠΌΡƒ:

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ spa ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ spa ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ spa ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ spa ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ spa ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ spa ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ spa ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ spa ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ spa ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ spa ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ spa ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ spa ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ spa ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ spa ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ spa ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ spa ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ spa ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ spa ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ spa ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ spa ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅

Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° сайта обновится Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ. ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ΡΡ, ΠΌΡ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ сСрвСру: Β«ΠŸΡ€ΠΈΠ²Π΅Ρ‚, сдСлай-ΠΊΠ° ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Ρ‹ Π·Π΅Π»Ρ‘Π½Ρ‹ΠΌΠΈΒ». Он Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚: Β«Π₯ΠΎΡ€ΠΎΡˆΠΎ. Но Π΅Ρ‰Ρ‘ Π²ΠΎΡ‚ Π²Π°ΠΌ снова шапка сайта ΠΈ ΠΏΠΎΠ΄Π²Π°Π», Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΊΠ½ΠΎΠΏΠΊΠΈ ΠΈ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Π΅Β». И ΠΎΡ‚Π΄Π°Ρ‘Ρ‚ Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ Π½ΠΎΠ²Ρ‹ΠΉ HTML-Ρ„Π°ΠΉΠ».

Π’ одностраничном ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ обновится Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ†Π²Π΅Ρ‚ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚ΠΎΠ². Π‘Ρ€Π°ΡƒΠ·Π΅Ρ€ отправляСт сСрвСру запрос, Ρ‚ΠΎΡ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π½ΡƒΠΆΠ½Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€, ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Ρ‹ красятся, всё ΠΎΡΡ‚Π°Π»ΡŒΠ½ΠΎΠ΅ остаётся Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π½Ρ‹ΠΌ.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ Ρƒ вас Π½Π΅ простыС ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Ρ‹, Π° ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚-ΠΌΠ°Π³Π°Π·ΠΈΠ½. ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ с ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ‚ΠΎΠ²Π°Ρ€Π° Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ, Π½ΠΎ страница ΠΏΡ€ΠΈ этом Π½Π΅ пСрСзагруТаСтся, Π° динамичСски подтягиваСт Ρ„ΠΎΡ‚ΠΎ, Π½Π°Π·Π²Π°Π½ΠΈΠ΅, описаниС ΠΈ Ρ†Π΅Π½Ρƒ. Π’Π°ΠΊ ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ SPA.

Π—Π°Ρ‡Π΅ΠΌ Π½ΡƒΠΆΠ½Ρ‹ SPA

ΠžΠ΄Π½ΠΎΡΡ‚Ρ€Π°Π½ΠΈΡ‡Π½Ρ‹Π΅ прилоТСния Ρ‡Π°Ρ‰Π΅ всСго ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Π² сСрвисах, Π³Π΄Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΈΡ‚ Π½Π° ΠΎΠ΄Π½ΠΎΠΉ страницС ΠΌΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΈΠ»ΠΈ ΡΠΎΠ²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ с Π½Π΅ΠΉ ΠΊΠ°ΠΊΠΈΠ΅-Ρ‚ΠΎ дСйствия, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

Π’Π΅Π±-вСрсии Gmail, Facebook Netflix, AirBnB ΠΈ Pinterest β€” одностраничныС прилоТСния. ВСхнология Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ распространСна, Ρ‡Ρ‚ΠΎ Π΅Ρ‘ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Π΄Π°ΠΆΠ΅ для сайтов ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΉ. ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π½Π° страницу Digital Agency London. Из русскоязычных ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² β€” Meduza.

SPA ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠ±ΠΌΠ΅Π½ΠΈΠ²Π°Ρ‚ΡŒΡΡ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ с сСрвСром Π±Π΅Π· ΠΏΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ страницы, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ajax-запросов. Благодаря этому Π½Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ страницы ΠΌΠΎΠΆΠ΅Ρ‚ ΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ динамичСски. НапримСр, Ρ€Π°Π½ΡŒΡˆΠ΅ Π² ΡΠΎΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ сСти Π½ΡƒΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΠΏΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ страницу, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, Π½Π΅Ρ‚ Π»ΠΈ Π½ΠΎΠ²Ρ‹Ρ… сообщСний, Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΎΠ½ΠΈ ΠΏΠΎΡΠ²Π»ΡΡŽΡ‚ΡΡ автоматичСски.

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ€Π°Π·Π΄Π΅Π»Π°ΠΌΠΈ Π² интСрфСйсС ЀСйсбука: Ссли ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Π³Π»Π°Π²Π½ΡƒΡŽ, Π° ΠΏΠΎΡ‚ΠΎΠΌ ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ Π² Β«Π“Ρ€ΡƒΠΏΠΏΡ‹Β», Ρ‚ΠΎ содСрТаниС страницы измСнится, Π½ΠΎ шапка останСтся Π½Π° своём мСстС β€” ΠΏΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ страницы Π½Π΅ происходит.

ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π° SPA

SPA быстрыС. ΠŸΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ ΠΌΠ΅ΠΆΠ΄Ρƒ модулями Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ происходит быстрСС: Π½ΡƒΠΆΠ½Ρ‹Π΅ рСсурсы ΡƒΠΆΠ΅ Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Ρ‹, Π½ΡƒΠΆΠ½ΠΎ просто ΠΏΠΎΠ΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ запросил ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ. Часто ΠΏΡ€ΠΈ этом сСрвСр Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π½Π΅ тяТСловСсный HTML, Π° Π»Ρ‘Π³ΠΊΠΈΠΉ JSON ΠΈΠ»ΠΈ XML.

Π•Ρ‰Ρ‘ использованиС JSON ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ прилоТСния для Ρ€Π°Π·Π½Ρ‹Ρ… ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌ. Если для Π²Π΅Π±-вСрсии Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ сайт, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΎΡ‚ сСрвСра HTML, Ρ‚ΠΎ для мобильного прилоТСния придётся ΠΏΠΈΡΠ°Ρ‚ΡŒ Π΄ΠΎΡ€Π°Π±ΠΎΡ‚ΠΊΡƒ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Ρ‚Π°ΠΌ HTML Π½Π΅ ΠΏΠΎΠ΄ΠΎΠΉΠ΄Ρ‘Ρ‚. JSON Π΄Π΅Π»Π°Π΅Ρ‚ ΠΎΡ‚Π²Π΅Ρ‚ сСрвСра ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΌ.

SPA Π³ΠΈΠ±ΠΊΠΈΠ΅. Π Π°Π· ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ всё врСмя Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с ΠΎΠ΄Π½ΠΎΠΉ страницСй, ΠΏΡ€ΠΎΡ‰Π΅ Π΄Π΅Π»Π°Ρ‚ΡŒ интСрСсныС ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Ρ‹ ΠΈ Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΡŽ элСмСнтов. МоТно Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с состояниСм ΠΊΠ½ΠΎΠΏΠΎΠΊ, Π²ΠΊΠ»Π°Π΄ΠΎΠΊ ΠΈ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚Π΅Π»Π΅ΠΉ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, интСрфСйс SPA ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΡ…ΠΎΠΆ скорСС Π½Π° ΠΏΠΎΠ»Π½ΠΎΡ†Π΅Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π° Π½Π΅ Π½Π° простой сайт.

SPA Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Π²Π΅Π·Π΄Π΅. Всё, Ρ‡Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ для SPA β€” ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° JavaScript. Π’Π°ΠΊΠΈΠ΅ сайты Ρ…ΠΎΡ€ΠΎΡˆΠΎ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ ΠΈ Π½Π° дСсктопС, ΠΈ Π² Π²Π΅Π±Π΅, ΠΌΠΎΠ³ΡƒΡ‚ отчасти Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΏΠΎΠ»Π½ΠΎΡ†Π΅Π½Π½Ρ‹Π΅ ΠΌΠΎΠ±ΠΈΠ»ΡŒΠ½Ρ‹Π΅ прилоТСния.

НСдостатки SPA

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с SEO. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Ρƒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ напряТённыС ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ с поисковыми машинами: Ρ‚Π΅ Π½Π°Ρ‚Ρ€Π΅Π½ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ страницы, Ρƒ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π΅ΡΡ‚ΡŒ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ, описаниС ΠΈ ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ΅Ρ‚Π°Ρ‚Π΅Π³ΠΈ. Π’ SPA приходится Π²Ρ‹ΠΊΡ€ΡƒΡ‡ΠΈΠ²Π°Ρ‚ΡŒΡΡ.

ΠŸΠΎΡ…ΠΎΠΆΠ°Ρ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° с Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ систСмами Π°Π½Π°Π»ΠΈΡ‚ΠΈΠΊΠΈ. Π’ΠΎΡ‚ Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎ SPA Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ Google-Π°Π½Π°Π»ΠΈΡ‚ΠΈΠΊΠ°: Β«Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½Ρ‹ΠΉ Ρ‚Π΅Π³ Google Аналитики Ρ…ΠΎΡ€ΠΎΡˆΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ… сайтов, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π΅Π³ΠΎ ΠΊΠΎΠ΄ выполняСтся ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅ Π½ΠΎΠ²ΠΎΠΉ страницы. Однако ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с одностраничным ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ Ρ‚Π°ΠΊΠΎΠΉ ΠΊΠΎΠ΄ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ лишь ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·Β». Π’ΠΎ Π΅ΡΡ‚ΡŒ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ ΡΠΎΠ±ΠΈΡ€Π°Ρ‚ΡŒ Π°Π½Π°Π»ΠΈΡ‚ΠΈΠΊΡƒ, придётся ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ отслСТиваниС Π½ΡƒΠΆΠ½Ρ‹Ρ… событий.

Π—Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ ΠΎΡ‚ ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Π°. Для запуска Π²Π΅Π±-прилоТСния Π½ΡƒΠΆΠ½Π° связь с сСрвСром, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ случаСв Π±Π΅Π· ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Π° Π½Π΅ ΠΎΠ±ΠΎΠΉΡ‚ΠΈΡΡŒ, ΠΊΠ°ΠΊ ΠΈ с ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌΠΈ сайтами. Π­Ρ‚ΠΈΠΌ SPA ΠΏΡ€ΠΎΠΈΠ³Ρ€Ρ‹Π²Π°ΡŽΡ‚ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌ прилоТСниям.

Π₯отя здСсь Π΅ΡΡ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ β€” Ссли Π²ΠΎ врСмя ΠΏΠ΅Ρ€Π²ΠΎΠΉ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ всС Π΄Π°Π½Π½Ρ‹Π΅ ΠΈ большС Π½ΠΈΡ‡Π΅Π³ΠΎ ΠΏΠΎΠ΄Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΈ Π±Π΅Π· ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Π°.

SPA Π½Π΅ для Π½ΠΎΠ²ΠΈΡ‡ΠΊΠΎΠ². ΠΠ°ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° простом HTML ΠΈ CSS Π½Π΅ получится, Π½ΡƒΠΆΠ½ΠΎ Π·Π½Π°Ρ‚ΡŒ JS. Часто для этого ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΈ β€” React, Angular, Vue, Ember ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅. Π’ любом случая для ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π½ΡƒΠΆΠ½Ρ‹ Π±ΠΎΠ»Π΅Π΅ ΠΊΠΎΠΌΠΏΠ΅Ρ‚Π΅Π½Ρ‚Π½Ρ‹Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ.

Π­Ρ‚ΠΎΡ‚ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π» ΠΌΡ‹ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΈΠ»ΠΈ ΠΏΠΎ ΠΌΠΎΡ‚ΠΈΠ²Π°ΠΌ ΠΈΠ½Ρ‚Π΅Ρ€Π²ΡŒΡŽ с АлСксандром Π¨Ρ‚Ρ‹ΠΊΠΎΠ²Ρ‹ΠΌ β€” Ρ€ΡƒΠΊΠΎΠ²ΠΎΠ΄ΠΈΡ‚Π΅Π»Π΅ΠΌ Ρ„Ρ€ΠΎΠ½Ρ‚Π΅Π½Π΄-ΠΊΠΎΠΌΠ°Π½Π΄ Π² Π”Π΅Π»ΠΎΠ²ΠΎΠΉ Π‘Ρ€Π΅Π΄Π΅. Π£ Π”Π΅Π»ΠΎΠ²ΠΎΠΉ Π‘Ρ€Π΅Π΄Ρ‹ Π΅ΡΡ‚ΡŒ ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Π°Ρ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°, которая Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΊΠ°ΠΊ SPA.

Π§Ρ‚ΠΎ дальшС?

Если Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ своё Π²Π΅Π±-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, посмотритС ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ, ΠΊΠ°ΠΊ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° React ΠΈ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ Π½Π° GitHub.Π§Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ SPA, Π½Π΅ ΠΏΠΎΠΌΠ΅Ρ‰Π°Π΅Ρ‚ Ρ…ΠΎΡ€ΠΎΡˆΠΎ Ρ€Π°Π·Π±ΠΈΡ€Π°Ρ‚ΡŒΡΡ Π² JS, Π΅Π³ΠΎ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠ°Ρ… ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… Π²Π΅Π±-тСхнологиях. На ΠŸΡ€Π°ΠΊΡ‚ΠΈΠΊΡƒΠΌΠ΅ Π΅ΡΡ‚ΡŒ курс «Как ΡΡ‚Π°Ρ‚ΡŒ Π²Π΅Π±-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠΌΒ» ΠΈ «Как ΡΡ‚Π°Ρ‚ΡŒ ΠΌΠΈΠ΄Π» Ρ„Ρ€ΠΎΠ½Ρ‚Π΅Π½Π΄-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠΌΒ».

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

Как Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ одностраничноС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ (SPA) с использованиСм Vue.js

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ spa ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ spa ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ spa ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ spa ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ spa ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅

ΠžΠ΄Π½ΠΎΡΡ‚Ρ€Π°Π½ΠΈΡ‡Π½Ρ‹Π΅ прилоТСния (SPA) ΠΈΠΌΠ΅ΡŽΡ‚ мнТСство прСимущСств, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ, ΠΏΠΎ-настоящСму Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΉ UX, ΠΈ ΠΏΠΎΠ»Π½Ρ‹ΠΉ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ HTML-Ρ€Π°Π·ΠΌΠ΅Ρ‚ΠΊΠΈ. Бтановится всё большС ΠΈ большС сайтов SPA; всё большС инструмСнтов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡƒΠΏΡ€ΠΎΡ‰Π°ΡŽΡ‚ процСсс Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ SPA. Π’Ρ‹, вСроятно ΡƒΠΆΠ΅ Ρ‡ΠΈΡ‚Π°Π»ΠΈ ΠΎ ΠΌΠΎΠ»ΠΎΠ΄ΠΎΠΌ ΠΈ пСрспСктивном Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠ΅ Vue.js. ΠŸΡ€Π΅Π΄Π»Π°Π³Π°ΡŽ Π²Π°ΠΌ Π³Π»ΡƒΠ±ΠΆΠ΅ ΠΏΠΎΠ³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒΡΡ Π² Vue ΠΈ Π½Π° ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ с простым SPA.

ΠœΡ‹ напишСм ΠΊΠ»ΠΈΠ΅Π½Ρ‚-сСрвСрноС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠ΅Π³ΠΎ Π±Π»ΠΎΠ³Π°. ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒ список записСй Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠ»Π½Ρ‹ΠΉ тСкст ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΉ записи. И само собой, всё это Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ Π±Π΅Π· ΠΏΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ страницы.

Ознакомившись с ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ этого прилоТСния, Π²Ρ‹ Π½Π°ΡƒΡ‡ΠΈΡ‚Π΅ΡΡŒ ΠΈΠ·Π²Π»Π΅ΠΊΠ°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Π² Vue, ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Ρ€ΠΎΡƒΡ‚Ρ‹ ΠΈ Ρ€Π°Π·Π±Π΅Ρ€Ρ‘Ρ‚Π΅ΡΡŒ с интСрСсной ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒΡŽ Vue β€” ΠΎΠ΄Π½ΠΎΡ„Π°ΠΉΠ»ΠΎΠ²Ρ‹ΠΌΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌΠΈ.

БэкСнд

Π’ этом руководствС ΠΌΡ‹ Π² основном сосрСдоточимся Π½Π° Ρ„Ρ€ΠΎΠ½Ρ‚Π΅Π½Π΄Π΅ Π½Π° Vue. Π Π°Π·ΠΌΡ‹ΡˆΠ»ΡΡ‚ΡŒ ΠΎ написании REST бэкСнда ΠΌΡ‹ Π½Π΅ Π±ΡƒΠ΄Π΅ΠΌ. Для ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ сСрвис jsonplaceholder.typicode.com ΠΏΡ€Π΅Π΄ΠΎΡΡ‚ΠΎΠ²Π»ΡΡŽΡ‰ΠΈΠΉ Π·Π°Π³Π»ΡƒΡˆΠΊΡƒ Π² Π²ΠΈΠ΄Π΅ REST API.

Π€Ρ€ΠΎΠ½Ρ‚Π΅Π½Π΄

Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚Ρ‹

ΠΠ°Ρ‡Π°Ρ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ с Vue ΠΎΡ‡Π΅Π½ΡŒ просто. Π‘ использованиСм ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹Ρ… инструмСнтов это Π΅Ρ‰Ρ‘ ΠΏΡ€ΠΎΡ‰Π΅. Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΡŽ Π²Π·Π³Π»ΡΠ½ΡƒΡ‚ΡŒ Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ vue-awesome, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ содСрТит список инструмСнтов, ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ², Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ ΠΈ ΠΏΠ»Π°Π³ΠΈΠ½ΠΎΠ² Π½Π° всС случаи ΠΆΠΈΠ·Π½ΠΈ.

Vue-cli

ΠŸΡ€ΠΈ создании Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° рСкомСндуСтся Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Vue-cli. Π’Π°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹ с использованиСм ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… ΡˆΠ°Π±Π»ΠΎΠ½Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² Vue, ΠΈΠ»ΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· мноТСства ΡˆΠ°Π±Π»ΠΎΠ½Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² с ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ исходным ΠΊΠΎΠ΄ΠΎΠΌ, ΠΈ, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ ΠΆΠ΅, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ свой собствСнный ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π² любом мСстС.

Π˜Ρ‚Π°ΠΊ, для Π½Π°Ρ‡Π°Π»Π° установим vue-cli Π² качСствС глобального ΠΏΠ°ΠΊΠ΅Ρ‚Π°:

Π—Π°Ρ‚Π΅ΠΌ ΠΏΡ€ΠΎΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ с Π²Ρ‹Π±Ρ€Π°Π½Π½Ρ‹ΠΌ шаблоном; для нашСго ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° Π±ΠΎΠ»Π΅Π΅ Ρ‡Π΅ΠΌ достаточно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ webpack-simple.

Π”Π°Π»Π΅Π΅ ΠΏΠ΅Ρ€Π΅ΠΉΠ΄Ρ‘ΠΌ Π² ΠΏΠ°ΠΏΠΊΡƒ vue-spa ΠΈ запустим npm install Π² Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π΅. ПослС установки всСх ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ², ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ нашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ.

Π­Ρ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° автоматичСски запустит наш ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π½Π° локальном dev-сСрвСрС webpack. Π’ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅ появится нашС ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠ΅Π΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Vue. ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ ΠΎΠ½ΠΎ выглядит совсСм Π½Π΅ Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ Π±Ρ‹ Π½Π°ΠΌ Ρ…ΠΎΡ‚Π΅Π»ΠΎΡΡŒ, ΠΈ годится лишь Π² качСствС ΠΎΡ‚ΠΏΡ€Π°Π²Π½ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠΈ для Π½Π°Ρ‡Π°Π»Π° Ρ‡Π΅Π³ΠΎ-Ρ‚ΠΎ большСго. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ, ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΡŽ сначала ΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚ΡŒΡΡ со структурой нашСго шаблона.

Π¨Π°Π±Π»ΠΎΠ½ webpack-simple

Π’Π½ΡƒΡ‚Ρ€ΠΈ шаблон webpack-simple ΠΈΠΌΠ΅Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ структуру:

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ spa ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ spa ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ spa ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ spa ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ spa ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅

Π€Π°ΠΉΠ» index.html содСрТит ΠΏΡ€ΠΎΡΡ‚ΡƒΡŽ Ρ€Π°Π·ΠΌΠ΅Ρ‚ΠΊΡƒ HTML с СдинствСнным элСмСнтом β€œapp” Π² body. Он Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΌΠ΅Π½Ρ‘Π½ Π½Π° DOM, сгСнСрированный vue. По этой ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅ тэг body Π½Π΅ рСкомСндуСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² качСствС ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠ³ΠΎ элСмСнта.

ΠžΠ΄Π½ΠΎΡ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ spa ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ spa ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ spa ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ spa ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ spa ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅

ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ стилСй, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ выглядСло Π»ΡƒΡ‡ΡˆΠ΅.
Код прилоТСния хостится Π½Π° github.com. Достаточно ΠΊΠ»ΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ ΠΈ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ Π²Π΅Ρ‚ΠΊΡƒ ΠΏΠΎ Π½ΠΎΠΌΠ΅Ρ€Ρƒ шага Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ прилоТСния шаг Π·Π° шагом Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

Π’ настоящий ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π½Π°ΠΌ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎ Π½Π΅Ρ‡Π΅Π³ΠΎ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒ Π² нашСй Π½Π°Π²ΠΈΠ³Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ ΠΏΠ°Π½Π΅Π»ΠΈ, поэтому Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ Π΄Π°Π½Π½Ρ‹Π΅ с сСрвСра. Для этого я Π²Ρ‹Π±Ρ€Π°Π» Axios β€” простой Π² использовании HTTP-ΠΊΠ»ΠΈΠ΅Π½Ρ‚. Π’Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ любой ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΉ для вас способ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Vue-рСсурс ΠΈΠ»ΠΈ ΡΠΎΠ±ΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ Π²Ρ‹Π±ΠΎΡ€ΠΊΡƒ ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ jQuery Ajax.

Π¨Π°Π³ 2

Π—Π°Ρ‚Π΅ΠΌ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌ Π΅Π³ΠΎ Π² ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ App ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ getAllPosts() ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ Π΄Π΅Π»Π°Ρ‚ΡŒ запрос ΠΊ сСрвСру ΠΈ ΠΏΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ свойству posts. Π’Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π² Ρ…ΡƒΠΊΠ΅ created(), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ послС создания экзСмпляра Vue ΠΈ послС установки настроСк обращСния ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ.

А Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΠΌ всС Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ записСй Π² Π±ΠΎΠΊΠΎΠ²ΠΎΠΉ ΠΏΠ°Π½Π΅Π»ΠΈ.

Π”ΠΎ сих ΠΏΠΎΡ€ ΠΌΡ‹ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π»ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ записСй, Π½ΠΎ ΠΏΠΎΠΊΠ° ΠΌΡ‹ Π΅Ρ‰Ρ‘ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ сами записи. Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ΡŒ ΠΏΠΎΠ»Π½Ρ‹ΠΉ пост Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚Π° Π² соотвСтствии с Π²Ρ‹Π±Ρ€Π°Π½Π½Ρ‹ΠΌ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ Π½Π° Π±ΠΎΠΊΠΎΠ²ΠΎΠΉ ΠΏΠ°Π½Π΅Π»ΠΈ. Π’ Ρ‚ΠΎ ΠΆΠ΅ врСмя Ρ…ΠΎΡ‚Π΅Π»ΠΎΡΡŒ Π±Ρ‹, Ρ‡Ρ‚ΠΎΠ±Ρ‹ каТдая запись Π±Ρ‹Π»Π° доступна ΠΏΠΎ своСму ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠΌΡƒ адрСсу.

Π¨Π°Π³ 3

Для этого Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡΡ ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ Vue Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ vue-router. Как ΡƒΠΆΠ΅ понятно ΠΈΠ· названия, Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° позволяСт Π½Π°ΡΡ‚Ρ€Π°ΠΈΠ²Π°Ρ‚ΡŒ Ρ€ΠΎΡƒΡ‚ΠΈΠ½Π³ для нашСго прилоТСния.
Установим Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ:

Для настройки Ρ€ΠΎΡƒΡ‚ΠΈΠ½Π³Π° вСрнёмся ΠΊ Ρ„Π°ΠΉΠ»Ρƒ main.js. Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ настройки Ρ€ΠΎΡƒΡ‚ΠΈΠ½Π³Π° ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΠΈΡ… Π² наш экзСмпляр Vue.

Π’ настройках Ρ€ΠΎΡƒΡ‚ΠΈΠ½Π³Π° ΠΌΡ‹ ΡƒΠΊΠ°Π·Π°Π»ΠΈ, ΠΊΠ°ΠΊΠΎΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ отрисовку ΠΏΠΎ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΌΡƒ ΠΏΡƒΡ‚ΠΈ. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Post.vue Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚Π²Π΅Ρ‡Π°Ρ‚ΡŒ Π·Π° отрисовку ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ поста, Π½Π°ΠΌ Π½Π΅ потрСбуСтся ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ ΠΏΡƒΡ‚ΡŒ ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ посту, достаточно ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ динамичСский ΠΏΡƒΡ‚ΡŒ.

ΠžΡΡ‚Π°Π»ΡΡ Π·Π°ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ шаг. Нам Π½ΡƒΠΆΠ½ΠΎ ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ΡŒ содСрТимоС записи поста.

Π¨Π°Π³ 4

ΠŸΠ΅Ρ€Π΅ΠΉΠ΄Ρ‘ΠΌ ΠΊ Ρ„Π°ΠΉΠ»Ρƒ Post.vue, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ простой шаблон:

Π—Π°Ρ‚Π΅ΠΌ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ экзСмпляра Vue для этого ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°. Π—Π΄Π΅ΡΡŒ всС Ρ‚Π°ΠΊΠΆΠ΅ ΠΊΠ°ΠΊ Π² настройках отобраТСния всСх постов. Объявим ΠΎΠΏΡ†ΠΈΡŽ props с ΠΌΠ΅Π½ΡΡŽΡ‰ΠΈΠΌΡΡ id, которая Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ Π½ΠΎΠΌΠ΅Ρ€ нашСго поста. Π”Π°Π»Π΅Π΅, объявим ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠ°ΠΊ ΡƒΠΆΠ΅ Π΄Π΅Π»Π°Π»ΠΈ Π² App.vue:

Π—Π°Ρ‚Π΅ΠΌ опишСм ΠΌΠ΅Ρ‚ΠΎΠ΄ getPost(), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½Ρƒ запись поста ΠΏΠΎ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρƒ ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ΠΌ Π΅Π³ΠΎ Π² Ρ…ΡƒΠΊΠ΅ created().

ΠŸΠΎΡ‡Ρ‚ΠΈ Π³ΠΎΡ‚ΠΎΠ²ΠΎ. Если ΠΌΡ‹ запустим ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ сСйчас, ΠΌΡ‹ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ, Ρ‡Ρ‚ΠΎ, хотя URL-адрСс мСняСтся, ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ СдинствСнный пост, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±Ρ‹Π» отрисован ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ. Π”Π΅Π»ΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ для отрисовки Ρ€Π°Π·Π½Ρ‹Ρ… постов Ρƒ нас Π΅ΡΡ‚ΡŒ ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚, ΠΈ Vue Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ Π΅Π³ΠΎ ΠΏΠ΅Ρ€Π΅ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΈΠ·-Π·Π° лишнСй Ρ‚Ρ€Π°Ρ‚Ρ‹ рСсурсов, Π° это Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Ρ…ΡƒΠΊΠΈ ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ Π²Ρ‹Π·Π²Π°Π½Ρ‹.
Π§Ρ‚ΠΎΠ±Ρ‹ это ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ, Π½Π°ΠΌ просто Π½ΡƒΠΆΠ½ΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ watcher для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° $route.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ всё Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ ΠΈ Π΄ΠΎΠ»ΠΆΠ½ΠΎ. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π²Π΅Ρ€ΡΠΈΡŽ для ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠΈΠ½Π° достаточно Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ npm run build Π² консоли.

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

Как ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ SPA Π½Π° JS ΠΈ PHP Π·Π° час

ΠžΠ΄Π½ΠΎΡΡ‚Ρ€Π°Π½ΠΈΡ‡Π½Ρ‹Π΅ прилоТСния ΡƒΠΆΠ΅ Π΄Π°Π²Π½ΠΎ Π½Π΅ Π² Π½ΠΎΠ²ΠΈΠ½ΠΊΡƒ, Π° скоро Π²ΠΎΠΎΠ±Ρ‰Π΅ станут стандартом Π²Π΅Π±-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ. Π£Π·Π½Π°ΠΉΡ‚Π΅, ΠΊΠ°ΠΊ ΠΈΡ… ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ, β€” ΠΏΠΎΠΊΠ° Π½Π΅ ΠΏΠΎΠ·Π΄Π½ΠΎ.

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ spa ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ spa ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ spa ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ spa ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ spa ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ spa ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ spa ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ spa ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ spa ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ spa ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅

SPA (Π°Π½Π³Π». Single Page Application β€” одностраничноС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅) β€” это сайт, для Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π½Π΅ трСбуСтся ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ страницы, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ всС Π΄Π°Π½Π½Ρ‹Π΅ Π·Π°Π³Ρ€ΡƒΠΆΠ°ΡŽΡ‚ΡΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ скриптов.

ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏ Ρ€Π°Π±ΠΎΡ‚Ρ‹ SPA прост: ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ ΡΠΎΠ²Π΅Ρ€ΡˆΠ°Π΅Ρ‚Π΅ ΠΊΠ°ΠΊΠΎΠ΅-Ρ‚ΠΎ дСйствиС, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π½Π°ΠΆΠΈΠΌΠ°Π΅Ρ‚Π΅ Π½Π° ссылку, скрипт ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ это событиС. Он отмСняСт дСйствиС ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΈ вмСсто этого сам обмСниваСтся Π΄Π°Π½Π½Ρ‹ΠΌΠΈ с сСрвСром, Π° ΠΏΠΎΡ‚ΠΎΠΌ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ ΠΈΡ… Π½Π° страницС.

ΠžΠ±Ρ‹Ρ‡Π½ΠΎ Ρ‚Π°ΠΊΠΎΠΉ сайт быстрСС загруТаСтся, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π΅ΠΌΡƒ Π½ΡƒΠΆΠ½ΠΎ ΡΠΊΠ°Ρ‡Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅, Π° Π½Π΅ всю страницу. Π’Π°ΠΊΠΆΠ΅ Ρ‡Π°ΡΡ‚ΡŒ ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π·Π°ΠΊΠ΅ΡˆΠΈΡ€ΠΎΠ²Π°Π½Π°, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π° Π·Π°Ρ€Π°Π½Π΅Π΅. Π’ этом случаС ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΡ‚ΠΈ ΠΌΠ³Π½ΠΎΠ²Π΅Π½Π½ΠΎ.

SPA ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚-ΠΌΠ°Π³Π°Π·ΠΈΠ½ΠΎΠ²: ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°ΠΆΠ°Ρ‚ΡŒ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡƒ Β«Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π² ΠΊΠΎΡ€Π·ΠΈΠ½ΡƒΒ» ΠΈ Ρ‚ΡƒΡ‚ ΠΆΠ΅ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ΡŒ ΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ‚ΠΎΠ²Π°Ρ€Ρ‹. Но ΠΈ для ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ… Π±Π»ΠΎΠ³ΠΎΠ² такая тСхнология Π²ΠΏΠΎΠ»Π½Π΅ умСстна.

Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈ Π·Π° час. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ с ΠΏΠΎΠ»Π½Ρ‹ΠΌ ΠΊΠΎΠ΄ΠΎΠΌ прилоТСния.

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ spa ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ spa ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ spa ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ spa ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ spa ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅

ΠŸΠΈΡˆΠ΅Ρ‚ ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ, Π² свободноС врСмя создаСт ΠΈΠ³Ρ€Ρ‹. ΠœΠ΅Ρ‡Ρ‚Π°Π΅Ρ‚ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ свою ΡΡ‚ΡƒΠ΄ΠΈΡŽ ΠΈ Π²Ρ‹ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ Π»Π°ΠΌΠΏΠΎΠ²Ρ‹Π΅ RPG.

Каким Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ SPA

Π§Ρ‚ΠΎΠ±Ρ‹ SPA Π±Ρ‹Π»ΠΎ ΡƒΠ΄ΠΎΠ±Π½ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ, Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ Π²Ρ‹ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΠΎΠ±ΠΌΠ΅Π½ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ с сСрвСром. Π’ΠΎΡ‚ нСсколько Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΉ.

Π­Ρ‚ΠΎ нСбольшой список, Π½ΠΎ ΠΎΠ½ ΠΎΡ‡Π΅Π½ΡŒ Π²Π°ΠΆΠ΅Π½, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΈΠ½Π°Ρ‡Π΅ вашС SPA станСт ΠΌΠ΅Π½Π΅Π΅ ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΌ, Ρ‡Π΅ΠΌ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ сайт.

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

SPA β€” Π½Π΅ сСрСбряная пуля, ΠΈΠ»ΠΈ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΊ web-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅. Π§Π°ΡΡ‚ΡŒ 1

Π˜Ρ‚Π°ΠΊ, newDHTML β€” Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π½Ρ‹ΠΉ ΡΡ‚ΠΈΠ»ΡŒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ web ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, это Π½Π΅ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ ΠΈΠ»ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°. ИдСя Π²ΠΎΠ·Π½ΠΈΠΊΠ»Π° ΠΊΠ°ΠΊ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π° SPA ΠΏΠΎ ряду ΠΏΡ€ΠΈΡ‡ΠΈΠ½, ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Ρ… Π½ΠΈΠΆΠ΅.

Single page application Π½Π΅ΠΏΠ»ΠΎΡ…ΠΎΠΉ способ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ, Π½ΠΎ ΠΎΠ½ ΠΈΠΌΠ΅Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ минусы:

1.Бильно услоТняСт front-end Ρ‡Π°ΡΡ‚ΡŒ прилоТСния. ΠšΡ€ΠΎΠΌΠ΅ html ΠΈ Π»ΠΎΠ³ΠΈΠΊΠΈ UI Ρ‚ΡƒΡ‚ Π΅Ρ‰Π΅ ΠΈ Ρ€ΠΎΡƒΡ‚Π΅Ρ€Ρ‹, MVC ΠΈ ΠΏΡ€ΠΎΡ‡ΠΈΠ΅ сладости.
2.Π’Π°ΠΊ ΠΊΠ°ΠΊ Ρƒ прилоТСния ΠΎΠ΄Π½Π° Ρ‚ΠΎΡ‡ΠΊΠ° Π²Ρ…ΠΎΠ΄Π°, сущСствуСт риск Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ΄Π½Π° ошибка ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ Π½Π΅Ρ€Π°Π±ΠΎΡ‡Π΅ΠΌΡƒ ΡΠΎΡΡ‚ΠΎΡΠ½ΠΈΡŽ всСго прилоТСния.
3. Π”ΡƒΠ±Π»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ€ΠΎΡƒΡ‚Π΅Ρ€ΠΎΠ² (ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с классичСским ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΎΠΌ)
4. SEO

MVC-Π»ΠΎΠ³ΠΈΠΊΠ° остаСтся Π½Π° сСрвСрной части. ΠšΠ»ΡŽΡ‡Π΅Π²Π°Ρ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ View Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΡΡ‚Π°Ρ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ страницу, Π° вся динамичСская Ρ‡Π°ΡΡ‚ΡŒ собираСтся javascript-ΠΎΠΌ Π½Π° сторонС ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°.

API-эквивалСнт web-прилоТСния

РСсурсGETPOSTPUTDELETE
/booksсписок всСх книгновая ΠΊΠ½ΠΈΠ³Π°ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ всСх ΠΊΠ½ΠΈΠ³ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ всСх ΠΊΠ½ΠΈΠ³
/books/1ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ ΠΊΠ½ΠΈΠ³ΡƒΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΠΊΠ½ΠΈΠ³ΠΈΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΊΠ½ΠΈΠ³ΠΈ
/books-indexΠ²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΡΡ‚Π°Ρ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ страницу html

Π ΠΎΡƒΡ‚Π΅Ρ€Ρ‹ с суффиксом «-index» Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ ΡΡ‚Π°Ρ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ вСрстку. Π—Π°Ρ‚Π΅ΠΌ Π½Π° этой страницС ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ΡΡ рСсурсы (css,js скрипты ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅). Π”Π°Π»Π΅Π΅ js-ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ ΠΏΠΎΠ΄Π³Ρ€ΡƒΠΆΠ°ΡŽΡ‚ динамичСскиС Π΄Π°Π½Π½Ρ‹Π΅ Ρ‡Π΅Ρ€Π΅Π· REST API ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π²ΠΈΠ΄ΠΈΡ‚ ΠΎΠΊΠΎΠ½Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚.

API Π΅ΡΡ‚ΡŒ Π²Π΅Π± ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π· написав ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π²Ρ‹ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚Π΅ API.

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΌΡ‹ ΠΈΠΌΠ΅Π΅ΠΌ Π²Π΅Π± ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰Π΅Π΅ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Ρ‡Π΅Ρ€Π΅Π· API, Π½ΠΎ ΠΎΠ½ΠΎ многостраничноС ΠΈ лишСно Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… нСдостатков SPA:

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

Π€Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ-нСзависимоС Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π½ΠΎΠ΅ SPA

1. Но. Π·Π°Ρ‡Π΅ΠΌ?

БущСствуСт ΠΎΠ³Ρ€ΠΎΠΌΠ½ΠΎΠ΅ количСство Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΎΠ² для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ SPA (Single Page Application).

БущСствуСт ΠΎΠ³Ρ€ΠΎΠΌΠ½ΠΎΠ΅ количСство Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ, ΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΡƒΡŽΡ‰Π΅ΠΉ ΠΊΠ°ΠΊ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° Π±Π°Π·Π΅ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠ°.

Однако всякая подобная докумСнтация ставит Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ Π²ΠΎ Π³Π»Π°Π²Ρƒ ΡƒΠ³Π»Π°. Π’Π΅ΠΌ самым прСвращая Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ ΠΈΠ· Π΄Π΅Ρ‚Π°Π»ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰ΠΈΠΉ Ρ„Π°ΠΊΡ‚ΠΎΡ€. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ Ρ‡Π°ΡΡ‚ΡŒ ΠΊΠΎΠ΄Π° ΠΏΠΈΡˆΠ΅Ρ‚ΡΡ Π½Π΅ для удовлСтворСния Π½ΡƒΠΆΠ΄ бизнСса Π° для удовлСтворСния Π½ΡƒΠΆΠ΄ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠ°.

Учитывая насколько hype-driven являСтся Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° софта Π² нашС врСмя, ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ ΡƒΠ²Π΅Ρ€Π΅Π½Π½Ρ‹ΠΌ Π² Ρ‚ΠΎΠΌ Ρ‡Ρ‚ΠΎ Ρ‡Π΅Ρ€Π΅Π· нСсколько Π»Π΅Ρ‚ Π±ΡƒΠ΄ΡƒΡ‚ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅ ΠΌΠΎΠ΄Π½Ρ‹Π΅ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΈ для Ρ„Ρ€ΠΎΠ½Ρ‚Π΅Π½Π΄ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ. Π’ ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΊΠΎΠ³Π΄Π° Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ Π½Π° Π±Π°Π·Π΅ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ построСно ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΈΠ· ΠΌΠΎΠ΄Ρ‹ β€” Π²Ρ‹ Π²Ρ‹Π½ΡƒΠΆΠ΄Π΅Π½Ρ‹ Π»ΠΈΠ±ΠΎ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΡƒΡŽ (legacy) ΠΊΠΎΠ΄ΠΎΠ²ΡƒΡŽ Π±Π°Π·Ρƒ Π»ΠΈΠ±ΠΎ ΡΡ‚Π°Ρ€Ρ‚ΠΎΠ²Π°Ρ‚ΡŒ процСсс ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° прилоТСния Π½Π° Π½ΠΎΠ²Ρ‹ΠΉ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ.

Оба Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° сопряТСны с ΡƒΡ‰Π΅Ρ€Π±ΠΎΠΌ для бизнСса. ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠ΅ΠΉ ΠΊΠΎΠ΄ΠΎΠ²ΠΎΠΉ Π±Π°Π·Ρ‹ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с Π½Π°ΠΉΠΌΠΎΠΌ Π½ΠΎΠ²Ρ‹Ρ… ΠΈ ΠΌΠΎΡ‚ΠΈΠ²Π°Ρ†ΠΈΠ΅ΠΉ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΡ… Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ². ΠŸΠ΅Ρ€Π΅Π²ΠΎΠ΄ прилоТСния Π½Π° Π½ΠΎΠ²Ρ‹ΠΉ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ стоит Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ (слСдствСнно β€” Π΄Π΅Π½Π΅Π³) Π½ΠΎ Π½Π΅ нСсСт Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ ΠΏΠΎΠ»ΡŒΠ·Ρ‹ для бизнСса.

Данная ΡΡ‚Π°Ρ‚ΡŒΡ являСтся ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ построСния SPA с использованиСм высокоуровнСвых ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΎΠ² Π΄ΠΈΠ·Π°ΠΉΠ½Π° Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹. ΠŸΡ€ΠΈ этом ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΈ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΈ Π²Ρ‹Π±ΠΈΡ€Π°ΡŽΡ‚ΡΡ для удовлСтворСния отвСтствСнностСй, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹Ρ… ΠΆΠ΅Π»Π°Π΅ΠΌΠΎΠΉ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€ΠΎΠΉ.

2. АрхитСктурныС Ρ†Π΅Π»ΠΈ ΠΈ ограничСния

Π¦Π΅Π»ΠΈ:

Новый Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ½ΡΡ‚ΡŒ Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ прилоТСния ΠΏΡ€ΠΈ повСрхностном взглядС Π½Π° структуру ΠΊΠΎΠ΄Π°.

БтимулируСтся Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ отвСтствСнностСй (separation of concerns) ΠΈ ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΊΠΎΠ΄Π° Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ:

ΠœΠΎΠ΄ΡƒΠ»ΠΈ Π»Π΅Π³ΠΊΠΎ ΠΏΠΎΠ΄Π΄Π°ΡŽΡ‚ΡΡ Ρ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ

Π˜Π½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ с внСшними сСрвисами (boundaries) Π° Ρ‚Π°ΠΊΠΆΠ΅ грязныС Ρ…Π°ΠΊΠΈ ΠΈ воркэраунды вынСсСны Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ ΠΈ Π½Π΅ протянуты Ρ‡Π΅Ρ€Π΅Π· нСсколько Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ². Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ смСна Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ с сСрвисом ΠΈΠ»ΠΈ ΠΎΡ‚ΠΊΠ°Π· ΠΎΡ‚ Ρ…Π°ΠΊΠ° становится рСалистичной Π·Π°Π΄Π°Ρ‡Π΅ΠΉ Π° Π½Π΅ «долгосрочным Ρ€Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³ΠΎΠΌΒ»

ЛогичСски связанныС Π²Π΅Ρ‰ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½Ρ‹ Π½Π΅Π΄Π°Π»Π΅ΠΊΠΎ Π΄Ρ€ΡƒΠ³ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³Π° Π² структурС Ρ„Π°ΠΉΠ»ΠΎΠ². Π’ΠΎΡ‚ Ρ…ΠΎΡ€ΠΎΡˆΠ°Ρ ΡΡ‚Π°Ρ‚ΡŒΡ, которая ΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ Ρ€Π°Π·Π½ΠΈΡ†Ρƒ ΠΌΠ΅ΠΆΠ΄Ρƒ структурированиСм ΠΊΠΎΠ΄Π° ΠΏΠΎ тСхничСским слоям ΠΈ ΠΏΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΌ отвСтствСнностям.

ΠŸΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ‚ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΠ»Π°Π±ΡƒΡŽ ΡΠ²ΡΠ·Π½ΠΎΡΡ‚ΡŒ ΠΌΠ΅ΠΆΠ΄Ρƒ модулями. Как слСдствиС ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ модуля (ΠΈΠ»ΠΈ Π΅Π³ΠΎ Π·Π°ΠΌΠ΅Π½Π°) Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΊ измСнСнию ΠΊΠΎΠ΄Π°, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰Π΅Π³ΠΎ Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ.

ΠœΠ΅Ρ…Π°Π½ΠΈΠΊΠΈ взаимодСйствия ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ Π½Π΅ приводят ΠΊ нСдопустимым ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°ΠΌ с ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ.

Зависимости ΠΎΡ‚ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ Π½Π΅ Ρ‚ΠΎΡ€Ρ‡Π°Ρ‚ сквозь всю ΠΊΠΎΠ΄ΠΎΠ²ΡƒΡŽ Π±Π°Π·Ρƒ. Они ΡƒΠ΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΠΎΠ³ΠΎ числа ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ, отвСтствСнных Π·Π° ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡŽ с ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ.

ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΡ:

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ написано с использованиСм (ΠΈΠ»ΠΈ скомпилировано Π²) HTML+CSS для опрСдСлСния статичСского интСрфСйса ΠΈ JavaScript для добавлСния динамичСского повСдСния.

3. ΠžΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠΌ Ρ‚Π΅ΠΌΡƒ Π΄Π°Π½Π½ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠΈ

БущСствуСт большоС количСство Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π½Ρ‹Ρ… ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΎΠ² ΠΊ ΡΡ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ ΠΊΠΎΠ΄Π°. НаиболСС распространСнныС Π½Π° Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚: слоСная (layered), луковичная (onion) ΠΈ ΡˆΠ΅ΡΡ‚ΠΈΠ³Ρ€Π°Π½Π½Π°Ρ (hexagonal). Π‘Π΅Π³Π»ΠΎΠ΅ сравнСниС Π±Ρ‹Π»ΠΎ Π΄Π°Π½ΠΎ Π² ΠΌΠΎΠ΅ΠΉ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅.

Данная ΡΡ‚Π°Ρ‚ΡŒΡ ограничиваСтся слоСм прСдставлСния Π² Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΠ»ΠΎΠ³ΠΈΠΈ слоСной/Π»ΡƒΠΊΠΎΠ²ΠΈΡ‡Π½ΠΎΠΉ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€ ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ SPA занимаСтся ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ Π΄Π°Π½Π½Ρ‹Ρ…. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ слои Π΄ΠΎΠΌΠ΅Π½Π° (domain) ΠΈ прилоТСния (application) ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹. Как слСдствиС, Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ СстСствСнный способ ΠΏΠΎΠ½ΡΡ‚ΡŒ Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ‚Π°ΠΊΠΎΠ³ΠΎ прилоТСния β€” ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΎΠ±Π·ΠΎΡ€Π½ΠΎΠ΅ прСдставлСниС ΠΎ слоС прСдставлСния.

Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ данная ΡΡ‚Π°Ρ‚ΡŒΡ опрСдСляСт ΠΌΠ΅Ρ…Π°Π½ΠΈΠΊΠΈ взаимодСйствия со слоями прилоТСния ΠΈ Π΄ΠΎΠΌΠ΅Π½Π°, Π² случаС ΠΊΠΎΠ³Π΄Π° Ρ‚Π°ΠΊΠΈΠ΅ слои ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚.

Π˜Π½Ρ‚Π΅Ρ€Π΅ΡΠ½ΠΎ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ Ρ‡Ρ‚ΠΎ Π² случаС отсутствия Π²Ρ‹ΡˆΠ΅ΡƒΠΏΠΎΠΌΡΠ½ΡƒΡ‚Ρ‹Ρ… слоСв ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ‚ ΠΊΠ»Π°ΡΡΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ΡˆΠ΅ΡΡ‚ΠΈΠ³Ρ€Π°Π½Π½ΡƒΡŽ структуру (Ρ‚Π°ΠΊΠΆΠ΅ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡƒΡŽ Ports and Adapters) Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ прСдставлСниС являСтся ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ. ВзглянитС Π½Π° ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡŽ с localStorage Π² TodoMVC ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ созданном Π² качСствС ΠΈΠ»Π»ΡŽΡΡ‚Ρ€Π°Ρ†ΠΈΠΈ ΠΊ Π΄Π°Π½Π½ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅ (ΠΏΠ°ΠΏΠΊΠ° boundaries/local-storage).

4. Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° Ρ„Π°ΠΉΠ»ΠΎΠ². Как Π·Π°ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ SPA ΠΊΡ€ΠΈΡ‡Π°Ρ‚ΡŒ?

Рассмотрим Ρ‚ΠΈΠΏΠΈΡ‡Π½Ρ‹ΠΉ ΠΎΠ½Π»Π°ΠΉΠ½ ΠΌΠ°Π³Π°Π·ΠΈΠ½. ΠŸΡ€ΠΈΠ±Π»ΠΈΠ·ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ‚Π°ΠΊ ΠΎΠ½ ΠΌΠΎΠ³ Π±Ρ‹ Π±Ρ‹Ρ‚ΡŒ нарисован Π½Π° салфСткС Π²Π»Π°Π΄Π΅Π»ΡŒΡ†Π΅ΠΌ бизнСса:

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ spa ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ spa ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ spa ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ spa ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ spa ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅

Рисунок 1: Ρ‚ΠΈΠΏΠΈΡ‡Π½Ρ‹ΠΉ ΠΎΠ½Π»Π°ΠΉΠ½ ΠΌΠ°Π³Π°Π·ΠΈΠ½, нарисованный Π½Π° салфСткС

Каким ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΊΡ€ΠΈΡ‡Π°Ρ‰ΠΈΠΉ способ ΡΡ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ΠΎΠ²ΡƒΡŽ Π±Π°Π·Ρƒ? На рисункС 2 всС страницы ΠΎΡ‚Ρ€Π°ΠΆΠ΅Π½Ρ‹ ΠΊΠ°ΠΊ ΠΏΠ°ΠΏΠΊΠΈ.

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ spa ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ spa ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ spa ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ spa ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ spa ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅

Рисунок 2: структура ΠΏΠ°ΠΏΠΎΠΊ Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ уровня, ΠΎΡ‚Ρ€Π°ΠΆΠ°ΡŽΡ‰Π°Ρ страницы ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹Π΅ Π½Π° рисункС 1

Π—Π°ΠΌΠ΅Ρ‚ΠΈΠΌ Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ ΠΏΠ°ΠΏΠΊΡƒ β€˜shared’ ΠΊΠ°ΠΊ мСсто Π³Π΄Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ ΠΎΠ±Ρ‰ΠΈΠ΅ UI Π±Π»ΠΎΠΊΠΈ, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ шаблон, панСль Π½Π°Π²ΠΈΠ³Π°Ρ†ΠΈΠΈ, ΠΊΠΎΡ€Π·ΠΈΠ½Π°.

Наши страницы построСны ΠΈΠ· логичСских (ΠΈ Π²ΠΈΠ΄ΠΈΠΌΡ‹Ρ…) частСй. Пока Ρ‡Ρ‚ΠΎ Π½Π°Π·ΠΎΠ²Π΅ΠΌ ΠΈΡ… β€˜Π±Π»ΠΎΠΊΠ°ΠΌΠΈβ€™ ΠΈ ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ Π² ΠΏΠ°ΠΏΠΊΡƒ с ΠΈΠΌΠ΅Π½Π΅ΠΌ β€˜parts’. ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΠΌ Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΎΡΡŒ (рисунок 3).

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ spa ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ spa ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ spa ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ spa ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ spa ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅

Рисунок 3: Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… Π±Π»ΠΎΠΊΠΎΠ² Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΏΠΎΠ΄ΠΏΠ°ΠΏΠΊΠΈ β€˜parts’

Как Π²ΠΈΠ΄Π½ΠΎ, Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΡΡ‚ΡŒ выглядит ΠΎΡ‚Π²Ρ€Π°Ρ‚ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΠΆΠ΅ для Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ уровня для страницы ’goods catalogue’. ΠŸΡƒΡ‚ΡŒ β€˜goods-catalogue/parts/goods-list/parts/good-details.js’ ΡƒΠΆΠ΅ Π½Π° Π³Ρ€Π°Π½ΠΈΡ†Π΅ Π°Π΄Π΅ΠΊΠ²Π°Ρ‚Π½ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ‹ ΠΏΡƒΡ‚ΠΈ ΠΊ Ρ„Π°ΠΉΠ»Ρƒ. ΠŸΡ€ΠΈ Ρ‚ΠΎΠΌ Ρ‡Ρ‚ΠΎ Π² Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Ρ… прилоТСниях Π΄Π²Π° уровня влоТСнности β€” Π΄Π°Π»Π΅ΠΊΠΎ Π½Π΅ ΠΏΡ€Π΅Π΄Π΅Π».

Π”Π°Π²Π°ΠΉΡ‚Π΅ избавимся ΠΎΡ‚ ΠΏΠ°ΠΏΠΎΠΊ Β«partsΒ» Π² Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ структурС. ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΠΌ Π½Π° рисунок 4.

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ spa ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ spa ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ spa ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ spa ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ spa ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅

Рисунок 4: Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ Π±Π»ΠΎΠΊΠΈ вынСсСны ΠΈΠ· ΠΏΠ°ΠΏΠΎΠΊ β€˜parts’

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΏΡƒΡ‚ΠΈ β€˜goods-catalogue/goods-list’ находится Ρ‚Ρ€ΠΈ Ρ„Π°ΠΉΠ»Π°. goods-list.js (Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ) β€” располоТСн ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰ΠΈΠΌΠΈ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ Π² Π½Π΅Π³ΠΎ Π±Π»ΠΎΠΊΠΈ. Π’ Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ…, учитывая ΠΊΠΎΠ»-Π²ΠΎ Ρ€Π°Π·Π½ΠΎΡ€ΠΎΠ΄Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² (js, html, css) это ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ нСвозмоТности Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰ΠΈΠ΅ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ Π±Π»ΠΎΠΊ ΠΈ Ρ„Π°ΠΉΠ»Ρ‹, ΠΎΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‰ΠΈΠΌΠΈ Π·Π° Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ Π² Π½Π΅Π³ΠΎ Π±Π»ΠΎΠΊΠΈ.

Если ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ Π±Π»ΠΎΠΊ опрСдСляСтся нСсколькими Ρ„Π°ΠΉΠ»Π°ΠΌ β€” создаСм для Π½Π΅Π³ΠΎ ΠΏΠ°ΠΏΠΊΡƒ.

goods-list являСтся Π±Π»ΠΎΠΊΠΎΠΌ ΠΈ состоит ΠΈΠ· Π±ΠΎΠ»Π΅Π΅ Ρ‡Π΅ΠΌ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°, ΠΏΠΎΡ‚ΠΎΠΌΡƒ для Π½Π΅Π³ΠΎ создана ΠΏΠ°ΠΏΠΊΠ°.

filters являСтся Π±Π»ΠΎΠΊΠΎΠΌ состоящим ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°, ΠΏΠΎΡ‚ΠΎΠΌΡƒ для Π½Π΅Π³ΠΎ Π½Π΅ создана ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Π°Ρ ΠΏΠ°ΠΏΠΊΠ°.

Если ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ Π±Π»ΠΎΠΊ (Π½Π΅Π²Π°ΠΆΠ½ΠΎ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° ΠΈΠ»ΠΈ ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ…) являСтся Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΌ Π±Π»ΠΎΠΊΠΎΠΌ β€” Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΠΊ названию Ρ„Π°ΠΉΠ»Π° прСфикс Β«_Β». Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ всС Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ Π±Π»ΠΎΠΊΠΈ Π±ΡƒΠ΄ΡƒΡ‚ подняты ΠΊ Π²Π΅Ρ€Ρ…Ρƒ ΠΏΠ°ΠΏΠΊΠΈ Π² Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΌ ΠΎΠ±ΠΎΠ·Ρ€Π΅Π²Π°Ρ‚Π΅Π»Π΅.

_goods-list folder являСтся Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΌ Π±Π»ΠΎΠΊΠΎΠΌ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ goods-catalogue соотвСтствСнно ΠΊ названию ΠΏΠ°ΠΏΠΊΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ прСфикс.

goods-list.js являСтся Ρ‡Π°ΡΡ‚ΡŒΡŽ опрСдСлСния Π±Π»ΠΎΠΊΠ° _goods-list соотвСтствСнно прСфикс Π½Π΅ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½.

_good-details.js являСтся Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΌ Π±Π»ΠΎΠΊΠΎΠΌ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ _goods-list соотвСтствСнно прСфикс Π΄ΠΎΠ±Π°Π²Π»Π΅Π½.

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ spa ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ spa ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ spa ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ spa ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ spa ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅

Рисунок 5: использованиС прСфикса Β«_Β» для раздСлСния Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… Π±Π»ΠΎΠΊΠΎΠ² ΠΎΡ‚ ΠΈΡ… Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»Π΅ΠΉ

Π“ΠΎΡ‚ΠΎΠ²ΠΎ! Π’Π΅ΠΏΠ΅Ρ€ΡŒ открывая ΠΏΠ°ΠΏΠΊΡƒ с Π±Π»ΠΎΠΊΠΎΠΌ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ сразу ΠΆΠ΅ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ ΠΈ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ основной Ρ„Π°ΠΉΠ», ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰ΠΈΠΉ Π΄Π°Π½Π½Ρ‹ΠΉ Π±Π»ΠΎΠΊ. ПослС Ρ‡Π΅Π³ΠΎ ΠΏΡ€ΠΈ нСобходимости ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ ΠΊ Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠΌΡƒ Π±Π»ΠΎΠΊΡƒ. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Ρ‡Ρ‚ΠΎ ΠΏΠ°ΠΏΠΊΠ° pages Π±Ρ‹Π»Π° ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π° Π² components Π½Π° рисункС 5. Π’Π°ΠΊ сдСлано ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ страницы ΠΈ Π±Π»ΠΎΠΊΠΈ логичСски ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ Π²Π΅Ρ‰Π°ΠΌΠΈ Π½ΠΎ Π² Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΠ»ΠΎΠ³ΠΈΠΈ HTML ΠΈ Ρ‚ΠΎ ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹ прСдставлСно ΠΊΠ°ΠΊ component. Π‘ этого ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° ΠΏΠ°ΠΏΠΊΠ° components являСтся основной ΠΏΠ°ΠΏΠΊΠΎΠΉ нашСго прилоТСния, Β«Π΄ΠΎΠΌΠΎΠΌΒ» для слоя прСдставлСния.

5. Π―Π·Ρ‹ΠΊ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ. JavaScript?

ЕдинствСнный язык ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅ это JavaScript. БущСствуСт мноТСство статСй посвящСнных Π΅Π³ΠΎ нСсуразности. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΡΠΌΠ΅ΡΡ‚ΡŒΡΡ ΠΎ Π½Π΅ΠΌ (Ρ‚Π°ΠΉΠΌ ΠΊΠΎΠ΄ 1-20), Π½ΠΎ это Ρ‚ΠΎΠ»ΡŒΠΊΠΎ вСсСлая Ρ‡Π°ΡΡ‚ΡŒ.

Π’Π°ΠΆΠ½Π΅Π΅ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π½ΠΎΠ²Ρ‹Π΅ возмоТности постоянно Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ΡΡ ΠΊ языку. БпСцификация обновляСтся ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Π³ΠΎΠ΄. Новый Ρ„ΠΈΡ‡ΠΈ проходят 4-этапный процСсс Ρ€Π΅Π²ΡŒΡŽ ΠΏΠ΅Ρ€Π΅Π΄ Ρ‚Π΅ΠΌ ΠΊΠ°ΠΊ ΠΏΠΎΠΏΠ°ΡΡ‚ΡŒ Π² ΡΠΏΠ΅Ρ†ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡŽ. Однако Π·Π°Ρ‡Π°ΡΡ‚ΡƒΡŽ, ΠΎΠ½ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‚ΡΡ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π°ΠΌΠΈ Π΅Ρ‰Ρ‘ Π΄ΠΎ прохоТдСния Ρ‡Π΅Ρ€Π΅Π· всС 4 этапа. И довольно часто сообщСство ΠΈ Π°Π²Ρ‚ΠΎΡ€Ρ‹ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ Ρ„ΠΈΡ‡ΠΈ Π΄ΠΎ Ρ‚ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ ΠΏΠΎΠΏΠ°Π΄Π°ΡŽΡ‚ Π² ΡΠΏΠ΅Ρ†ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡŽ. К ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€Ρ‹ стали ΡˆΠΈΡ€ΠΎΠΊΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ Π² 2015 Π³ΠΎΠ΄Ρƒ, Π½ΠΎ Π΄ΠΎ сих ΠΏΠΎΡ€ Π½Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ‡Π°ΡΡ‚ΡŒΡŽ спСцификации. Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, Π·Π°Ρ‡Π°ΡΡ‚ΡƒΡŽ бизнСс Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ работоспособности прилоТСния Π² ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΡ… Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π°Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π°ΠΏΡ€ΠΈΠΎΡ€ΠΈ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ Π½ΠΎΠ²Ρ‹Ρ… языковых возмоТностСй.

ΠŸΠΎΡ‚ΠΎΠΌΡƒ Π΄Π°ΠΆΠ΅ ΠΏΡ€ΠΈ использовании чистого JavaScript Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Π²Ρ‹Π½ΡƒΠΆΠ΄Π΅Π½ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ транспилятор (babel) с Ρ‚Π΅ΠΌ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ JavaScript, совмСстимый с Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π°ΠΌΠΈ ΠΈΠ· «соврСмСнного ΠΈ ΠΌΠΎΠ΄Π½ΠΎΠ³ΠΎΒ» JavaScript. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ использованиС транспилятора ΠΈ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ Π·Π°ΠΌΠ΅Π΄Π»Π΅Π½ΠΈΠ΅ сборки прилоТСния Π½Π΅ΠΈΠ·Π±Π΅ΠΆΠ½ΠΎ β€” Π½Π΅Ρ‚ ΠΏΡ€ΠΈΡ‡ΠΈΠ½ ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠ΅, Π±ΠΎΠ»Π΅Π΅ прСдсказуСмыС ΠΈ Π±ΠΎΠ»Π΅Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ языки программирования.

Π“Π»ΡƒΠ±ΠΎΠΊΠΈΠΉ Π°Π½Π°Π»ΠΈΠ· Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… ΠΎΠΏΡ†ΠΈΠΉ Π»Π΅ΠΆΠΈΡ‚ Π²Π½Π΅ Π³Ρ€Π°Π½ΠΈΡ† Π΄Π°Π½Π½ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠΈ, Π½ΠΎ ΠΌΠΎΠΉ ΠΏΠ΅Ρ€ΡΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ Π²Ρ‹Π±ΠΎΡ€ β€” TypeScript ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½:

ΠžΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°Π΅Ρ‚ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ Ρ‚ΠΈΠΏΠΎΠ² Π½Π° этапС компиляции

Π‘ΡƒΠ΄ΡƒΡ‡ΠΈ Π½Π°Π΄-мноТСством JavaScript, ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ JavaScript ΠΊΠΎΠ΄ Π±Π΅Π· Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡ Ρ‚ΠΈΠΏΠΎΠ² (typings) ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ ΠΏΠΎΠ²Π΅Ρ€Ρ… ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ JavaScript ΠΊΠΎΠ΄Π° Π±Π΅Π· Π΅Π³ΠΎ измСнСния. Благодаря простотС этой возмоТности, Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… npm ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² ΡƒΠΆΠ΅ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚Ρ‹ Ρ‚Π°ΠΉΠΏΠΈΠ½Π³Π°ΠΌΠΈ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ эти ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ Π±ΡƒΠ΄Ρ‚ΠΎ Π±Ρ‹ ΠΎΠ½ΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ TypeScript ΠΏΠ°ΠΊΠ΅Ρ‚Π°ΠΌΠΈ. БоотвСтствСнно ΠΈΡ… использованиС Ρ‚Π°ΠΊΠΆΠ΅ являСтся Ρ‚ΠΈΠΏΠΎ-бСзопасным.

6. ВрСбования ΠΊ Π΄ΠΈΠ·Π°ΠΉΠ½Ρƒ прилоТСния

Π”Π°Π²Π°ΠΉΡ‚Π΅ вспомним ограничСния, Π½Π°ΠΊΠ»Π°Π΄Ρ‹Π²Π°Π΅ΠΌΡ‹Π΅ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π°ΠΌΠΈ: HTML, CSS, JavaScript. Π’Π°ΠΊΠΆΠ΅ вспомним структуру Ρ„Π°ΠΉΠ»ΠΎΠ², ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΡƒΡŽ Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ 4: Π΄Π΅Ρ€Π΅Π²ΠΎ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΉ, ΠΎΡ‚Ρ€Π°ΠΆΠ°ΡŽΡ‰Π΅Π΅ Π΄Π΅Ρ€Π΅Π²ΠΎ Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… элСмСнтов.

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΏΠ΅Ρ€Π²ΠΎΠΉ Ρ†Π΅Π»ΡŒΡŽ [6.1] Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ опрСдСлСния ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² срСдствами HTML ΠΈ CSS ΠΈ ΠΈΡ… ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ ΠΏΠ΅Ρ€Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌΠΈ.

БущСствСнный нСдостаток чистого HTML состоит Π² Ρ‚ΠΎΠΌ Ρ‡Ρ‚ΠΎ ΠΎΠ½ Π½Π΅ Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½. БущСствуСт достаточноС количСство Π΄Π²ΠΈΠΆΠΊΠΎΠ² ΡˆΠ°Π±Π»ΠΎΠ½ΠΈΠ·Π°Ρ†ΠΈΠΈ, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ underscore.js, handlebars.js. Однако всС ΠΎΠ½ΠΈ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‚ Π½Π° Π²Ρ…ΠΎΠ΄ строки, Ρ‡Ρ‚ΠΎ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ нас Π² ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ΅ коррСктности ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… Π² шаблонС Π΄Π°Π½Π½Ρ‹Ρ… Π½Π° этапС компиляции прилоТСния.

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Π²Ρ‚ΠΎΡ€ΠΎΠΉ Ρ†Π΅Π»ΡŒΡŽ [6.2] являСтся Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ TypeScript интСрфСйсы ΠΎΡ‚Ρ€Π°ΠΆΠ°ΡŽΡ‰ΠΈΠ΅ всС свойства, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ Π² шаблонС (ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π΅). ПослС Ρ‡Π΅Π³ΠΎ Π½Π° этапС компиляции Π²Ρ‹Π±Ρ€ΠΎΡΠΈΡ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π² случаС Ссли Π² Ρ€Π°Π·ΠΌΠ΅Ρ‚ΠΊΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° происходит ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌΡƒ свойству.

ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ UI элСмСнт ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ ΠΏΠΎ Ρ€Π°Π·Π½ΠΎΠΌΡƒ Π² зависимости ΠΎΡ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½Ρ‹Ρ… Π΅ΠΌΡƒ Π΄Π°Π½Π½Ρ‹Ρ…. HTML элСмСнты ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‚ Π΄Π°Π½Π½Ρ‹Π΅ Π² Π²ΠΈΠ΄Π΅ HTML Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ². Π­Ρ‚ΠΎΠ³ΠΎ достаточно для статичСской Ρ€Π°Π·ΠΌΠ΅Ρ‚ΠΊΠΈ. Для динамичСски измСняСмой Ρ€Π°Π·ΠΌΠ΅Ρ‚ΠΊΠΈ Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° для Π΄Π°Π½Π½Ρ‹Ρ…. Π’ этих Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π°Ρ… Π΄Π°Π½Π½Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ Π² зависимости ΠΎΡ‚ дСйствий ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Π½Π° страницС. Π’ Ρ‚ΠΎ ΠΆΠ΅ врСмя, ΠΌΡ‹ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠΎΡ‚Π΅Ρ€ΡΡ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Π² ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Π² Π²ΠΈΠ΄Π΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ².

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅ΠΉ Ρ†Π΅Π»ΡŒΡŽ [6.3] являСтся Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² ΠΈ ΠΈΠ· Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ. ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ пСрСрисованы ΠΏΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ любой части ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅ΠΌΡ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ….

Π§Π΅Ρ‚Π²Π΅Ρ€Ρ‚ΠΎΠΉ Ρ†Π΅Π»ΡŒΡŽ [6.4] станСт ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ ΠΊ Ρ‚Π°ΠΊΠΈΠΌ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π°ΠΌ:

Π”ΠΎΠ»ΠΆΠ½Π° ΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ нСсколькими ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌΠΈ, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ лишь Ρ‡Π°ΡΡ‚ΡŒ ΠΎΠ±Ρ‰Π΅Π³ΠΎ Π½Π°Π±ΠΎΡ€Π° Π΄Π°Π½Π½Ρ‹Ρ….

Π”ΠΎΠ»ΠΆΠ½Π° ΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° вмСстС с ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠΌ. Π­Ρ‚ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ для случая ΠΊΠΎΠ³Π΄Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ экзСмпляры ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° Π°Π²Ρ‚ΠΎΠ½ΠΎΠΌΠ½Ρ‹ Π΄Ρ€ΡƒΠ³ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³Π° ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Π½Π°Π±ΠΎΡ€Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ….

Π₯Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ сСрвисы ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ слоСв Domain ΠΈ Application. Π’ΠΎ ΠΈΠ·Π±Π΅ΠΆΠ°Π½ΠΈΠ΅ сильной связности ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ΠΌ ΠΈ Π³Ρ€Π°Π½ΠΈΡ†Π°ΠΌΠΈ прилоТСния, сСрвисы Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Ρ‹ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° Dependency Injection. Π₯Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡΡΡ‹Π»Π°Ρ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° интСрфСйсы.

И послСднСС β€” ΠΌΡ‹ Π½Π΅ Ρ…ΠΎΡ‚ΠΈΠΌ Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄Π°Π½Π½Ρ‹Π΅ Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰ Π±Ρ‹Π»ΠΈ ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ Π²ΠΎ ΠΈΠ·Π±Π΅ΠΆΠ°Π½ΠΈΠ΅ Π½Π΅ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ измСнСния Π΄Π°Π½Π½Ρ‹Ρ… Π² процСссС Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΠ½Π³Π°. Π₯Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ отвСтствСнны Π·Π° свою Ρ†Π΅Π»ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ. ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ ΠΆΠ΅, Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Π½ΠΈΡ‡Π΅ΠΌ большим Ρ‡Π΅ΠΌ строго-Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅-ΠΈ-ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅-html-ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹. Для достиТСния ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ³ΠΎ раздСлСния Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΠ½ΠΊΠ°ΠΏΡΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Π²Π½ΡƒΡ‚Ρ€ΠΈ сСбя ΠΈ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с этими Π΄Π°Π½Π½Ρ‹ΠΌΠΈ. Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ классичСскими экзСмплярами классов.

Однако, ΠΊΠ°ΠΊ Π·Π°ΠΌΠ΅Ρ‡Π΅Π½ΠΎ Ρ€Π°Π½Π΅Π΅, Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ использовано большим количСством ΠΌΠ΅Π»ΠΊΠΈΡ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ². Π‘Ρ‹Π»ΠΎ Π±Ρ‹ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ срСз Π΄Π°Π½Π½Ρ‹Ρ…, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠΌ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΌΡ‹ достигнСм:

Π›ΡƒΡ‡ΡˆΠ΅ΠΉ читаСмости ΠΊΠΎΠ΄Π°, Ρ‚.ΠΊ. Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚ΡŒ Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° ΠΈΠ· Π½Π°Π±ΠΎΡ€Π° Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅ΠΌΡ‹Ρ… этим ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠΌ.

Π›ΡƒΡ‡ΡˆΠ΅ΠΉ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Ρ‚.ΠΊ. ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ пСрСрисовки ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° Π² случаС измСнСния Π½Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ….

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, пятая Ρ†Π΅Π»ΡŒ [6.5] β€” ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ΡŒ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π°ΠΌ Π΄Π°Π½Π½Ρ‹Ρ… Π±Ρ‹Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌΠΈ ΠΊΠ°ΠΊ классичСскиС TypeScript классы. ΠžΠ±ΠΎΠ·Π½Π°Ρ‡ΠΈΡ‚ΡŒ ΠΌΠ΅Ρ…Π°Π½ΠΈΠΊΡƒ опрСдСлСния срСза Π΄Π°Π½Π½Ρ‹Ρ…, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ³ΠΎ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠΌ.

Π”Π΅Ρ€ΠΆΠ° эти Ρ†Π΅Π»ΠΈ Π² Π³ΠΎΠ»ΠΎΠ²Π΅, Π΄Π°Π²Π°ΠΉΡ‚Π΅ пСрСчислим Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ логичСскиС Π±Π»ΠΎΠΊΠΈ ΠΊΠΎΠ΄Π°:

ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ (Components) β€” строго Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ HTML ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ + CSS стили

МодСли Π²ΠΈΠ΄Π° (ViewModels) β€” классы, ΠΈΠ½ΠΊΠ°ΠΏΡΡƒΠ»ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅ состояниС Π΄Π°Π½Π½Ρ‹Ρ…, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠΌ (ΠΈ всСй ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΠ΅ΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² ΠΏΠΎΠ΄ Π½ΠΈΠΌ).

Ѐасады ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ Π²ΠΈΠ΄Π° (ViewModel facades) β€” ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°ΡŽΡ‚ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ свойств ΠΌΠΎΠ΄Π΅Π»ΠΈ Π²ΠΈΠ΄Π° Ρ‚Π΅ΠΌΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π² ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π΅.

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ spa ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ spa ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ spa ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ spa ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ spa ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅

Рисунок 6: ТСлаСмая структура ΠΊΠΎΠ΄Π° Π² слоС прСдставлСния

НС-ΠΏΡƒΠ½ΠΊΡ‚ΠΈΡ€Π½Ρ‹Π΅ стрСлки ΠΎΡ‚Ρ€Π°ΠΆΠ°ΡŽΡ‚ Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΠ½Π³ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΌΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌΠΈ. НаправлСниС стрСлки ΠΎΡ‚Ρ€Π°ΠΆΠ°Π΅Ρ‚ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ².

ΠŸΡƒΠ½ΠΊΡ‚ΠΈΡ€Π½Ρ‹Π΅ Π»ΠΈΠ½ΠΈΠΈ ΠΎΡ‚Ρ€Π°ΠΆΠ°ΡŽΡ‚ зависимости ΠΎΠ΄Π½ΠΈΡ… логичСских кусков ΠΊΠΎΠ΄Π° ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΡ… (ссылки).

Π‘Π»ΠΎΠΊΠΈ с Π·Π΅Π»Π΅Π½ΠΎΠΉ Ρ€Π°ΠΌΠΊΠΎΠΉ β€” Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ модуля. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ/ΠΏΠΎΠ΄ΠΌΠΎΠ΄ΡƒΠ»ΡŒ ΠΎΡ‚Ρ€Π°ΠΆΠ΅Π½ Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ ΠΏΠΎΠ΄ Π½Π΅Π³ΠΎ ΠΏΠ°ΠΏΠΊΠΎΠΉ. ΠžΠ±Ρ‰ΠΈΠ΅ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ Π»Π΅ΠΆΠ°Ρ‚ Π² ΠΏΠ°ΠΏΠΊΠ΅ Β«sharedΒ».

Π“ΠΎΠ»ΡƒΠ±Ρ‹Π΅ Π±Π»ΠΎΠΊΠΈ β€” ΠΌΠΎΠ΄Π΅Π»ΠΈ Π²ΠΈΠ΄Π°. МодСли Π²ΠΈΠ΄Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ ΠΏΠΎ ΡˆΡ‚ΡƒΠΊΠ΅ Π½Π° ΠΌΠΎΠ΄ΡƒΠ»ΡŒ/ΠΏΠΎΠ΄ΠΌΠΎΠ΄ΡƒΠ»ΡŒ.

Π§Ρ‚ΠΎ ΡƒΠΏΡƒΡ‰Π΅Π½ΠΎ? Π—Π°ΠΌΠ΅Ρ‚ΡŒΡ‚Π΅ ΠΊΠ°ΠΊ ΠΌΠΎΠ΄Π΅Π»ΠΈ Π²ΠΈΠ΄Π° Π½Π° рисункС 6 Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ². Π­Ρ‚ΠΎ всСгда справСдливо для ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ уровня (страниц) ΠΈ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ Π²ΠΈΠ΄Π°. Но ΠΏΠΎΠ΄ΠΌΠΎΠ΄ΡƒΠ»ΠΈ Π·Π°Ρ‡Π°ΡΡ‚ΡƒΡŽ зависят ΠΎΡ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹Ρ… Π² процСссС Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ.

ΠžΠ±ΠΎΠ·Π½Π°Ρ‡ΠΈΠΌ ΡˆΠ΅ΡΡ‚ΡƒΡŽ Ρ†Π΅Π»ΡŒ [6.6] β€” ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ΡŒ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°ΠΌ подмодуля Π±Ρ‹Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ модСлью Π²ΠΈΠ΄Π° этого подмодуля.

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ spa ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ spa ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ spa ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ spa ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ spa ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅

Рисунок 7: Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ модуля Π½ΠΎ ΠΈ Π² Π΅Π³ΠΎ модСль Π²ΠΈΠ΄Π°

7. ВСхничСская рСализация

Π― Π±ΡƒΠ΄Ρƒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ популярныС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ с Ρ‚Π΅ΠΌ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΡΡ‚Π°Ρ‚ΡŒΡŽ Π»Π΅Π³Ρ‡Π΅ для восприятия. По этой ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅ Ρ‚ΡƒΡ‚ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ сравнСния Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² β€” для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ отвСтствСнности всСгда Π±ΡƒΠ΄Π΅Ρ‚ использована Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ популярная Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°.

7.1. ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹

Для отрисовки строго-Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ‚ΠΊΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ синтаксис tsx (Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ jsx). Π Π΅Π½Π΄Π΅Ρ€ΠΈΠ½Π³ tsx поддСрТиваСтся Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°ΠΌΠΈ, Ρ‚Π°ΠΊΠΈΠΌΠΈ ΠΊΠ°ΠΊ React, Preact and Inferno. Tsx НЕ являСтся чистым HTML, Ρ‚Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ автоматичСски сконвСртирован Π²/ΠΈΠ· HTML. ΠŸΠΎΡ‚ΠΎΠΌΡƒ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ ΠΎΡ‚ tsx ΠΌΠ½Π΅ каТСтся допустимой Ρ‚.ΠΊ. Π² случаС ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΈ Π½Π° чистый HTML, Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ Ρ‡Π°ΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π° автоматичСски.

Для ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΡ зависимости ΠΎΡ‚ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ для Ρ€Π΅Π½Π΄Π΅Ρ€Π°, ΠΌΡ‹ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ΠΈ Π±Ρ‹Π»ΠΈ чистыми функциями, ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‰ΠΈΠΌΠΈ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰ΠΈΠΌΠΈ JSX ΡƒΠ·Π΅Π». Π­Ρ‚ΠΎΡ‚ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Π±Ρ‹Π» популярСн ΠΈ ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎ сСбя Π·Π°Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΠΎΠ²Π°Π» Π² Ρ€Π°Π½Π½ΠΈΠΉ ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ развития React.

Π₯ΠΈΠ½Ρ‚: Π² послСдниС Π³ΠΎΠ΄Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Π² Π²ΠΈΠ΄Π΅ чистых Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π²Ρ‹ΡˆΠ»ΠΈ ΠΈΠ· ΠΌΠΎΠ΄Ρ‹ Π² сообщСствС React. ИспользованиС react hooks надСляСт Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ Ρ€Π΅Π°ΠΊΡ‚ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ сайд-Π΅Ρ„Ρ„Π΅ΠΊΡ‚Π°ΠΌΠΈ ΠΈ поощряСт смСшиваниС Ρ€Π΅Π½Π΄Π΅Ρ€Π° с Π»ΠΎΠ³ΠΈΠΊΠΎΠΉ управлСния состояниСм. Π₯ΡƒΠΊΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ спСцифичСским API для React ΠΈ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΏΡ€ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ Π² ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π΅, описанном Π² Π΄Π°Π½Π½ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅.

Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Π»ΠΈΡˆΠ΅Π½Ρ‹ состояния. ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΠΌ ΠΈΡ… Ρ‡Π΅Ρ€Π΅Π· Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ UI=F(S) Π³Π΄Π΅

UI β€” видимая Ρ€Π°Π·ΠΌΠ΅Ρ‚ΠΊΠ°

F β€” ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°

S β€” Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΌΠΎΠ΄Π΅Π»ΠΈ Π²ΠΈΠ΄Π° (здСсь ΠΈ Π΄Π°Π»Π΅Π΅ β€” вьюмодСли)

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° ΠΌΠΎΠΆΠ΅Ρ‚ выглядСт Ρ‚Π°ΠΊ:

Π­Ρ‚ΠΎΡ‚ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° отрисовку ΠΎΠ΄Π½ΠΎΠ³ΠΎ todo элСмСнта Π²Π½ΡƒΡ‚Ρ€ΠΈ TodoMVC прилоТСния.

ЕдинствСнная Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ Π² этом ΠΊΠΎΠ΄Π΅ β€” это Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ ΠΎΡ‚ синтаксиса JSX. БоотвСтствСнно этот ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ отрисован Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°ΠΌΠΈ. Π‘ Ρ‚Π°ΠΊΠΈΠΌ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΎΠΌ Π·Π°ΠΌΠ΅Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ для отрисовки всС Π΅Ρ‰Π΅ Π½Π΅ являСтся бСсплатной, Π½ΠΎ являСтся «рСалистичной».

Π˜Ρ‚ΠΎΠ³ΠΎ ΠΌΡ‹ достигли Ρ†Π΅Π»Π΅ΠΉ [6.1] ΠΈ [6.2].

7.2. МодСли Π’ΠΈΠ΄Π° (вьюмодСли)

Как Π±Ρ‹Π»ΠΎ сказано Ρ€Π°Π½Π΅Π΅, ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ Ρ‡Ρ‚ΠΎΠ±Ρ‹ вьюмодСли Π±Ρ‹Π»ΠΈ написаны Π² Π²ΠΈΠ΄Π΅ TypeScript классов с Ρ‚Π΅ΠΌ Ρ‡Ρ‚ΠΎ-Π±Ρ‹:

ΠžΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°Ρ‚ΡŒ ΠΈΠ½ΠΊΠ°ΠΏΡΡƒΠ»ΡΡ†ΠΈΡŽ Π΄Π°Π½Π½Ρ‹Ρ….

ΠŸΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ взаимодСйствия со слоями domain/application посрСдством ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° dependency injection.

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

ΠŸΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡ‹ Ρ€Π΅Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ интСрфСйса (reactive UI). ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠ΅ описаниС этих ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΎΠ² ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΎ Π² этом Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π΅. Π”Π°Π½Π½Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Π±Ρ‹Π» Π²ΠΏΠ΅Ρ€Π²Ρ‹Π΅ прСдставлСн Π² WPF (C#) ΠΈ Π½Π°Π·Π²Π°Π½ Model-View-ViewModel. Π’ JavaScript сообщСствС, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠ΅ доступ ΠΊ ΠΎΠ±ΠΎΠ·Ρ€Π΅Π²Π°Π΅ΠΌΡ‹ΠΌ (observable) Π΄Π°Π½Π½Ρ‹ΠΌ Ρ‡Π°Ρ‰Π΅ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π°ΠΌΠΈ (stores) слСдуя Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΠ»ΠΎΠ³ΠΈΠΈ flux. ΠžΡ‚ΠΌΠ΅Ρ‡Ρƒ Ρ‡Ρ‚ΠΎ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ это ΠΎΡ‡Π΅Π½ΡŒ абстрактный Ρ‚Π΅Ρ€ΠΌΠΈΠ½, ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ:

Π“Π»ΠΎΠ±Π°Π»ΡŒΠ½ΠΎΠ΅ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ Π΄Π°Π½Π½Ρ‹Ρ… для всСго прилоТСния.

Π”ΠΎΠΌΠ΅Π½Π½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΈΠ½ΠΊΠ°ΠΏΡΡƒΠ»ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ Π»ΠΎΠ³ΠΈΠΊΡƒ Π»ΠΎΠ³ΠΈΠΊΡƒ бизнСса ΠΈ Π½Π΅ привязанный ΠΊ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΌΡƒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρƒ Π½ΠΎ ΠΈ Π½Π΅ ΡΠ²Π»ΡΡŽΡ‰ΠΈΠΉΡΡ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹ΠΌ.

Π›ΠΎΠΊΠ°Π»ΡŒΠ½ΠΎΠ΅ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ Π΄Π°Π½Π½Ρ‹Ρ… для ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° ΠΈΠ»ΠΈ ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ².

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ любая вьюмодСль являСтся Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ΠΌ, Π½ΠΎ Π½Π΅ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ являСтся вьюмодСлью.

ΠžΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ ограничСния ΠΊ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ вьюмодСлСй:

Код, ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‰ΠΈΠΉ Ρ€Π΅Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ, Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ смСшан с ΠΊΠΎΠ΄ΠΎΠΌ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Ρ… бизнСс Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ.

Π’ΡŒΡŽΠΌΠΎΠ΄Π΅Π»ΡŒ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Π° ΡΡΡ‹Π»Π°Ρ‚ΡŒΡΡ Π½Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ ΠΈ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Π° Π·Π½Π°Ρ‚ΡŒ ΠΎ Ρ‚ΠΎΠΌ Ρ‡Ρ‚ΠΎ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹, ΡΡΡ‹Π»Π°ΡŽΡ‰ΠΈΠ΅ΡΡ Π½Π° эту вьюмодСль.

Π― ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽ mobx Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€Ρ‹ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ поля класса ΠΎΠ±ΠΎΠ·Ρ€Π΅Π²Π°Π΅ΠΌΡ‹ΠΌΠΈ. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ вьюмодСли:

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ссылаСмся Π½Π° mobx Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ, ΠΎΠ΄Π½Π°ΠΊΠΎ Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€Ρ‹ Π½Π΅ ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚ Π² Ρ‚Π΅Π»Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ².

Π― ΠΏΡ€ΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΡƒΡŽ ΠΊΠ°ΠΊ Π°Π±ΡΡ‚Ρ€Π°Π³ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π΅Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ ΠΈ ΡƒΠ±Ρ€Π°Ρ‚ΡŒ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ ΠΎΡ‚ mobx Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅. Пока Ρ‡Ρ‚ΠΎ посчитаСм достаточным ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€Π°ΠΌ Ρ‡Π΅Ρ€Π΅Π· пространство ΠΈΠΌΠ΅Π½ mobx. ΠŸΡ€ΠΈ Ρ‚Π°ΠΊΠΎΠΌ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΈ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€Ρ‹ Π½Π° Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€Ρ‹ ΠΈΠ· Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ скрипта.

Π’Π°ΠΊΠΆΠ΅ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Ρ‡Ρ‚ΠΎ конструктор вьюмодСли ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ Ρ‚ΠΈΠΏΠ° . Π­Ρ‚ΠΎ позволяСт ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€ΠΈΡ‚ΡŒ Ρ†Π΅Π»ΠΈ [6.6]. Π’ΠΈΠΏ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠ²ΠΏΠ°Π΄Π°Ρ‚ΡŒ с Ρ‚ΠΈΠΏΠΎΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰ΠΈΠΌ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° модуля. НиТС ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹ΠΉ интСрфСйс вьюмодСли:

ВсС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ вьюмодСли Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹. Они ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ для:

ВыполнСния ΠΊΠΎΠ΄Π° ΠΏΡ€ΠΈ создании вьюмодСли

ВыполнСния ΠΊΠΎΠ΄Π° ΠΏΡ€ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠΈ вьюмодСли

ВыполнСния ΠΊΠΎΠ΄Π° ΠΏΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² (ΠΏΠΎΠ΄-)модуля.

Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠΈ ΠΎΡ‚ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ², вьюмодСль Ρ…Ρ€Π°Π½ΠΈΡ‚ своС состояниС (являСтся statefull). Она Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ создана ΠΊΠΎΠ³Π΄Π° ΠΌΠΎΠ΄ΡƒΠ»ΡŒ появляСтся Π½Π° страницС ΠΈ ΡƒΠ΄Π°Π»Π΅Π½Π° ΠΊΠ°ΠΊ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ исчСзаСт со страницы.

Как ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½Π° рисункС 7, Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ Π²Ρ…ΠΎΠ΄Π° для модуля являСтся Π΅Π³ΠΎ ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ вьюмодСль Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ создана ΠΊΠΎΠ³Π΄Π° ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ модуля Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ Π² структуру DOM(mounted) ΠΈ ΡƒΠ΄Π°Π»Π΅Π½Π° ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ удаляСтся со страницы(unmounted). Π Π΅ΡˆΠΈΡ‚ΡŒ эту Π·Π°Π΄Π°Ρ‡Ρƒ ΠΌΠΎΠΆΠ½ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ‚Π΅Ρ…Π½ΠΈΠΊΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² Π²Ρ‹ΡΡˆΠ΅Π³ΠΎ порядка (higher order components).

ΠžΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ Ρ‚ΠΈΠΏ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

Π­Ρ‚Π° функция Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Π²Ρ‹ΡΡˆΠ΅Π³ΠΎ порядка Π½Π°Π΄ moduleRootComponent, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ:

Π”ΠΎΠ»ΠΆΠ΅Π½ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ созданиС вьюмодСли ΠΏΠ΅Ρ€Π΅Π΄ созданиСм ΠΈ ΠΌΠΎΠ½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ (mount) ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°.

Π”ΠΎΠ»ΠΆΠ΅Π½ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ зачистку(ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅) вьюмодСли ΠΏΡ€ΠΈ Π΄Π΅ΠΌΠΎΠ½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ (unmount).

ΠŸΡ€ΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Π½ΡƒΡŽ для ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠ³ΠΎ Π² качСствС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° TodoMVC прилоТСния. Π­Ρ‚Π° рСализация Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π±ΠΎΠ»Π΅Π΅ слоТна Ρ‚.ΠΊ. ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Π΅ΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ использования Π°Π²Ρ‚ΠΎΠ½ΠΎΠΌΠ½ΠΎΠ³ΠΎ IoC ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°, Ρ‡Ρ‚ΠΎ Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΡ‚ Π·Π° Ρ€Π°ΠΌΠΊΠΈ Π΄Π°Π½Π½ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠΈ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ использования Π΄Π°Π½Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

Π’Π°ΠΆΠ½ΠΎ Ρ‡Ρ‚ΠΎ рСализация создания вьюмодСли, Π° Ρ‚Π°ΠΊΠΆΠ΅ доступности вьюмодСли для Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΡ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ², скрыта Π²Π½ΡƒΡ‚Ρ€ΠΈ withVM.

TodoMVCDisconnected ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Π½Π΅ зависит ΠΎΡ‚ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Ρ€Π΅Π½Π΄Π΅Ρ€Π°

TodoMVC ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΎΡ€Π΅Π½Π΄Π΅Ρ€Π΅Π½ Π² ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π΅, Π½Π΅ зависящСм ΠΎΡ‚ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Ρ€Π΅Π½Π΄Π΅Ρ€Π°

TodosVM ссылаСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€Ρ‹. ΠŸΠΎΡ‚ΠΎΠΌΡƒ, ΠΊΠ°ΠΊ описано Π²Ρ‹ΡˆΠ΅, Π΅Ρ‘ отвязка ΠΎΡ‚ mobx Ρ€Π΅Π°Π»ΡŒΠ½Π°.

Π₯ΠΈΠ½Ρ‚: Π² Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈΠ· ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°, функция withVM зависит ΠΎΡ‚ react context API. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² ΠΎΠ±Ρ…ΠΎΠ΄ контСкст Π°ΠΏΠΈ. Π’Π°ΠΆΠ½ΠΎ, Ρ‡Ρ‚ΠΎ рСализация Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ синхронизирована с Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ доступа ΠΊ вьюмодСли ΠΈΠ· фасадов вьюмодСлСй β€” смотритС описаниС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ connectFn Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅.

7.3. Ѐасады вьюмодСлСй

Ѐасад опрСдСляСт класс, Π²Ρ‹ΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠΉ для ΠΏΡƒΠ±Π»ΠΈΡ‡Π½ΠΎΠ³ΠΎ доступа ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΠΎΠ΅ количСство Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ/Π΄Π°Π½Π½Ρ‹Ρ… модуля. Из рисунка 6 Π²ΠΈΠ΄Π½ΠΎ Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΏΠΎ фасаду Π½Π° ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚. Однако созданиС Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ класса Π½Π° ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Π±ΡƒΠ΄Π΅Ρ‚ излишнС многословным.

ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ вмСсто классичСских «фасадов» ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‰ΠΈΠ΅ вьюмодСль (ΠΈΠ»ΠΈ нСсколько вьюмодСлСй) ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰ΠΈΠ΅ Π½Π°Π±ΠΎΡ€ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ/Π΄Π°Π½Π½Ρ‹Ρ…, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Ρ… ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΌΡƒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρƒ. НазовСм ΠΈΡ… функциями срСза (slicing function). Π§Ρ‚ΠΎ Ссли такая функция Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠ½Π° обслуТиваСт, Π² качСствС послСднСго Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°?

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ spa ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ spa ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ spa ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ spa ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ spa ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅

Рисунок 8: ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° фасаду вьюмодСли (Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ срСза/slicing function)

ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΠΌ Π½Π° синтаксис (Π² случаС ΠΎΠ΄Π½ΠΎΠΉ вьюмодСли):

Π—Π°ΠΌΠ΅Ρ‚ΠΊΠ°: Π― Π½Π°Π·Π²Π°Π» Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, содСрТащий Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° β€˜OwnProps’ Ρ‡Ρ‚ΠΎ-Π±Ρ‹ ΠΏΡ€ΠΈΠ±Π»ΠΈΠ·ΠΈΡ‚ΡŒ Π΅Π³ΠΎ ΠΊ Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΠ»ΠΎΠ³ΠΈΠΈ примСняСмой Π² react/redux.

ΠžΡ‚Ρ€ΠΈΡΠΎΠ²ΠΊΠ° Ρ‚Π°ΠΊΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° Π² спискС todo элСмСнтов:

Π—Π°ΠΌΠ΅Ρ‚ΡŒΡ‚Π΅ Ρ‡Ρ‚ΠΎ connectFn скрываСт Π΄Π΅Ρ‚Π°Π»ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ рСактивности:

Она Π±Π΅Ρ€Ρ‘Ρ‚ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ TodoItemDisconnected ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ срСза sliceTodosVMProps β€” ΠΎΠ±Π΅ Π½Π΅ Π·Π½Π°ΡŽΡ‰ΠΈΠ΅ Π½ΠΈΡ‡Π΅Π³ΠΎ ΠΎ рСактивности ΠΈ ΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ для Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΠ½Π³Π° JSX.

Она Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ пСрСрисован Ρ€Π΅Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ ΠΊΠ°ΠΊ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄Π°Π½Π½Ρ‹Π΅, инкапсулированныС вьюмодСлью, ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ.

Π‘ΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅ Π½Π° Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ connectFn для TodoMVC прилоТСния, сдСланного Π² качСствС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°.

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

Π˜Ρ‚ΠΎΠ³ΠΎ вСсь ΠΊΠΎΠ΄, относящийся ΠΊ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΌ бизнСс Π·Π°Π΄Π°Ρ‡Π°ΠΌ прилоТСния, нСзависим ΠΎΡ‚ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΎΠ². TypeScript ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, TSX β€” это всС ΠΊ Ρ‡Π΅ΠΌΡƒ ΠΌΡ‹ привязаны.

НадСюсь Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΡ‡Ρ‚Π΅Π½ΠΈΠ΅ этой ΡΡ‚Π°Ρ‚ΡŒΠΈ продСмонстрировало ΠΏΠΎΠ»ΡŒΠ·Ρƒ ΠΏΡ€ΠΎΡ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ SPA прилоТСния Π²ΠΏΠ΅Ρ€Ρ‘Π΄ старта Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ. Π‘ΡƒΠ΄Ρƒ счастлив Ссли майндсСт хотя Π±Ρ‹ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° Π½Π° стартС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ SPA измСнится с Β«Π±Π΅Ρ€Π΅ΠΌ свСТий Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ ΠΈ всС Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ Ρ…ΠΎΡ€ΠΎΡˆΠΎΒ» Π½Π° Β«ΠΏΠΎΠ΄ΡƒΠΌΠ°Π΅ΠΌ Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΈ Π²Ρ‹Π±Π΅Ρ€Π΅ΠΌ подходящиС инструмСнты».

ВсС ΠΆΠ΅, ΠΌΠΎΠΆΠ΅Ρ‚ Π»ΠΈ слой прСдставлСния Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ нСзависим ΠΎΡ‚ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΎΠ² Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ?

Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎ-Π±Ρ‹ ΡƒΠ±Ρ€Π°Ρ‚ΡŒ ссылки Π½Π° mobx, react ΠΈ mobx-react ΠΈΠ· слоя прСдставлСния, Π½ΡƒΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ большС:

ΠΠ±ΡΡ‚Ρ€Π°Π³ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΎΡ‚ mobx Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ΠΎΠ²

ΠΠ±ΡΡ‚Ρ€Π°Π³ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ всС Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΎ-зависимыС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ слоСм прСдставлСния. К ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ TodoMVC зависит ΠΎΡ‚ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ react-router ΠΈ react-router-dom.

ΠΠ±ΡΡ‚Ρ€Π°Π³ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΎΡ‚ синтСтичСских событий, спСцифичных для ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, ΠΎΡ‚Ρ€ΠΈΡΠΎΠ²Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΉ JSX.

ΠŸΠ΅Ρ€Π²Ρ‹Π΅ Π΄Π²Π° ΠΏΡƒΠ½ΠΊΡ‚Π° ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π»Π΅Π³ΠΊΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹, Ρ‡Ρ‚ΠΎ я ΡΠΎΠ±ΠΈΡ€Π°ΡŽΡΡŒ ΠΏΡ€ΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅.
Но абстракция синтСтичСских событий фактичСски ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΠ»Π½ΠΎΡ†Π΅Π½Π½Ρ‹ΠΉ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€ΠΈ этом Π±ΡƒΠ΄Π΅Ρ‚ лишСн ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ ΠΊΠΎΠΌΡŒΡŽΠ½ΠΈΡ‚ΠΈ.

Π― ΠΏΡ€Π°Π³ΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°ΡŽ ΡΡΡ‹Π»Π°Ρ‚ΡŒΡΡ Π½Π° синтСтичСскиС события Ρ€Π΅Π°ΠΊΡ‚Π° Π² своих ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ…. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Π·Π°ΠΌΠ΅Π½Π° React Π½Π° Π΄Ρ€ΡƒΠ³ΡƒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ Ρ€Π΅Π½Π΄Π΅Ρ€Π° ΠΏΠΎΡ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹, ΠΏΡƒΡΡ‚ΡŒ эта Ρ€Π°Π±ΠΎΡ‚Π° ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ Π»ΠΎΠΊΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² ΠΈ Π½Π΅ Π·Π°Ρ‚Ρ€ΠΎΠ½Π΅Ρ‚ вьюмодСли ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ срСза.

P.S. Π‘Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅ рассмотрСнной структуры ΠΈ Π΅Π΅ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ с популярными Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠ°ΠΌΠΈ для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ SPA:

Π’ сравнСнии со связкой React/Redux: вьюмодСли Π·Π°ΠΌΠ΅Π½ΡΡŽΡ‚ reducers, action creators ΠΈ middlewares. Π’ΡŒΡŽΠΌΠΎΠ΄Π΅Π»ΠΈ содСрТат состояниС (ΡΠ²Π»ΡΡŽΡ‚ΡΡ stateful). НСт time-travel. ΠœΠ½ΠΎΠΆΠ΅ΡΡ‚Π²ΠΎ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰. ΠžΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΠΈΠ΅ просадки ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π²Ρ‹Π·Π²Π°Π½Π½ΠΎΠΉ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ΠΌ большого числа использований Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ connect с ΠΊΠ°ΠΊΠΎΠΉ Ρ‚ΠΎ Π»ΠΎΠ³ΠΈΠΊΠΎΠΉ Π²Π½ΡƒΡ‚Ρ€ΠΈ. Redux-dirven прилоТСния становятся всС ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅ ΠΈ ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅ с Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΈΠ· Π·Π° добавлСния Π½ΠΎΠ²Ρ‹Ρ… connected ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. ΠŸΡ€ΠΈ этом Π½Π΅ сущСствуСт ΠΊΠ°ΠΊΠΎΠ³ΠΎ Ρ‚ΠΎ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ Π±ΠΎΡ‚Π»Π½Π΅ΠΊΠ°, устранСниСм ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΡΠΈΡ‚ΡƒΠ°Ρ†ΠΈΡŽ.

Π’ сравнСнии с vue: строго Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ прСдставлСния благодаря TSX. Π’ΡŒΡŽΠΌΠΎΠ΄Π΅Π»ΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌΠΈ классами ΠΈ Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ использования Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ сторонних Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ, Ρ€Π°Π²Π½ΠΎ ΠΊΠ°ΠΊ Π½Π΅ обязаны ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€ΡΡ‚ΡŒ интСрфСйсу, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌΡƒ сторонними Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠ°ΠΌΠΈ. Vue.js заставляСт ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ состояниС Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ структуры ΠΈΠΌΠ΅ΡŽΡ‰Π΅ΠΉ свойства β€˜data’,’methods’, ΠΈ Ρ‚.Π΄. ΠžΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΠΈΠ΅ vue-спСцифичСских Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ² ΠΈ синтаксиса привязки ΠΊ ΠΌΠΎΠ΄Π΅Π»ΠΈ.

Π’ сравнСнии с angular: строго Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ прСдставлСния благодаря TSX. ΠžΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΠΈΠ΅ angular-спСцифичСских Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ² ΠΈ синтаксиса привязки ΠΊ ΠΌΠΎΠ΄Π΅Π»ΠΈ. Π˜Π½ΠΊΠ°ΠΏΡΡƒΠ»ΡΡ†ΠΈΡ Π΄Π°Π½Π½Ρ‹Ρ… Π²Π½ΡƒΡ‚Ρ€ΠΈ вьюмодСлСй Π² отсутствиС двустороннСй привязки Π΄Π°Π½Π½Ρ‹Ρ… (two-way data binding). Π₯ΠΈΠ½Ρ‚: для ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… сцСнариСв, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ Ρ„ΠΎΡ€ΠΌΡ‹, двусторонняя привязка Π΄Π°Π½Π½Ρ‹Ρ… ΡƒΠ΄ΠΎΠ±Π½Π° ΠΈ ΠΏΠΎΠ»Π΅Π·Π½Π°.

Π’ сравнСнии с чистым react Π³Π΄Π΅ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ состояниСм выполняСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ…ΡƒΠΊΠΎΠ² (hooks, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ useState/useContext):Π›ΡƒΡ‡ΡˆΠ΅Π΅ Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ отвСтствСнностСй. Π’ΡŒΡŽΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π²ΠΎΡΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒΡΡ Π² Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΠ»ΠΎΠ³ΠΈΠΈ Ρ€Π΅Π°ΠΊΡ‚Π° ΠΊΠ°ΠΊ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π»ΠΈΡˆΠ΅Π½Ρ‹ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΡ‚ΡŒ Ρ‡Ρ‚ΠΎ-Π»ΠΈΠ±ΠΎ ΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ отвСтствСнными ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π·Π° Ρ€Π°Π±ΠΎΡ‚Ρƒ с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ. НСт нСобходимости:

ΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ Π·Π° ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ Π²Ρ‹Π·ΠΎΠ²Π° Ρ…ΡƒΠΊΠΎΠ².

ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Ρ‚ΡŒ зависимости Ρ…ΡƒΠΊΠΎΠ² useEffect Π²Π½ΡƒΡ‚Ρ€ΠΈ β€˜deps’ массива.

ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ смонтирован Π»ΠΈ всС Π΅Ρ‰Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ послС ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ асинхронного дСйствия.

ΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ Ρ‡Ρ‚ΠΎ замыкания ΠΈΠ· ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… Ρ€Π΅Π½Π΄Π΅Ρ€ΠΎΠ² Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° Ρ…ΡƒΠΊΠ° эффСкта.

Как любая тСхнология, Ρ…ΡƒΠΊΠΈ (ΠΈ Π² частности β€” useEffect) Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ рСкомСндациям. Π­Ρ‚ΠΈ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΈ Π½Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ‡Π°ΡΡ‚ΡŒΡŽ интСрфСйсов, Π½ΠΎ приняты ΠΊΠ°ΠΊ Β«ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Β», «модСль ΠΌΡ‹ΡˆΠ»Π΅Π½ΠΈΡ (mental model)Β» ΠΈΠ»ΠΈ «стандартныС ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ (best practices)Β». ΠŸΡ€Π΅ΠΊΡ€Π°ΡΠ½Π°Ρ ΡΡ‚Π°Ρ‚ΡŒΡ ΠΏΡ€ΠΎ использованиС Ρ…ΡƒΠΊΠΎΠ² ΠΎΡ‚ Ρ‡Π»Π΅Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ react. ΠŸΡ€ΠΎΡ‡ΠΈΡ‚Π°ΠΉΡ‚Π΅ Π΅Π΅ ΠΈ ΠΎΡ‚Π²Π΅Ρ‚ΡŒΡ‚Π΅ сСбС Π½Π° Π΄Π²Π° вопроса:

Π§Ρ‚ΠΎ Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ…ΡƒΠΊΠΈ?

Как ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡ€Π°Π²ΠΈΠ», Π½Π΅ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Ρ… компилятором/Π»ΠΈΠ½Ρ‚Π΅Ρ€ΠΎΠΌ ΠΈ слоТно отслСТиваСмых Π½Π° Ρ€ΡƒΡ‡Π½ΠΎΠΌ ΠΊΠΎΠ΄ Ρ€Π΅Π²ΡŒΡŽ, Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΠ±Π»ΡŽΠ΄Π°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎΠ±Ρ‹ использованиС Ρ…ΡƒΠΊΠΎΠ² ΠΎΡΡ‚Π°Π²Π°Π»ΠΎΡΡŒ прСдсказуСмым?Если Π²Ρ‚ΠΎΡ€ΠΎΠΉ список получился большС ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ β€” это Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΉ сигнал Ρ‡Ρ‚ΠΎ относится ΠΊ Ρ…ΡƒΠΊΠ°ΠΌ стоит с большой ΠΎΡΡ‚ΠΎΡ€ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ. Π₯ΠΈΠ½Ρ‚: ΠΏΡ€ΠΈΠΌΠ΅Ρ€ фрустрации ΠΎΡ‚ Ρ…ΡƒΠΊΠΎΠ²

Π’ сравнСнии с react-mobx ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠ΅ΠΉ. Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° ΠΊΠΎΠ΄Π° Π½Π΅ опрСдСляСтся ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠΌ react-mobx ΠΈ Π½Π΅ прСдлагаСтся Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠ΅ΠΉ ΠΊ Π½Π΅ΠΌΡƒ. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡ€ΠΈΠ΄ΡƒΠΌΠ°Ρ‚ΡŒ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΊ ΡΡ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ ΠΊΠΎΠ΄Π° сам. Π Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Π½Π½ΡƒΡŽ Π² ΡΡ‚Π°Ρ‚ΡŒΠ΅ структуру ΠΌΠΎΠΆΠ½ΠΎ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΈΠΌ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΎΠΌ.

Π’ сравнСнии с mobx-state-tree: Π’ΡŒΡŽΠΌΠΎΠ΄Π΅Π»ΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌΠΈ классами ΠΈ Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ использования Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ сторонних Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ, Ρ€Π°Π²Π½ΠΎ ΠΊΠ°ΠΊ Π½Π΅ обязаны ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€ΡΡ‚ΡŒ интСрфСйсу, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌΡƒ сторонними Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠ°ΠΌΠΈ. ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ° Π²Π½ΡƒΡ‚Ρ€ΠΈ mobx-state-tree опираСтся Π½Π° спСцифичСскиС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ этого ΠΏΠ°ΠΊΠ΅Ρ‚Π°. ИспользованиС mobx-state-tree Π² связкС с TypeScript ΠΏΡ€ΠΎΠ²ΠΎΡ†ΠΈΡ€ΡƒΠ΅Ρ‚ Π΄ΡƒΠ±Π»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ β€” поля Ρ‚ΠΈΠΏΠ° ΠΎΠ±ΡŠΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ TypeScript интСрфСйс Π½ΠΎ ΠΏΡ€ΠΈ этом обязаны Π±Ρ‹Ρ‚ΡŒ пСрСчислСны Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠΌ для опрСдСлСния Ρ‚ΠΈΠΏΠ°.

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

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

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