Interviews (new Projects)

BugFixing flow

React

React элСмСнты -- нСизмСняСмыС. Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ элСмСнт Π±Ρ‹Π» создан, ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ ΠΈΠ»ΠΈ ΠΏΠΎΡ‚ΠΎΠΌΠΊΠΈ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ. Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ ΠΏΠΎΡ…ΠΎΠΆ Π½Π° ΠΎΠ΄ΠΈΠ½ΠΎΡ‡Π½Ρ‹ΠΉ ΠΊΠ°Π΄Ρ€ Π² Ρ„ΠΈΠ»ΡŒΠΌΠ΅: ΠΎΠ½ прСдставляСт собой UI Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ.

ΠžΠ΄Π½ΠΎΠ½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Π½Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ Π΄Π°Π½Π½Ρ‹Ρ… (ΠΎΡ‚ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»Π΅ΠΉ ΠΊ Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌ). Props -- св-Π²Π°, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠ΅ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌ ΠΌΠ΅ΠΆΠ΄Ρƒ собой.

////////////////////////

DOM - это ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎΠ΅ прСдставлСниС HTML Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° ΠΈ интСрфСйс для управлСния этим ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ. Π­Ρ‚ΠΎ интСрфСйс доступа ΠΊ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… (Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΡƒΠΆΠ΅ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅ΠΌΡ‹ΠΌ) элСмСнтам Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° HTML.

Π₯отя DOM ΠΏΠΎΡ…ΠΎΠΆ Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ„ΠΎΡ€ΠΌΡ‹ исходного Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° HTML, ΠΎΠ½ отличаСтся ΠΏΠΎ ряду ΠΏΡ€ΠΈΡ‡ΠΈΠ½:

  • Π­Ρ‚ΠΎ всСгда Π²Π΅Ρ€Π½Ρ‹ΠΉ (Π²Π°Π»ΠΈΠ΄Π½Ρ‹ΠΉ) HTML ΠΊΠΎΠ΄

  • Π­Ρ‚ΠΎ модСль, которая ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Javascript

  • Π’ Π½Π΅Π³ΠΎ Π½Π΅ входят псСвдоэлСмСнты (Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ ::after)

  • Π’ Π½Π΅Π³ΠΎ входят скрытыС элСмСнты (Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ display: none)

Π’OM - ΠžΠ±ΡŠΠ΅ΠΊΡ‚Π½Π°Ρ модСль Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π° (Browser Object Model) -- Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, прСдоставляСмыС Π±Ρ€Π°ΡƒΠ·Π΅Ρ€ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ со всСм, ΠΊΡ€ΠΎΠΌΠ΅ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°. Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π° (BOM) Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π° ΠΈΠ· JavaScript.

ΠžΠ±ΡŠΠ΅ΠΊΡ‚ window являСтся ΠΊΠΎΡ€Π½Π΅Π²Ρ‹ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ JavaScript. ВсС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ JavaScript, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ опрСдСляСмыС ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ хранятся Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅ window. -navigation -- информация ΠΎ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅ ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмС -location -- ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ URL ΠΈ ΠΏΠ΅Ρ€Π΅Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€ ΠΏΠΎ Π½ΠΎΠ²ΠΎΠΌΡƒ адрСсу -history -- ΠΆΡƒΡ€Π½Π°Π» Π½Π°Π²ΠΈΠ³Π°Ρ†ΠΈΠΈ Π·Π° всС врСмя Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ ΠΎΠΊΠ½ΠΎΠΌ.

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ alert/confirm/prompt Ρ‚ΠΎΠΆΠ΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ‡Π°ΡΡ‚ΡŒΡŽ BOM: ΠΎΠ½ΠΈ Π½Π΅ относятся нСпосрСдствСнно ΠΊ страницС, Π½ΠΎ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ собой ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΎΠΊΠ½Π° Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π° для ΠΊΠΎΠΌΠΌΡƒΠ½ΠΈΠΊΠ°Ρ†ΠΈΠΈ с ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ.

////////////////////////

Virtual DOM

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

Virtual DOM Π½Π΅ являСтся стандартом ΠΈ Π² ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΌ ΠΈΡ‚ΠΎΠ³Π΅ ΠΌΡ‹ ΠΏΠΎ-ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ взаимодСйствуСм с DOM, Π½ΠΎ Π΄Π΅Π»Π°Π΅ΠΌ это ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π΅ΠΆΠ΅ ΠΈ Π±ΠΎΠ»Π΅Π΅ эффСктивно. Π­Ρ‚ΠΎ Ρ‚Π΅Ρ…Π½ΠΈΠΊΠ° ΠΈ Π½Π°Π±ΠΎΡ€ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ / Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π½Π°ΠΌ ΡƒΠ»ΡƒΡ‡ΡˆΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π½Π° клиСнтской сторонС, избСгая прямой Ρ€Π°Π±ΠΎΡ‚Ρ‹ с DOM ΠΏΡƒΡ‚Π΅ΠΌ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π»Π΅Π³ΠΊΠΈΠΌ JavaScript-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ, ΠΈΠΌΠΈΡ‚ΠΈΡ€ΡƒΡŽΡ‰Π΅ΠΌ DOM-Π΄Π΅Ρ€Π΅Π²ΠΎ.

ВмСсто Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ с DOM Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ, ΠΌΡ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π΅ΠΌ с Π΅Π³ΠΎ лСгковСсной ΠΊΠΎΠΏΠΈΠ΅ΠΉ. ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π²Π½ΠΎΡΠΈΡ‚ΡŒ измСнСния Π² копию, исходя ΠΈΠ· Π½Π°ΡˆΠΈΡ… потрСбностСй, Π° послС этого ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ измСнСния ΠΊ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌΡƒ DOM. ΠŸΡ€ΠΈ этом происходит сравнСниС DOM-Π΄Π΅Ρ€Π΅Π²Π° с Π΅Π³ΠΎ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΊΠΎΠΏΠΈΠ΅ΠΉ, опрСдСляСтся Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΈ запускаСтся пСрСрисовка Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΎ. Π’Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ быстрСС, ΠΏΠΎΡ‚ΠΎΠΌΡƒ ΠΊΠ°ΠΊ Π½Π΅ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² сСбя всС тяТСловСсныС части Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ DOM. Но Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ссли ΠΌΡ‹ Π΄Π΅Π»Π°Π΅ΠΌ это ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ. Π•ΡΡ‚ΡŒ Π΄Π²Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹: ΠΊΠΎΠ³Π΄Π° ΠΈΠΌΠ΅Π½Π½ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΡƒΡŽ пСрСрисовку DOM ΠΈ ΠΊΠ°ΠΊ это ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ эффСктивно: 1.Когда Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ ΠΈ нуТдаСтся Π² ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΈ. Π•ΡΡ‚ΡŒ Π΄Π²Π° Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° ΡƒΠ·Π½Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π΄Π°Π½Π½Ρ‹Π΅ измСнились:

  • ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ ΠΈΠ· Π½ΠΈΡ… β€” Β«dirty checkingΒ» (грязная ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ°) Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠΏΡ€Π°ΡˆΠΈΠ²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Ρ‡Π΅Ρ€Π΅Π· рСгулярныС ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΊΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΈ рСкурсивно ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ всС значСния Π² структурС Π΄Π°Π½Π½Ρ‹Ρ….

  • Π’Ρ‚ΠΎΡ€ΠΎΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ β€” Β«observableΒ» (Π½Π°Π±Π»ΡŽΠ΄Π°Π΅ΠΌΡ‹ΠΉ) Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² наблюдСнии Π·Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ состояния. Если Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ измСнилось, ΠΌΡ‹ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π΄Π΅Π»Π°Π΅ΠΌ. Если измСнилось, ΠΌΡ‹ Ρ‚ΠΎΡ‡Π½ΠΎ Π·Π½Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ.

2. Как? Π§Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ этот ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ быстрым:

  • Π­Ρ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½Ρ‹Π΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ сравнСния

  • Π“Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²ΠΊΠ° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ чтСния/записи ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с DOM

  • Π­Ρ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎΠ΄-Π΄Π΅Ρ€Π΅Π²ΡŒΠ΅Π²

Shadow DOM

Shadow DOM - ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для инкапсуляции. Благодаря Π΅ΠΌΡƒ Π² ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π΅ Π΅ΡΡ‚ΡŒ собствСнноС Β«Ρ‚Π΅Π½Π΅Π²ΠΎΠ΅Β» DOM-Π΄Π΅Ρ€Π΅Π²ΠΎ, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ нСльзя просто Ρ‚Π°ΠΊ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΈΠ· Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°, Ρƒ Π½Π΅Π³ΠΎ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ·ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ CSS-ΠΏΡ€Π°Π²ΠΈΠ»Π° ΠΈ Ρ‚.Π΄. Shadow DOM ссылаСтся Π½Π° ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π° Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ ΠΏΠΎΠ΄Π΄Π΅Ρ€Π΅Π²ΠΎ элСмСнтов DOM Π² Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΠ½Π³ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°, Π½ΠΎ Π½Π΅ Π² Π΄Π΅Ρ€Π΅Π²ΠΎ DOM основного Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°.

Π’Π΅Π½Π΅Π²ΠΎΠΉ DOM – это способ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ свой, ΠΈΠ·ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ, DOM для ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°. Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΈΠ· Ρ‚Π΅Π½Π΅Π²ΠΎΠ³ΠΎ DOM cΡ‚ΠΈΠ»ΠΈΠ·ΡƒΡŽΡ‚ΡΡ своими стилями ΠΈΠ· Ρ‚Π΅Π½Π΅Π²ΠΎΠ³ΠΎ Π΄Π΅Ρ€Π΅Π²Π°, Π½Π΅ ΠΈΠ· Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°.

Π’Π΅Π½Π΅Π²ΠΎΠΉ DOM ΠΎΡ‚Π΄Π΅Π»Ρ‘Π½ ΠΎΡ‚ Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°:

  1. Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Ρ‹ Ρ‚Π΅Π½Π΅Π²ΠΎΠ³ΠΎ DOM Π½Π΅ Π²ΠΈΠ΄Π½Ρ‹ ΠΈΠ· ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ³ΠΎ DOM Ρ‡Π΅Ρ€Π΅Π· querySelector. Π’ частности, элСмСнты Ρ‚Π΅Π½Π΅Π²ΠΎΠ³ΠΎ DOM ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ‚Π°ΠΊΠΈΠ΅ ΠΆΠ΅ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹, ΠΊΠ°ΠΊ Ρƒ элСмСнтов Π² ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΌ DOM (light DOM). Они Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ‚Π΅Π½Π΅Π²ΠΎΠ³ΠΎ Π΄Π΅Ρ€Π΅Π²Π°.

  2. Π£ Ρ‚Π΅Π½Π΅Π²ΠΎΠ³ΠΎ DOM свои стили. Π‘Ρ‚ΠΈΠ»ΠΈ ΠΈΠ· внСшнСго DOM Π½Π΅ примСнятся.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚?

ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ React β€” Π² Π΅Π³ΠΎ ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠ΅ΠΉ Ρ„ΠΎΡ€ΠΌΠ΅ β€” это обычная функция JavaScript. ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ интСрфСйс Π½Π° нСзависимыС, ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ части ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ· частСй ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ. Π€ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΈ классовыС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹

function Welcome(props) {
  // Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ DOM элСмСнт. НапримСр:
  return <h1>ΠŸΡ€ΠΈΠ²Π΅Ρ‚, {props.name}</h1>;
}
// ΠžΡ‚Ρ€ΠΈΡΠΎΠ²Ρ‹Π²Π°Π΅ΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Button Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅
ReactDOM.render(<Button label="Save" />, mountNode)

Данная функция β€” ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹ΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ React, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ½ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΎΠ΄ΠΈΠ½ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Β«propsΒ» (ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ свойства) с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ элСмСнт React. Π’Π°ΠΊΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ Β«Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΌΠΈΒ», ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π±ΡƒΠΊΠ²Π°Π»ΡŒΠ½ΠΎ функциями JavaScript.

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ - функция, которая ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ props ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π½Π°Π±ΠΎΡ€ HTML.

Π’Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ класс ΠΈΠ· ES6 для опрСдСлСния ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°:

class Welcome extends React.Component {
  render() {
    return <h1>ΠŸΡ€ΠΈΠ²Π΅Ρ‚, {this.props.name}</h1>;
  }
}

Π”Π²Π° Π²Ρ‹ΡˆΠ΅ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Ρ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° эквивалСнтны с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния React.

Higher-Order Component (HOC)

Π­Ρ‚ΠΎ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΏΡ€ΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚Ρ‹Ρ… способов для ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ³ΠΎ использования Π»ΠΎΠ³ΠΈΠΊΠΈ. ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Π²Ρ‹ΡΡˆΠ΅Π³ΠΎ порядка β€” это функция, которая ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π½ΠΎΠ²Ρ‹ΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚.

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

import React from 'react';

const withSecretToLife = (WrappedComponent) => {
  class HOC extends React.Component {
    render() {
      return (
        <WrappedComponent
          {...this.props}
          secretToLife={42}
        />
      );
    }
  }
    
  return HOC;
};

export default withSecretToLife;
import React from 'react';
import withSecretToLife from 'components/withSecretToLife';

const DisplayTheSecret = props => (
  <div>
    The secret to life is {props.secretToLife}.
  </div>
);

const WrappedComponent = withSecretToLife(DisplayTheSecret);

export default WrappedComponent;

Наш ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ WrappedComponent, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎ сути являСтся ΠΏΡ€ΠΎΠΊΠ°Ρ‡Π°Π½Π½ΠΎΠΉ вСрсиСй <DisplayTheSecret/>, ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ Π½Π°ΠΌ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ SecretToLife ΠΊΠ°ΠΊ ΠΊ пропсу.

JSX

JSX β€” Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ языка JavaScript. Π€ΡƒΠ½Π΄Π°ΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½ΠΎ, JSX являСтся синтаксичСским сахаром для Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ React.createElement(component, props, ...children). Babel ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅Ρ‚ JSX Π² Π²Ρ‹Π·ΠΎΠ²Ρ‹ React.createElement().

JSX = JS + HTML + CSS

Π’ HTML Π²Ρ‹ Π½Π°ΠΉΠ΄Π΅Ρ‚Π΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ Π±Π΅Π· ΠΊΠ°ΠΊΠΈΡ…-Π»ΠΈΠ±ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ. Π’ JSX ΠΎΠ½ΠΈ ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Ρ‹ Π² свою Π²Π°Ρ€ΠΈΠ°Ρ†ΠΈΡŽ Π½Π° Π³ΠΎΡ€Π±Π°Ρ‚ΠΎΠΌ рСгистрС:

onchange => onChange

Π’Π°ΠΊ ΠΊΠ°ΠΊ JSX это JavaScript ΠΈ class это Π·Π°Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ слово, Π²Ρ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ:

<p className="description">

Life Cycle methods

Волько для классовых ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ²!!!

Π’ процСссС Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ Ρ‡Π΅Ρ€Π΅Π· ряд этапов ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π°. На ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΈΠ· этапов вызываСтся опрСдСлСнная функция, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊΠΈΠ΅-Π»ΠΈΠ±ΠΎ дСйствия:

1.constructor(props): конструктор, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ происходит Π½Π°Ρ‡Π°Π»ΡŒΠ½Π°Ρ инициализация ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°

ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€Ρ‹ Π² React ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ для Π΄Π²ΡƒΡ… Ρ†Π΅Π»Π΅ΠΉ:

ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ β€” СдинствСнноС мСсто, Π³Π΄Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ this.state. Π’ ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄Π°Ρ… Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ this.setState().

НС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΏΠΎΠ±ΠΎΡ‡Π½Ρ‹Π΅ эффСкты ΠΈΠ»ΠΈ подписки Π² конструкторС. ВмСсто этого ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ componentDidMount().

2. componentWillMount(): вызываСтся нСпосрСдствСнно ΠΏΠ΅Ρ€Π΅Π΄ Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΠ½Π³ΠΎΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°

3. render(): Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΠ½Π³ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°

ЕдинствСнный ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π² подклассС React.Component

ΠŸΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ ΠΎΠ½ провСряСт this.props ΠΈ this.state

Ѐункция render() Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ чистой. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° Π½Π΅ измСняСт состояниС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°, всСгда Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚, Π½Π΅ взаимодСйствуСт Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ с Π±Ρ€Π°ΡƒΠ·Π΅Ρ€ΠΎΠΌ.

render() Π½Π΅ вызываСтся, Ссли shouldComponentUpdate() Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ false.

4. componentDidMount(): вызываСтся послС Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΠ½Π³Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°. Π—Π΄Π΅ΡΡŒ ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ запросы ΠΊ ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹ΠΌ рСсурсам

componentDidMount() вызываСтся сразу послС монтирования (Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ, вставки ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° Π² DOM). Π’ этом ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ дСйствия, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ наличия DOM-ΡƒΠ·Π»ΠΎΠ². Π­Ρ‚ΠΎ Ρ…ΠΎΡ€ΠΎΡˆΠ΅Π΅ мСсто для создания сСтСвых запросов.

Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для настройки подписок.

5. componentWillUnmount(): вызываСтся ΠΏΠ΅Ρ€Π΅Π΄ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° ΠΈΠ· DOM

Π’ этом ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ выполняСтся Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΉ сброс: ΠΎΡ‚ΠΌΠ΅Π½Π° Ρ‚Π°ΠΉΠΌΠ΅Ρ€ΠΎΠ², сСтСвых запросов ΠΈ подписок, созданных Π² componentDidMount().

ΠšΡ€ΠΎΠΌΠ΅ этих основных этапов ΠΈΠ»ΠΈ событий ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π°, Ρ‚Π°ΠΊΠΆΠ΅ имССтся Π΅Ρ‰Π΅ ряд Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΏΡ€ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΈ состояния послС Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΠ½Π³Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°:

  1. shouldComponentUpdate(nextProps, nextState): вызываСтся ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· ΠΏΡ€ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° props ΠΈΠ»ΠΈ state. Π’ качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ Π½ΠΎΠ²Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ props ΠΈ state. Π­Ρ‚Π° функция Π΄ΠΎΠ»ΠΆΠ½Π° Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ true (Π½Π°Π΄ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅) ΠΈΠ»ΠΈ false (ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅). По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ возвращаСтся true. Но Ссли функция Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ false, Ρ‚ΠΎ Ρ‚Π΅ΠΌ самым ΠΌΡ‹ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΠΌ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°, Π° ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΡΡ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ.

  2. componentWillUpdate(nextProps, nextState): вызываСтся ΠΏΠ΅Ρ€Π΅Π΄ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° (Ссли shouldComponentUpdate Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ true)

  3. render(): Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΠ½Π³ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° (Ссли shouldComponentUpdate Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ true)

  4. componentDidUpdate(prevProps, prevState): вызываСтся сразу послС обновлСния ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° (Ссли shouldComponentUpdate Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ true). Π’ качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ старыС значСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² props ΠΈ state.

И ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ стоит ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ componentWillReceiveProps(nextProps), которая вызываСтся ΠΏΡ€ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° props. НовыС значСния этого ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°. Как ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, Π² этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°ΡŽΡ‚ΡΡ Ρ‚Π΅ свойства ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°, Π² Ρ‚ΠΎΠΌ числС ΠΈΠ· this.state, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ зависят ΠΎΡ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΈΠ· props.

React Hooks

Волько для Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ²!!!

100% ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ совмСстимы. Π₯ΡƒΠΊΠΈ Π½Π΅ содСрТат ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠ»ΠΎΠΌΠ°Ρ‚ΡŒ ваш ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄.

Π₯ΡƒΠΊΠΈ β€” это Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Β«ΠΏΠΎΠ΄Ρ†Π΅ΠΏΠΈΡ‚ΡŒΡΡΒ» ΠΊ ΡΠΎΡΡ‚ΠΎΡΠ½ΠΈΡŽ ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌ ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π° React ΠΈΠ· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ². Π₯ΡƒΠΊΠΈ Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Π²Π½ΡƒΡ‚Ρ€ΠΈ классов β€” ΠΎΠ½ΠΈ Π΄Π°ΡŽΡ‚ Π²Π°ΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ React Π±Π΅Π· классов.

НС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Ρ…ΡƒΠΊΠΈ Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ†ΠΈΠΊΠ»ΠΎΠ², условных ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² ΠΈΠ»ΠΈ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Ρ…ΡƒΠΊΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° Π²Π΅Ρ€Ρ…Π½Π΅ΠΌ ΡƒΡ€ΠΎΠ²Π½Π΅.

UseState()

useState() API Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ массив, ΠΏΠ΅Ρ€Π²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ содСрТит state (ΠΌΡ‹ Π½Π°Π·Π²Π°Π»ΠΈ Π΅Π³ΠΎ count, Π½ΠΎ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°Π·Π²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ ΡƒΠ³ΠΎΠ΄Π½ΠΎ) ΠΈ Π²Ρ‚ΠΎΡ€ΠΎΠ΅ это функция, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΡ‹ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ для измСнСния состояния.

useState() ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ state. Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ это 0 .

Π’Π°ΠΊ ΠΊΠ°ΠΊ useState() Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ массив, ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Π΄Π΅ΡΡ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€ΠΈΠ·Π°Ρ†ΠΈΡŽ массива для доступа ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΌΡƒ элСмСнту, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€: const [count, setCount] = useState(0), Π³Π΄Π΅:

count - это Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ state, Π° setCount это функция которая мСняСт state.

import React, { useState } from "react";
import ReactDOM from "react-dom";

const Counter = () => {
  const [count, setCount] = useState(0);
  const increment = () => setCount(count + 1);
  const decrement = () => setCount(count - 1);

  return (
    <div>
      <p>You clicked {count} times</p>
      <button onClick={increment}>Increment</button>
      <button onClick={decrement}>Decrement</button>
    </div>
  );
};

const rootElement = document.getElementById("root");
ReactDOM.render(<Counter />, rootElement);

UseEffect()

Π’ классовых ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°Ρ…, ΠΌΡ‹ часто Π΄Π΅Π»Π°Π΅ΠΌ side effect Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. НапримСр, подписываСмся Π½Π° события ΠΈΠ»ΠΈ Π΄Π΅Π»Π°Π΅ΠΌ запросы Π½Π° ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ componentDidMount, componentWillUnmount ΠΈ componentDidUpdate.

Hooks прСдоставляСт useEffect() API, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°.

Ѐункция запускаСтся ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠΌ Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΠ½Π³Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° ΠΈ ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠΌ Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΠ½Π³Π΅ / ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΈ. Π‘Π½Π°Ρ‡Π°Π»Π° React обновляСт DOM, Π° Π·Π°Ρ‚Π΅ΠΌ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ Π»ΡŽΠ±ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½ΡƒΡŽ Π² useEffect(). И всё это Π±Π΅Π· Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΠ½Π³Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ интСрфСйса, Π΄Π°ΠΆΠ΅ ΠΏΡ€ΠΈ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ΅ ΠΊΠΎΠ΄Π°, Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠΈ ΠΎΡ‚ старых componentDidMount ΠΈ componentDidUpdate. Π§Ρ‚ΠΎ позволяСт прилоТСниям Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ быстрСС.

import React, { useState, useEffect } from "react";
import ReactDOM from "react-dom";

const Counter = () => {
  const [count, setCount] = useState(0);
  const [name, setName] = useState("Alex");

  const increment = () => setCount(count + 1);
  const decrement = () => setCount(count - 1);

  useEffect(() => {
    console.log(`Hi ${name} you clicked ${count} times`);
  });

  return (
    <div>
      <p>
        Hi {name} you clicked {count} times
      </p>
      <button onClick={increment}>Increment</button>
      <button onClick={decrement}>Decrement</button>
      <button onClick={() => setName(name === "Alex" ? "Alexey" : "Alex")}>
        Change name
      </button>
    </div>
  );
};

const rootElement = document.getElementById("root");
ReactDOM.render(<Counter />, rootElement);

componentWillUnmount ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ достигнута ΠΏΡƒΡ‚Π΅ΠΌ возвращСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠ· useEffect():

useEffect(() => {
  console.log(`Hi ${name} you clicked ${count} times`);
  return () => {
    console.log(`Unmounted`);
  };
});

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ функция useEffect() запускаСтся ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΠ½Π³Π΅ / ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΈ, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ React ΠΏΡ€ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π²Ρ‹Π·ΠΎΠ² для ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, Π΄ΠΎΠ±Π°Π²ΠΈΠ² Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ являСтся массивом, содСрТащим список ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… state, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Ρ‚ΡŒ. React Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ side effect Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ‚ΠΎΠΌ случаС, Ссли ΠΎΠ΄ΠΈΠ½ ΠΈΠ· элСмСнтов Π² этом массивС мСняСтся.

useEffect(() => {
  console.log(`Hi ${name} you clicked ${count} times`);
}, [name, count]);

Π’ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ React Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ side effect Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π· (Π²ΠΎ врСмя сборки ΠΈ Ρ€Π°Π·Π±ΠΎΡ€ΠΊΠΈ), ΠΏΠ΅Ρ€Π΅Π΄Π°Π² пустой массив:

useEffect(() => {
  console.log(`Hi ${name} you clicked ${count} times`);
}, []);

Styled components

Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°, которая позволяСт ΠΏΠΈΡΠ°Ρ‚ΡŒ CSS Π² JS c ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΡˆΠ°Π±Π»ΠΎΠ½Π½Ρ‹Ρ… Π»ΠΈΡ‚Π΅Ρ€Π°Π»ΠΎΠ² ΠΈΠ· Ρ‚Π΅Π³ΠΎΠ².

const Button = styled.button`
  font-size: 2em;
  background-color: black;
  color: white;
`;

//Π Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ стилСй:
const Button = styled.button`
  color: palevioletred;
  font-size: 20px;
  margin: 10px;
  padding: 5px 20px;
  border: 2px solid palevioletred;
  border-radius: 3px;
`;

// Новый ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Π½Π° основС Button, Π½ΠΎ с Π½ΠΎΠ²Ρ‹ΠΌΠΈ стилями
const TomatoButton = styled(Button)`
  color: tomato;
  border-color: tomato;
`;

render(
  <div>
    <Button> Normal Button </Button>
    <TomatoButton>Tomato Button</TomatoButton>
  </div>,
);

Useful link:

React vs Angular

  • React эффСктивно Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ (virtual DOM).

  • React ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ JavaScript (ES6), ΠΏΡ€ΠΈΠ·Π½Π°Π½Π½Ρ‹ΠΉ Π²Π΅Π±-язык с 1995 Π³ΠΎΠ΄Π°.

  • Angular ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ TypeScript, Π²Ρ‹ΠΏΡƒΡ‰Π΅Π½Π½Ρ‹ΠΉ Π² 2012 Π³ΠΎΠ΄Ρƒ.

  • БтатичСски Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ языки Π²Π΅Π»ΠΈΠΊΠΎΠ»Π΅ΠΏΠ½Ρ‹, Π½ΠΎ Π½Π΅ Π΄Π΅Π»Π°ΡŽΡ‚ ΠΊΠΎΠ΄ Π±ΠΎΠ»Π΅Π΅ Π½Π°Π΄Π΅ΠΆΠ½Ρ‹ΠΌ.

  • ДинамичСски Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ языки Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ мСньшС Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ для написания ΠΈ Π΄Π°ΡŽΡ‚ большС гибкости для творчСства.

  • Π˜Π·ΡƒΡ‡Π΅Π½ΠΈΠ΅ языка со статичСской Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ слоТной Π·Π°Π΄Π°Ρ‡Π΅ΠΉ, особСнно Ссли Π²Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с динамичСски Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ языками.

  • Π’ ES6 Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ мноТСство Π·Π°ΠΌΠ΅Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ, классов, ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² распространСния, Π»ΠΈΡ‚Π΅Ρ€Π°Π»ΠΎΠ², Ρ‡Ρ‚ΠΎ позволяСт ΠΏΠΈΡΠ°Ρ‚ΡŒ чистый ΠΈ структурированный ΠΊΠΎΠ΄.

ΠœΠΈΠ½ΡƒΡΡ‹ React:

  1. Π‘Π°ΠΌΡ‹Π΅ большиС минусы React ΠΈ Redux Π·Π°ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ΡΡ Π½Π΅ Π² особСнностях Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ ΡƒΠΌΠ΅ΡŽΡ‚, Π° Π² Ρ‚ΠΎΠΌ, Ρ‡Π΅Π³ΠΎ ΠΎΠ½ΠΈ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚. Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ слоТноС Π²Π΅Π±-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π²Π°ΠΌ понадобится ΠΌΠ½ΠΎΠ³ΠΎ Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ. Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Ρ‹ ΠΎΡ‚ΠΎΠΉΠ΄Ρ‘Ρ‚Π΅ ΠΎΡ‚ основных Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ React, Redux ΠΈ ΠΏΠ°Ρ€Ρ‹ Π΄Ρ€ΡƒΠ³ΠΈΡ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ, Π²Ρ‹ ΡΡ‚ΠΎΠ»ΠΊΠ½Ρ‘Ρ‚Π΅ΡΡŒ с мноТСством ΠΌΠ½Π΅Π½ΠΈΠΉ ΠΎ Β«ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹Ρ… инструмСнтах», с бСсчислСнным количСством Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ ΠΈ шаблонов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ½ΠΎΠ³Π΄Π° Π»Π΅Π³ΠΊΠΎ ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π° ΠΈΠ½ΠΎΠ³Π΄Π° β€” Π½Π΅Ρ‚.

  2. React Π½Π΅ ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π΅Π½ ΠΈ оставляСт Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π²Ρ‹Π±ΠΈΡ€Π°Ρ‚ΡŒ Π»ΡƒΡ‡ΡˆΠΈΠΉ способ развития. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π΅ΡˆΠ΅Π½ΠΎ ΡΠΈΠ»ΡŒΠ½Ρ‹ΠΌ лидСрством ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΈ Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΌΠΈ процСссами.

  3. React ΠΎΡ‚Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΎΡ‚ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² Π½Π° основС классов, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡ‚Π°Ρ‚ΡŒ прСпятствиСм для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π±ΠΎΠ»Π΅Π΅ ΠΊΠΎΠΌΡ„ΠΎΡ€Ρ‚Π½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ (ООП).

  4. JSX?

ΠŸΠ»ΡŽΡΡ‹:

  • Π›Π΅Π³ΠΊΠΎ ΠΈΠ·ΡƒΡ‡ΠΈΡ‚ΡŒ, благодаря простому Π΄ΠΈΠ·Π°ΠΉΠ½Ρƒ, использованию JSX (HTML-ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΉ синтаксис) для шаблонов ΠΈ ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠΉ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ тратят большС Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π½Π° написаниС соврСмСнного JavaScript ΠΈ мСньшС бСспокоятся ΠΎ ΠΊΠΎΠ΄Π΅, спСцифичном для Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠ°.

  • ΠžΡ‡Π΅Π½ΡŒ быстрая, благодаря Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ React Virtual DOM ΠΈ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌ оптимизациям Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΠ½Π³Π°.

  • ΠžΡ‚Π»ΠΈΡ‡Π½Π°Ρ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΠ½Π³Π° Π½Π° сторонС сСрвСра, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ Π΅Π³ΠΎ ΠΌΠΎΡ‰Π½ΠΎΠΉ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠΎΠΉ для ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ.

  • ΠŸΠ΅Ρ€Π²ΠΎΠΊΠ»Π°ΡΡΠ½Π°Ρ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Progressive Web App (PWA) благодаря Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρƒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ `create-react-app`.

  • ΠŸΡ€ΠΈΠ²ΡΠ·ΠΊΠ° Π΄Π°Π½Π½Ρ‹Ρ… являСтся одностороннСй, Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ мСньшС Π½Π΅ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠΎΠ±ΠΎΡ‡Π½Ρ‹Ρ… эффСктов.

  • Redux, самая популярная ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° для управлСния состояниСм ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π² React, Π΅Π΅ Π»Π΅Π³ΠΊΠΎ ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ.

  • React Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ программирования (FP), создавая простой Π² тСстировании ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ ΠΊΠΎΠ΄.

Redux

Redux - Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π°Ρ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ состояними прилоТСния Ρ‡Π΅Ρ€Π΅Π· ΠΎΠ΄ΠΈΠ½ Ρ†Π΅Π½Ρ‚Ρ€ - сторС. Основана Π½Π° Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π΅ Flux.

Redux-thunk - middleware - Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°, которая позволяСт Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ Action Creator Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ ΠΏΡ€ΠΈ этом Π΄Ρ€ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ вмСсто ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. Ѐункция ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ dispatch ΠΊΠ°ΠΊ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ Ρ‡Ρ‚ΠΎΠ±Ρ‹ послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ асинхр функция Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡŒΡΡ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ для диспатча ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ³ΠΎ синхр экшСна Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ‚Π΅Π»Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами позволяСт ΡΠΎΠ²Π΅Ρ€ΡˆΠ°Ρ‚ΡŒ API запросы ΠΈ ΡΠΎΠ²Π΅Ρ€ΡˆΠ°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΈΠ΅-Π»ΠΈΠ±ΠΎ дСйствия прямо Π² Action Creatore.

Redux-thunk(middleware) для асинхронных запросов.

MiddleWare - прослойка ΠΌΠ΅ΠΆΠ΄Ρƒ диспатчСм ΠΈ Ρ€Π΅Π΄ΡŒΡŽΡΠ΅Ρ€ΠΎΠΌ; ΡƒΡΠΈΠ»ΠΈΡ‚Π΅Π»ΡŒ ΠΈΠ»ΠΈ функция ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‰Π°Ρ стор ΠΈ Π²ΠΎΠ·Π²Ρ€ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, которая ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ dispatch.

ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡ‹ рСдакса

минусы рСдакса

JS

ΠžΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ES5 ΠΈ ES6

This

Event Loop

ΠŸΠΎΡ‚ΠΎΠΊ выполнСния Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅, Ρ€Π°Π²Π½ΠΎ ΠΊΠ°ΠΊ ΠΈ Π² Node.js, основан Π½Π° событийном Ρ†ΠΈΠΊΠ»Π΅.

ПониманиС Ρ€Π°Π±ΠΎΡ‚Ρ‹ событийного Ρ†ΠΈΠΊΠ»Π° Π²Π°ΠΆΠ½ΠΎ для ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΉ, ΠΈΠ½ΠΎΠ³Π΄Π° для ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠΉ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹.

Π‘Ρ€Π°Π·Ρƒ послС ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΌΠ°ΠΊΡ€ΠΎΠ·Π°Π΄Π°Ρ‡ΠΈ Π΄Π²ΠΈΠΆΠΎΠΊ исполняСт всС Π·Π°Π΄Π°Ρ‡ΠΈ ΠΈΠ· ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ ΠΌΠΈΠΊΡ€ΠΎΠ·Π°Π΄Π°Ρ‡ ΠΏΠ΅Ρ€Π΅Π΄ Ρ‚Π΅ΠΌ, ΠΊΠ°ΠΊ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΌΠ°ΠΊΡ€ΠΎΠ·Π°Π΄Π°Ρ‡Ρƒ ΠΈΠ»ΠΈ ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ΡŒ измСнСния Π½Π° страницС, ΠΈΠ»ΠΈ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π΅Ρ‰Ρ‘.

макротаски: setTimeout, setInterval, setImmediate, requestAnimationFrame, I/O, Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΠ½Π³ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ интСрфСйса microtasks: process.nextTick, Promises, Object.observe, MutationObserver

ΠœΠΈΠΊΡ€ΠΎΠ·Π°Π΄Π°Ρ‡ΠΈ приходят Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠ· ΠΊΠΎΠ΄Π°. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ ΠΎΠ½ΠΈ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ промисами: Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° .then/catch/finally становится ΠΌΠΈΠΊΡ€ΠΎΠ·Π°Π΄Π°Ρ‡Π΅ΠΉ. ΠœΠΈΠΊΡ€ΠΎΠ·Π°Π΄Π°Ρ‡ΠΈ Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Β«ΠΏΠΎΠ΄ ΠΊΠ°ΠΏΠΎΡ‚ΠΎΠΌΒ» await, Ρ‚.ΠΊ. это Ρ„ΠΎΡ€ΠΌΠ° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ промиса.

ΠžΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ промисов .then/.catch/.finally всСгда асинхронны. Π”Π°ΠΆΠ΅ ΠΊΠΎΠ³Π΄Π° промис сразу ΠΆΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½, ΠΊΠΎΠ΄ Π² строках Π½ΠΈΠΆΠ΅ .then/.catch/.finally Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΏΡƒΡ‰Π΅Π½ Π΄ΠΎ этих ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ².

let promise = Promise.resolve();

promise.then(() => alert("промис Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½"));

alert("ΠΊΠΎΠ΄ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½"); // этот alert показываСтся ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ

Если Π²Ρ‹ запуститС Π΅Π³ΠΎ, сначала Π²Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ ΠΊΠΎΠ΄ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½, Π° ΠΏΠΎΡ‚ΠΎΠΌ промис Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½. Π­Ρ‚ΠΎ странно, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ промис ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎ Π±Ρ‹Π» Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ с самого Π½Π°Ρ‡Π°Π»Π°. Π­Ρ‚ΠΎ происходит ΠΈΠ·-Π·Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ.

АсинхронныС Π·Π°Π΄Π°Ρ‡ΠΈ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ³ΠΎ управлСния. Для этого стандарт прСдусматриваСт Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΡŽΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ PromiseJobs, Π±ΠΎΠ»Π΅Π΅ ΠΈΠ·Π²Π΅ΡΡ‚Π½ΡƒΡŽ ΠΊΠ°ΠΊ Β«ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ ΠΌΠΈΠΊΡ€ΠΎΠ·Π°Π΄Π°Ρ‡ (microtask queue)Β» (Ρ‚Π΅Ρ€ΠΌΠΈΠ½ V8).

Как сказано Π² спСцификации:

  • ΠžΡ‡Π΅Ρ€Π΅Π΄ΡŒ опрСдСляСтся ΠΊΠ°ΠΊ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ-ΠΏΡ€ΠΈΡˆΡ‘Π»-ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ-ΡƒΡˆΡ‘Π» (FIFO): Π·Π°Π΄Π°Ρ‡ΠΈ, попавшиС Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌΠΈ, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ Ρ‚ΠΎΠΆΠ΅ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌΠΈ.

  • Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π·Π°Π΄Π°Ρ‡ΠΈ происходит Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ‚ΠΎΠΌ случаС, Ссли Π½ΠΈΡ‡Π΅Π³ΠΎ большС Π½Π΅ Π·Π°ΠΏΡƒΡ‰Π΅Π½ΠΎ.

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ .then/catch/finally Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ послС выполнСния Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ ΠΊΠΎΠ΄Π°.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€:

setTimeout(() => alert("timeout"));

Promise.resolve()
  .then(() => alert("promise"));

alert("code");

Какой здСсь Π±ΡƒΠ΄Π΅Ρ‚ порядок?

  1. code появляСтся ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ, Ρ‚.ΠΊ. это ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ синхронный Π²Ρ‹Π·ΠΎΠ².

  2. promise появляСтся Π²Ρ‚ΠΎΡ€Ρ‹ΠΌ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ .then ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ Ρ‡Π΅Ρ€Π΅Π· ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ ΠΌΠΈΠΊΡ€ΠΎΠ·Π°Π΄Π°Ρ‡ ΠΈ выполняСтся послС Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ синхронного ΠΊΠΎΠ΄Π°.

  3. timeout появляСтся послСдним, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ это ΠΌΠ°ΠΊΡ€ΠΎΠ·Π°Π΄Π°Ρ‡Π°.

ВсС ΠΌΠΈΠΊΡ€ΠΎΠ·Π°Π΄Π°Ρ‡ΠΈ Π·Π°Π²Π΅Ρ€ΡˆΠ°ΡŽΡ‚ΡΡ Π΄ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΊΠ°ΠΊΠΈΡ…-Π»ΠΈΠ±ΠΎ событий ΠΈΠ»ΠΈ Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΠ½Π³Π°, ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π° ΠΊ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΌΠ°ΠΊΡ€ΠΎΠ·Π°Π΄Π°Ρ‡Π΅.

Useful link:

Promise

Π’ ES6 появилась встроСнная ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° промисов. ΠŸΡ€ΠΎΠΌΠΈΡ это ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΆΠ΄Ρ‘Ρ‚ выполнСния асинхронной ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, послС ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ (Ρ‚.Π΅. послС выполнСния) промис ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΎΠ΄Π½ΠΎ ΠΈΠ· Π΄Π²ΡƒΡ… состояний: fulfilled (resolved, ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅) ΠΈΠ»ΠΈ rejected (Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΎ с ошибкой). Π’ сущности, промис - это Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹ записываСтС Π΄Π²Π° коллбэка вмСсто Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ ΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

Promise - observable, Π½ΠΎ ΠΎΡ‚Π΄Π°Π΅Ρ‚ ΠΎΠ΄Π½ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

ΠžΠ±Π΅Ρ‰Π°Π½ΠΈΡ ~ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π°. Callbacks => Promises.

Π‘Π΅Π· ΠΎΠ±Π΅Ρ‰Π°Π½ΠΈΠΉ присутствовала Π±Ρ‹ Π³Ρ€ΠΎΠΌΠΎΠ·ΠΊΠΎΡΡ‚ΡŒ ΠΊΠΎΠ΄Π° ΠΈ ΠΎΠ³Ρ€ΠΎΠΌΠ½ΠΎΠ΅ ΠΊΠΎΠ»-Π²ΠΎ коллбэков Π² коллбэках (CallBackHell). Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ старомодных ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½Ρ‹Ρ… коллбэков промис Π΄Π°Π΅Ρ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΠΈ:

  • Коллбэки Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ Π²Ρ‹Π·Π²Π°Π½Ρ‹ Π΄ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ события Π² событийном Ρ†ΠΈΠΊΠ»Π΅ JavaScript.

  • КоллбСки, Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½Ρ‹Π΅ Ρ‡Π΅Ρ€Π΅Π· .then Π΄Π°ΠΆΠ΅ послС ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ Π½Π΅ΡƒΠ΄Π°Ρ‡Π½ΠΎΠ³ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ асинхронной ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, Π±ΡƒΠ΄ΡƒΡ‚ Ρ‚Π°ΠΊΠΆΠ΅ Π²Ρ‹Π·Π²Π°Π½Ρ‹.

  • НСсколько коллбэков ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΎ Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ .then Π½ΡƒΠΆΠ½ΠΎΠ΅ количСство Ρ€Π°Π·, ΠΈ ΠΎΠ½ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ нСзависимо Π² порядкС добавлСния.

Но Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ нСпосрСдствСнная польза ΠΎΡ‚ промисов - Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠ° Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² (chaining). Β«Π§Π΅ΠΉΠ½ΠΈΠ½Π³Β» (chaining), Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ асинхронныС Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠΈ ΠΈΠ· промисов – ΠΏΠΎΠΆΠ°Π»ΡƒΠΉ, основная ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°, ΠΈΠ·-Π·Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΈ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ промисы. ΠŸΡ€ΠΈ Ρ‡Π΅ΠΉΠ½ΠΈΠ½Π³Π΅, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π²Ρ‹Π·ΠΎΠ²Π°Ρ… .then…then…then, Π² ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ then ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΎΡ‚ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ.

Если then Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ промис, Ρ‚ΠΎ Π΄ΠΎ Π΅Π³ΠΎ выполнСния ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΠΉΡ‚ΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ врСмя, ΠΎΡΡ‚Π°Π²ΡˆΠ°ΡΡΡ Ρ‡Π°ΡΡ‚ΡŒ Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠΈ Π±ΡƒΠ΄Π΅Ρ‚ ΠΆΠ΄Π°Ρ‚ΡŒ.

Π’ΠΎ Π΅ΡΡ‚ΡŒ, Π»ΠΎΠ³ΠΈΠΊΠ° довольно проста:

  • Π’ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ then ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρ‹.

  • МоТно Π΅Π³ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ синхронно ΠΈ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ JSON.parse). Или ΠΆΠ΅, Ссли Π½ΡƒΠΆΠ½Π° асинхронная ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° – ΠΈΠ½ΠΈΡ†ΠΈΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΅Ρ‘ ΠΈ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ промис.

Promise.resolve() ΠΈ Promise.reject() ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΠΉ способ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΡƒΠΆΠ΅ ΡƒΡΠΏΠ΅ΡˆΠ½Ρ‹Π΅ ΠΈΠ»ΠΈ ΠΎΡ‚ΠΊΠ»ΠΎΠ½Π΅Π½Π½Ρ‹Π΅ промисы соотвСтствСнно. Π­Ρ‚ΠΎ ΠΈΠ½ΠΎΠ³Π΄Π° Π±Ρ‹Π²Π°Π΅Ρ‚ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ.

let promise = new Promise(function(resolve, reject) {
  setTimeout(() => resolve("done!"), 1000);
});

// resolve запустит ΠΏΠ΅Ρ€Π²ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½ΡƒΡŽ Π² .then
promise.then(
  result => alert(result), // Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚ "done!" Ρ‡Π΅Ρ€Π΅Π· ΠΎΠ΄Π½Ρƒ сСкунду
  error => alert(error) // Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΏΡƒΡ‰Π΅Π½Π°
);
let promise = new Promise(function(resolve, reject) {
  setTimeout(() => reject(new Error("Whoops!")), 1000);
});

// reject запустит Π²Ρ‚ΠΎΡ€ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½ΡƒΡŽ Π² .then
promise.then(
  result => alert(result), // Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΏΡƒΡ‰Π΅Π½Π°
  error => alert(error) // Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚ "Error: Whoops!" спустя ΠΎΠ΄Π½Ρƒ сСкунду
);

Promise.all() ΠΈ Promise.race() - Π΄Π²Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ асинхронныС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ.

ΠœΠ΅Ρ‚ΠΎΠ΄ Promise.all(iterable) Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΎΠ±Π΅Ρ‰Π°Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ выполнится Ρ‚ΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° Π±ΡƒΠ΄ΡƒΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Ρ‹ всС обСщания, ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½Ρ‹Π΅ Π² Π²ΠΈΠ΄Π΅ пСрСчисляСмого Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°, ΠΈΠ»ΠΈ ΠΎΡ‚ΠΊΠ»ΠΎΠ½Π΅Π½ΠΎ любоС ΠΈΠ· ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½Ρ‹Ρ… ΠΎΠ±Π΅Ρ‰Π°Π½ΠΈΠΉ.

Π’Ρ‹Π·ΠΎΠ² Promise.race, ΠΊΠ°ΠΊ ΠΈ Promise.all, ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ ΠΈΡ‚Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ с промисами, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ, ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π½ΠΎΠ²Ρ‹ΠΉ промис. Но, Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ Promise.all, Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ²ΡˆΠΈΠΉΡΡ промис ΠΈΠ· списка. ΠžΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΡƒΡŽΡ‚ΡΡ.

ΠœΠ΅Ρ‚ΠΎΠ΄ then() Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Promise. ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Π΄Π²Π° Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°: колбэк-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для случаСв выполнСния ΠΈ отклонСния промиса.

ΠŸΡ€ΠΎΠΌΠΈΡΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡ – это ΠΊΠΎΠ³Π΄Π° Π±Π΅Ρ€ΡƒΡ‚ Π°ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΈ Π΄Π΅Π»Π°ΡŽΡ‚ для Π½Π΅Ρ‘ ΠΎΠ±Ρ‘Ρ€Ρ‚ΠΊΡƒ, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰ΡƒΡŽ промис.

ПослС промисификации использованиС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π·Π°Ρ‡Π°ΡΡ‚ΡƒΡŽ становится Π³ΠΎΡ€Π°Π·Π΄ΠΎ ΡƒΠ΄ΠΎΠ±Π½Π΅Π΅.

Π’ качСствС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° сдСлаСм Ρ‚Π°ΠΊΡƒΡŽ ΠΎΠ±Ρ‘Ρ€Ρ‚ΠΊΡƒ для запросов ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ XMLHttpRequest.

Π—Π°ΠΌΡ‹ΠΊΠ°Π½ΠΈΠ΅

Π—Π°ΠΌΡ‹ΠΊΠ°Π½ΠΈΠ΅ - это комбинация Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ лСксичСского окруТСния, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ эта функция Π±Ρ‹Π»Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π°. Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, Π·Π°ΠΌΡ‹ΠΊΠ°Π½ΠΈΠ΅ Π΄Π°Π΅Ρ‚ Π²Π°ΠΌ доступ ΠΊ Scope внСшнСй Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠ· Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π’ JavaScript замыкания ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· ΠΏΡ€ΠΈ созданиии Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π²ΠΎ врСмя Π΅Π΅ создания.

Π—Π°ΠΌΡ‹ΠΊΠ°Π½ΠΈΠ΅ это способ получСния доступа ΠΈ управлСния внСшними ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ ΠΈΠ· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

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

function getCounter() {
  let counter = 0;
  return function() {
    return counter++;
  }
}

let count = getCounter();

console.log(count());  // 0
console.log(count());  // 1
console.log(count());  // 2

ΠŸΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΡ‹

JavaScript β€” это ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ язык, основанный Π½Π° ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ, Π° Π½Π΅ Π½Π° классах. ΠŸΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΡ‹ - это ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ JavaScript Π½Π°ΡΠ»Π΅Π΄ΡƒΡŽΡ‚ свойства Π΄Ρ€ΡƒΠ³ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³Π°.

ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ конструктор ΠΈΠΌΠ΅Π΅Ρ‚ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ΅ свойство prototype. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, созданный конструктором, содСрТит ссылку Π½Π° свойство prototype своСго конструктора. Π­Ρ‚Π° ссылка хранится Π² свойствС __proto__.

JavaScript часто ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ ΠΊΠ°ΠΊ язык ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠ½ΠΎΠ³ΠΎ наслСдования β€” ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΈΠΌΠ΅Π΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚-ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ выступаСт ΠΊΠ°ΠΊ шаблон, ΠΎΡ‚ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ наслСдуСт ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈ свойства. ΠžΠ±ΡŠΠ΅ΠΊΡ‚-ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏ Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ свой ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏ ΠΈ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ свойства ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅. Π­Ρ‚ΠΎ часто называСтся Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠΎΠΉ ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠΎΠ² ΠΈ ΠΎΠ±ΡŠΡΡΠ½ΡΠ΅Ρ‚ ΠΏΠΎΡ‡Π΅ΠΌΡƒ ΠΎΠ΄Π½ΠΈΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ доступны свойства ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°Ρ….

Π’ΠΎΡ‡Π½Π΅Π΅, свойства ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ΡΡ Π² свойствС prototype Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ-конструктора ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², Π° Π½Π΅ Π² самих ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°Ρ….

Если ΠΎΠ΄ΠΈΠ½ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈΠΌΠ΅Π΅Ρ‚ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΡƒΡŽ ссылку __proto__ Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, Ρ‚ΠΎ ΠΏΡ€ΠΈ Ρ‡Ρ‚Π΅Π½ΠΈΠΈ свойства ΠΈΠ· Π½Π΅Π³ΠΎ, Ссли свойство отсутствуСт Π² самом ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅, ΠΎΠ½ΠΎ ищСтся Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅ __proto__. ΠžΠ±ΡŠΠ΅ΠΊΡ‚, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ ссылка __proto__, называСтся Β«ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠΎΠΌΒ». Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏ – это Β«Ρ€Π΅Π·Π΅Ρ€Π²Π½ΠΎΠ΅ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ свойств ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ²Β» ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, автоматичСски ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ΅ ΠΏΡ€ΠΈ поискС.

Π’ JavaScript создаСтся связь ΠΌΠ΅ΠΆΠ΄Ρƒ экзСмпляром ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΈ Π΅Π³ΠΎ ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠΎΠΌ (свойство __proto__, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ являСтся ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹ΠΌ ΠΎΡ‚ свойства prototype конструктора), Π° свойства ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π΅ ΠΏΠΎ Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠ΅ ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠΎΠ².

Π—Π½Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Π½Π° ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ вопрос ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ

Common

Scrum, Ρ†Π΅Ρ€Π΅ΠΌΠΎΠ½ΠΈΠΈ CI/CD/CD

Π”ΠžΠšΠ•Π  vs Virtual Machine

Docker β€” это программная ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° для быстрой Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ, тСстирования ΠΈ развСртывания ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. Docker ΡƒΠΏΠ°ΠΊΠΎΠ²Ρ‹Π²Π°Π΅Ρ‚ ПО Π² стандартизованныС Π±Π»ΠΎΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°ΠΌΠΈ.

Π§Ρ‚ΠΎ прСдставляСт ΠΈΠ· сСбя Docker. Π’Ρ€ΠΈ основных Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π° Π² экосистСмС Docker:

  • ΠΎΠ±Ρ€Π°Π· (image) – готовая файловая систСма, сформированная ΠΏΠΎ инструкциям ΠΈΠ· Dockerfile ΠΈ слуТащая ΠΏΡ€ΠΎΠΎΠ±Ρ€Π°Π·ΠΎΠΌ для запускаСмых ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ².

  • рССстр (registry) – Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ ΠΎΠ±Ρ€Π°Π·ΠΎΠ². Docker Hub, ΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ шла Ρ€Π΅Ρ‡ΡŒ Π²Ρ‹ΡˆΠ΅, - это ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹ΠΉ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ, Π³Π΄Π΅ хранится ΠΎΠ³Ρ€ΠΎΠΌΠ½ΠΎΠ΅ количСство ΠΎΠ±Ρ€Π°Π·ΠΎΠ²;

  • ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ (container) – Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Ρ‚.Π΅. ΡΠΎΠ²ΠΎΠΊΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ процСссов ΠΈ ΠΎΠ±Ρ€Π°Π·Π°.

Цитируя Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² Docker, Β«ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ β€” это стандартная Π΅Π΄ΠΈΠ½ΠΈΡ†Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния, Π² ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΡƒΠΏΠ°ΠΊΠΎΠ²Π°Π½ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ со всСми Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΌΠΈ для Π΅Π³ΠΎ Ρ€Π°Π±ΠΎΡ‚Ρ‹ зависимостями β€” ΠΊΠΎΠ΄ΠΎΠΌ прилоТСния, срСдой запуска, систСмными инструмСнтами, Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°ΠΌΠΈ ΠΈ настройками». ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΏΠΎΠΊΠ° ΠΆΠΈΠ²Π΅Ρ‚ процСсс Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½Ρ‹ΠΉ Π² этом ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅. БобствСнно ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ ΠΊΠ°ΠΊ малСнькая опСрационная систСма (хотя это ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ Π½Π΅ Ρ‚Π°ΠΊ) с Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΌΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°ΠΌΠΈ ΠΈ зависимостями для Ρ€Π°Π±ΠΎΡ‚Ρ‹ прилоТСния Π²Π½ΡƒΡ‚Ρ€ΠΈ Π½Π΅Π³ΠΎ. Он позволяСт Β«ΡƒΠΏΠ°ΠΊΠΎΠ²Π°Ρ‚ΡŒΒ» ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ Π²Π΅Π±-сайт со всСм Π΅Π³ΠΎ ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ΠΌ ΠΈ зависимостями Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π² дальнСйшСм ΠΌΠΎΠΆΠ½ΠΎ Π»Π΅Π³ΠΊΠΎ ΠΈ просто ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ: ΠΏΠ΅Ρ€Π΅Π½ΠΎΡΠΈΡ‚ΡŒ Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ сСрвСр, ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, ΠΎΠ±Π½ΠΎΠ²Π»ΡΡ‚ΡŒ.

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

  1. Docker – это Π² ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ удобство: Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ дСйствия – ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π³ΠΎΡ‚ΠΎΠ²ΠΎΠ΅ для запуска ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ ПО – становится Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΡ‰Π΅ ΠΈ быстрСС. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Docker, Π²Ρ‹ смоТСтС ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ свою Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΈ ΡΠΊΠΎΠ½ΠΎΠΌΠΈΡ‚ΡŒ врСмя

  2. ΠžΠ±Ρ€Π°Π·Ρ‹ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² Docker содСрТат Π² сСбС всС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, поэтому ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΎΠ² с Π΄Ρ€ΡƒΠ³ΠΈΠΌ ПО Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚.

  3. Docker, Π²Ρ‹ смоТСтС Π»Π΅Π³ΠΊΠΎ пСрСнСсти ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² Π΄Ρ€ΡƒΠ³ΡƒΡŽ срСду: достаточно Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ ΠΎΠ±Ρ€Π°Π· Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ ΠΈ ΡΠΊΠ°Ρ‡Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π½Π° сСрвСрС. И Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π΅ Π±Π΅ΡΠΏΠΎΠΊΠΎΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ всС ваши рСсурсы – Docker позволяСт Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ количСство рСсурсов, Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ ΠΏΠΎΠ΄ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅.

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

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

  6. ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΡΠΎΠΊΡ€Π°Ρ‚ΠΈΡ‚ΡŒ врСмя Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ прилоТСния ΠΈ ΡƒΠΏΡ€ΠΎΡ‰Π°ΡŽΡ‚ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΈΠΌ Π² ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ΅Π½Π΅ благодаря лёгкости Π² настройкС ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ, возмоТности Π²Π΅Ρ€ΡΠΈΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΅Ρ‘ вмСстС с ΠΊΠΎΠ΄ΠΎΠΌ прилоТСния ΠΈ ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΌ инструмСнтам оркСстрирования, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΌ быстро ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ инфраструктуру. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, фактичСскоС отсутствиС привязки ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² ΠΊ хостинговой ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅ Π΄Π°Ρ‘Ρ‚ ΠΎΠ³Ρ€ΠΎΠΌΠ½ΡƒΡŽ Π³ΠΈΠ±ΠΊΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΈ Π²Ρ‹Π±ΠΎΡ€Π΅ ΠΈΠ»ΠΈ смСнС ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€Π° β€” Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ ΠΈΡ… Π±Π΅Π· ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠΉ Π² ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΌ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Π½Π° Π»ΠΈΡ‡Π½ΠΎΠΌ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅, bare metal сСрвСрах ΠΈ Π² ΠΎΠ±Π»Π°Ρ‡Π½Ρ‹Ρ… сСрвисах.

Π§Π΅ΠΌ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ ΠΎΡ‚ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… машин

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

  • ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ мСньшС рСсурсов для своСй Ρ€Π°Π±ΠΎΡ‚Ρ‹, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ сказываСтся Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΈ Π±ΡŽΠ΄ΠΆΠ΅Ρ‚Π΅.

  • ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ‚ΠΎΠΉ ΠΆΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмС, Ρ‡Ρ‚ΠΎ стоит Π½Π° host-систСмС β€” Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Windows-ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ Π½Π° host-систСмС с Linux Π½Π΅ получится (Π½Π° ΠΏΠ΅Ρ€ΡΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… устройствах это ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ обходится с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ). Однако это Π½Π΅ относится ΠΊ Ρ€Π°Π·Π½Ρ‹ΠΌ дистрибутивам ΠΎΠ΄Π½ΠΎΠΉ ΠΈ Ρ‚ΠΎΠΉ ΠΆΠ΅ ОБ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ubuntu ΠΈ Alpine Linux.

  • ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ ΠΌΠ΅Π½ΡŒΡˆΡƒΡŽ ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒ изоляции, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ядро host-систСмы, Ρ‡Ρ‚ΠΎ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ создаёт бóльшиС риски Π² эксплуатации ΠΏΡ€ΠΈ Π½Π΅Π±Ρ€Π΅ΠΆΠ½ΠΎΠΌ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΈ ΠΊ бСзопасности.

ΠšΡ€ΠΎΡΡΠ±Ρ€Π°ΡƒΠ·Π΅Ρ€Π½ΠΎΡΡ‚ΡŒ/ΠΏΠΎΠ»ΠΈΡ„Ρ„ΠΈΠ»Ρ‹ Π² IE

ΠšΡ€ΠΎΡΡΠ±Ρ€Π°ΡƒΠ·Π΅Ρ€Π½ΠΎΡΡ‚ΡŒ β€” это ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ сайта ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒΡΡ Π² Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π°Ρ…. РСсурс Π΄ΠΎΠ»ΠΆΠ΅Π½ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎ Π²ΠΎ всСх вСрсиях ΠΎΠ±ΠΎΠ·Ρ€Π΅Π²Π°Ρ‚Π΅Π»Π΅ΠΉ.

Как Π²Π΅Ρ€ΡΡ‚Π°Ρ‚ΡŒ кроссбраузСрно?

  1. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ сброс ΠΈΠ»ΠΈ Π½ΠΎΡ€ΠΌΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ стандартных стилСй Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π°. Reset.css ΠΈΠ»ΠΈ normalize.css. Если ΠΊΡ€Π°Ρ‚ΠΊΠΎ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π°Ρ…, Ρ‚ΠΎ смысл reset-Π° Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ± Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ Π΄Π΅Ρ„ΠΎΠ»Ρ‚Π½Ρ‹Ρ… стилСй Π±Ρ€Π°ΡƒΠ·Π΅Ρ€ΠΎΠ² ΠΎΠ±Π½ΡƒΠ»ΠΈΡ‚ΡŒ (всС отступы, Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ Ρ‚.Π΄) ΠΈ Π½Π° этой основС ΠΏΠΈΡΠ°Ρ‚ΡŒ своС. Бмысл normalize β€” привСсти всС эти стили ΠΊ Π΅Π΄ΠΈΠ½ΠΎΠΌΡƒ Π²ΠΈΠ΄Ρƒ ΠΈ значСниям. ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΏΠΎ ссылкам:) Π•ΡΡ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ сторонников ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π°, Π΅ΡΡ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ сторонников Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ. МоТно ΠΎΡ‡Π΅Π½ΡŒ Π΄ΠΎΠ»Π³ΠΎ с ΠΏΠ΅Π½ΠΎΠΉ Ρƒ Ρ€Ρ‚Π° ΠΎΠ±ΡΡƒΠΆΠ΄Π°Ρ‚ΡŒ прСимущСства ΠΈΠ»ΠΈ нСдостатки ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· Π½ΠΈΡ…, Π½ΠΎ всСгда Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ инструмСнт Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΏΠΎΠ΄ Π·Π°Π΄Π°Ρ‡Ρƒ. Π’Ρ‹Π±ΠΈΡ€Π°ΠΉΡ‚Π΅ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π²Π°ΠΌ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚.

  2. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π²Π΅Π½Π΄ΠΎΡ€Π½Ρ‹Π΅ прСфиксы, Π³Π΄Π΅ это Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ. Π’Π΅Π½Π΄ΠΎΡ€Π½Ρ‹Π΅ прСфиксы β€” это приставки, добавляСмыС Π² свойства CSS, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ производитСлями (Π²Π΅Π½Π΄ΠΎΡ€Π°ΠΌΠΈ) Π±Ρ€Π°ΡƒΠ·Π΅Ρ€ΠΎΠ² для ΡΠΊΡΠΏΠ΅Ρ€ΠΈΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Ρ‹Ρ…, Π΅Ρ‰Π΅ Π½Π΅ принятых Π² стандарт CSS свойств. Π’ΠΎ Π΅ΡΡ‚ΡŒ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ссли ΠΊΠ°ΠΊΠΎΠΉ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ ΠΈΠ· Π±Ρ€Π°ΡƒΠ·Π΅Ρ€ΠΎΠ² Ρ€Π΅ΡˆΠΈΠ» Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Ρ‡Ρ‚ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ ΠΊΡ€ΡƒΡ‚ΠΎΠ΅, Π½ΠΎ этот Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π» ΠΈ ΠΏΡ€Π°Π²ΠΈΠ»Π° Π΅Π³ΠΎ повСдСния Π΅Ρ‰Π΅ Π΄ΠΎ ΠΊΠΎΠ½Ρ†Π° Π½Π΅ ΠΎΠ³ΠΎΠ²ΠΎΡ€Π΅Π½Ρ‹ ΠΈ Π½Π΅ ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½Ρ‹ с составитСлями стандартов, Ρ‚ΠΎ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ с ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ приставкой. Бвойство с Ρ‚Π°ΠΊΠΎΠΉ приставкой Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅, для ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ эта приставка Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Π°. Π‘ΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Π²Π΅Π½Π΄ΠΎΡ€Π½Ρ‹Π΅ прСфиксы:

  • -o- для Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π° ΠžΠΏΠ΅Ρ€Π°

  • -moz- для Π±Ρ€Π°ΡƒΠ·Π΅Ρ€ΠΎΠ² ΠΈΠ· сСмСйства Mozilla

  • -ms- для Internet Explorer 8

  • -webkit- прСфикс для Π±Ρ€Π°ΡƒΠ·Π΅Ρ€ΠΎΠ², построСнных Π½Π° Π΄Π²ΠΈΠΆΠΊΠ΅ Webkit, Π² частности Safari ΠΈ Chrome (Π½Ρƒ ΠΈ ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ ΠΆΠ΅, Π½ΠΎΠ²Ρ‹ΠΉ Edge:)

  • -icab- для Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π° iCab (Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ заявлСно Π½Π° Ρ€ΠΎΠ΄Π½ΠΎΠΌ сайтС, Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π° для Apple)

  • -khtml- KHTML β€” ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ для просмотра HTML Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹ΠΉ для срСды KDE для UNIX-систСм.

НапримСр, ΠΌΡ‹ ΡƒΠΆΠ΅ Π΄Π°Π²Π½ΠΎ ΠΌΠΎΠΆΠ΅ΠΌ ΡΡ‚ΠΈΠ»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ placeholder для input-ΠΎΠ², Π½ΠΎ ΠΊΠ°ΠΊΠΈΠ΅-Ρ‚ΠΎ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Ρ‹ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π»ΠΈ это ΠΊΠ°ΠΊ псСвдоэлСмСнт, Π° ΠΊΠ°ΠΊΠΈΠ΅-Ρ‚ΠΎ β€” ΠΊΠ°ΠΊ псСвдокласс. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΡ‚ΠΈΠ»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ placeholder ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎ для всСх Π±Ρ€Π°ΡƒΠ·Π΅Ρ€ΠΎΠ², Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ‚Π°ΠΊ:

::-webkit-input-placeholder { /* Chrome/Opera/Safari */
    color: pink;
}

::-moz-placeholder {          /* Firefox 19+ */
    color: pink;
}

:-ms-input-placeholder {      /* IE 10+ */
    color: pink;
}

:-moz-placeholder {           /* Firefox 18- */
    color: pink;
}

3. CSS-Ρ…Π°ΠΊΠΈ. Π­Ρ‚ΠΎ использованиС ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… свойств, ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅ΠΌΡ‹Ρ… Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌΠΈ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π°ΠΌΠΈ. Для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π° ΠΈΠΌΠ΅ΡŽΡ‚ΡΡ свои собствСнныС Ρ…Π°ΠΊΠΈ, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ практичСски ΠΏΠΎΠ»Π½ΠΎΠΉ кроссбраузСрности. Π‘Π°ΠΌΠΈ Ρ…Π°ΠΊΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π² Π˜Π½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Π΅.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ css-Ρ…Π°ΠΊΠ°, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰Π΅Π³ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Firefox:

@-moz-document url-prefix() {
    .hackBlock {
        background: blue;
    }
} 

CSS-Ρ…Π°ΠΊΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π½Π΅ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ способом исправлСния ошибок. ИспользованиС ΠΈΡ… ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ ΠΏΠ»ΠΎΡ…ΠΎΠΉ Ρ‡ΠΈΡ‚Π°Π±Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΊΠΎΠ΄Π°, нСвалидности, нСкачСствСнной ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ΅ Π² Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ.

4. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΏΠΎΠ»ΠΈΡ„ΠΈΠ»Π»Ρ‹. ΠŸΠΎΠ»ΠΈΡ„ΠΈΠ»Π» - ΠΊΠΎΠ΄, Ρ‡Π°Ρ‰Π΅ всСго Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°, которая добавляСт Π² старыС Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Ρ‹ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ возмоТностСй, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π² соврСмСнных Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π°Ρ… ΡΠ²Π»ΡΡŽΡ‚ΡΡ встроСнными.

4. НовыС свойства CSS ΠΈ JS ΠΏΠ΅Ρ€Π΅Π΄ использованиСм провСряйтС Π½Π° сайтС caniuse.com. Π­Ρ‚ΠΎ рСсурс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ отслСТиваСт ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ самыми популярными Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π°ΠΌΠΈ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… свойств CSS ΠΈ JS. Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΡƒΡŽ-Ρ‚ΠΎ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΡŽ, Π½ΠΎ Ρ‚ΠΎΡ‡Π½ΠΎ Π½Π΅ ΡƒΠ²Π΅Ρ€Π΅Π½Ρ‹, кроссбраузСрная Π»ΠΈ ΠΎΠ½Π°, ΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π»ΠΈ Π΅Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² соотвСтствии с вашими ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€ΠΎΠ², Π·Π°Ρ…ΠΎΠ΄ΠΈΡ‚Π΅ Π½Π° caniuse ΠΈ провСряйтС. 5. ВСстируйтС свою Ρ€Π°Π±ΠΎΡ‚Ρƒ Π² Ρ€Π°Π·Π½Ρ‹Ρ… Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π°Ρ…. 6. Π˜Π½Ρ‚Π΅Ρ€Π΅ΡΡƒΠΉΡ‚Π΅ΡΡŒ послСдними обновлСниями Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π°Ρ… ΠΈ Π²ΠΎ Ρ„Ρ€ΠΎΠ½Ρ‚-эндС Π² Ρ†Π΅Π»ΠΎΠΌ. Масса сайтов, Ρ‚ΠΈΠΏΠ° habr.ru, dou.ua, codeguida.com ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΡŽΡ‚ ΠΏΠΎΠ΄Π±ΠΎΡ€ΠΊΠΈ с самыми интСрСсными ΠΈ свСТими ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π°ΠΌΠΈ ΠΏΠΎ Ρ„Ρ€ΠΎΠ½Ρ‚-энду.

SELF PRESENTATION!

ΠšΡ€ΠΎΠ½ΠΎΡ с января.

Took part in development of the "Override Wage and Work Rules" feature. It was a modal window, where users are able to override and edit wages and Work Rules.

  1. Built flow CI/CD and local DEV environment;

  2. Integrated UI with NodeJS and Backend.

Took part in code review, sprint planning, demo sessions, retrospectives.

Как справлялся с трудностями?

Зависит ΠΎΡ‚ таски, ΠΏΡ€Π΅ΠΆΠ΄Π΅ всСго ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ, обращался ΠΊ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ. Если ΠΏΠΎΠ½ΠΈΠΌΠ°Π», Ρ‡Ρ‚ΠΎ Ρ‚Ρ€Π°Ρ‡Ρƒ ΠΎΠ²Π΅Ρ€ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, обращался Π·Π° ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊ ΠΊΠ΅ΠΉ Π΄Π΅Π²Ρƒ, ставил Π² ΠΈΠ·Π²Π΅ΡΡ‚Π½ΠΎΡΡ‚ΡŒ Π’ΠΈΠΌ Π›ΠΈΠ΄Π°. ПослС Ρ€Π°Π±ΠΎΡ‚Ρ‹ Ρ‡Π΅ΠΊΠ°Π» курсы ΠΏΠΎ ангуляру.

ДостиТСния

Π‘Π΅ΠΉΠ΄ΠΆ ΠΎΡ‚ Ρ‚ΠΈΠΌ Π»ΠΈΠ΄Π° Π²ΠΎ врСмя отпуска ΠΊΠ΅ΠΉ Π΄Π΅Π²Π°.

Π’Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ

Grunt, Webpack, Docker, Lodash, Git, Jenkins, BitBucket, TSLint, Jira, Confluence. JavaScript, ES6, TypeScript, AJAX, AngularJS, HTML5, CSS, LESS, Jasmine, Karma, NodeJS.

Π’ΠΈΠΌΠ°

Dev Team: 5 members (3 BE, 2 FE) QA Team: 3 engineers (2 manual, 1 automation); SM: 1 member; BA: 1 member.

+Scrum

+FightClub

How to fill 'Past Projects' section in UPSA?

Examples:

Last updated

Was this helpful?