React Ρ…ΡƒΠΊΠΈ Ρ‡Ρ‚ΠΎ это

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² Ρ…ΡƒΠΊΠΈ

Π₯ΡƒΠΊΠΈ β€” Π½ΠΎΠ²ΠΎΠ²Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² React 16.8, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ позволяСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ состояниС ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ возмоТности React Π±Π΅Π· написания классов.

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°Ρ‡Π°Ρ‚ΡŒ ΠΈΠ·ΡƒΡ‡Π°Ρ‚ΡŒ Ρ…ΡƒΠΊΠΈ Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ страницС. Π—Π΄Π΅ΡΡŒ ΠΆΠ΅ ΠΌΡ‹ расскаТСм, Π·Π°Ρ‡Π΅ΠΌ ΠΌΡ‹ Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ Ρ…ΡƒΠΊΠΈ Π² React, ΠΈ ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ ΠΏΠΎΠΌΠΎΠ³ΡƒΡ‚ Π²Π°ΠΌ ΠΏΠΈΡΠ°Ρ‚ΡŒ прилоТСния.

React 16.8.0 это ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Ρ€Π΅Π»ΠΈΠ·, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‰ΠΈΠΉ Ρ…ΡƒΠΊΠΈ. ΠŸΡ€ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΈ вСрсии, Π½Π΅ Π·Π°Π±ΡƒΠ΄ΡŒΡ‚Π΅ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΈ всС зависимости, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ React DOM. ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Ρ…ΡƒΠΊΠΎΠ² Π² React Native появилась Π² вСрсии 0.59.

На ΠΊΠΎΠ½Ρ„Π΅Ρ€Π΅Π½Ρ†ΠΈΠΈ React Conf 2018, Π‘ΠΎΡ„ΠΈ АлпСрт (Sophie Alpert) ΠΈ Дэн Абрамов (Dan Abramov) прСдставили Ρ…ΡƒΠΊΠΈ, Π° Π Π°ΠΉΠ½ ЀлорСнс (Ryan Florence) ΠΏΠΎΠΊΠ°Π·Π°Π», ΠΊΠ°ΠΊ ΠΈΡ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ. Π’ΠΈΠ΄Π΅ΠΎ ΠΊΠΎΠ½Ρ„Π΅Ρ€Π΅Π½Ρ†ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ здСсь:

Полная обратная ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ

ΠŸΠ΅Ρ€Π΅Π΄ Ρ‚Π΅ΠΌ, ΠΊΠ°ΠΊ ΠΌΡ‹ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΠΌ, ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Ρ…ΡƒΠΊΠΈ:

ΠœΡ‹ Π½Π΅ ΠΏΠ»Π°Π½ΠΈΡ€ΡƒΠ΅ΠΌ ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ классы ΠΈΠ· React. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ большС ΠΎ стратСгии постСпСнного внСдрСния Ρ…ΡƒΠΊΠΎΠ² Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ Π½ΠΈΠΆΠ΅.

Π₯ΡƒΠΊΠΈ Π½Π΅ ΠΌΠ΅Π½ΡΡŽΡ‚ ваши знания ΠΎ концСпциях Π² React. ВмСсто этого, Ρ…ΡƒΠΊΠΈ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ Π±ΠΎΠ»Π΅Π΅ прямой доступ ΠΊ API ΡƒΠΆΠ΅ Π·Π½Π°ΠΊΠΎΠΌΡ‹Ρ… Π²Π°ΠΌ понятий: пропсов, состояния, контСкста, Ρ€Π΅Ρ„ΠΎΠ², ΠΈ ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π°. ΠœΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ рассмотрим ΠΌΠΎΡ‰Π½Ρ‹ΠΉ способ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Π°Ρ‚ΡŒ эти понятия с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ…ΡƒΠΊΠΎΠ².

Π§Ρ‚ΠΎΠ±Ρ‹ Π½Π°Ρ‡Π°Ρ‚ΡŒ ΠΈΠ·ΡƒΡ‡Π°Ρ‚ΡŒ Ρ…ΡƒΠΊΠΈ, ΠΏΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ страницу! На этой страницС ΠΌΡ‹ расскаТСм ΠΎ Ρ‚ΠΎΠΌ, Π·Π°Ρ‡Π΅ΠΌ Π½ΡƒΠΆΠ½Ρ‹ Ρ…ΡƒΠΊΠΈ, ΠΈ ΠΊΠ°ΠΊ ΠΈΡ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ, Π½Π΅ пСрСписывая наши прилоТСния.

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

Π’Ρ€ΡƒΠ΄Π½ΠΎ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π»ΠΎΠ³ΠΈΠΊΡƒ состояний ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌΠΈ

Π’ React Π½Π΅Ρ‚ способа Β«ΠΏΡ€ΠΈΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒΒ» ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΊ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρƒ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΊ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Ρƒ). Если Π²Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΈ с React ΠΊΠ°ΠΊΠΎΠ΅-Ρ‚ΠΎ врСмя, Ρ‚ΠΎ Π²Π°ΠΌ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π·Π½Π°ΠΊΠΎΠΌΡ‹ Ρ‚Π°ΠΊΠΈΠ΅ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Ρ‹, ΠΊΠ°ΠΊ Ρ€Π΅Π½Π΄Π΅Ρ€-пропсы ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Π²Ρ‹ΡΡˆΠ΅Π³ΠΎ порядка, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ‹Ρ‚Π°ΡŽΡ‚ΡΡ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ эту ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ. Но эти ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Ρ‹ Π·Π°ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ вас ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ структуру ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ², Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ ΠΊΠΎΠ΄ Π³Ρ€ΠΎΠΌΠΎΠ·Π΄ΠΊΠΈΠΌ ΠΈ Ρ‚Ρ€ΡƒΠ΄Π½Ρ‹ΠΌ Π² ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ΅. Если Π²Ρ‹ посмотритС Π½Π° Ρ‚ΠΈΠΏΠΈΡ‡Π½ΠΎΠ΅ React-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² React DevTools, Ρ‚ΠΎ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ Β«Π°Π΄ ΠΎΠ±Ρ‘Ρ€Ρ‚ΠΎΠΊΒ» ΠΈΠ· ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ², ΠΎΠΊΡ€ΡƒΠΆΡ‘Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€Π°ΠΌΠΈ, ΠΊΠΎΠ½ΡΡŒΡŽΠΌΠ΅Ρ€Π°ΠΌΠΈ, ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌΠΈ Π²Ρ‹ΡΡˆΠ΅Π³ΠΎ порядка, Ρ€Π΅Π½Π΄Π΅Ρ€-пропсами ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ абстракциями. Π₯ΠΎΡ‚ΡŒ ΠΌΡ‹ ΠΈ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΡ‚Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… Π² DevTools, всё это ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° Π±ΠΎΠ»Π΅Π΅ Π³Π»ΡƒΠ±ΠΎΠΊΡƒΡŽ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ Π² React. НуТСн Π±ΠΎΠ»Π΅Π΅ ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΉ способ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π»ΠΎΠ³ΠΈΠΊΡƒ Π²ΠΎΠΊΡ€ΡƒΠ³ состояния.

Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ…ΡƒΠΊΠΎΠ² Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΠ·Π²Π»Π΅Ρ‡ΡŒ Π»ΠΎΠ³ΠΈΠΊΡƒ состояния ΠΈΠ· ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΅Ρ‘ ΠΏΡ€ΠΎΡ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ»ΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ. Π₯ΡƒΠΊΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π²Π°ΠΌ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π»ΠΎΠ³ΠΈΠΊΡƒ состояния, Π½Π΅ затрагивая Π΄Π΅Ρ€Π΅Π²ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ². Благодаря этому, Ρ…ΡƒΠΊΠΈ Π»Π΅Π³ΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² Ρ€Π°Π·Π½Ρ‹Ρ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°Ρ… ΠΈ Π΄Π΅Π»ΠΈΡ‚ΡŒΡΡ ΠΈΠΌΠΈ с сообщСством.

ΠœΡ‹ обсудим это ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ собствСнных Ρ…ΡƒΠΊΠΎΠ².

Π‘Π»ΠΎΠΆΠ½Ρ‹Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ становятся Ρ‚Ρ€ΡƒΠ΄Π½Ρ‹ΠΌΠΈ для понимания

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

Π§Ρ‚ΠΎΠ±Ρ‹ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ эту ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ, Ρ…ΡƒΠΊΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Ρ€Π°Π·Π±ΠΈΡ‚ΡŒ ΠΎΠ΄ΠΈΠ½ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Π½Π° малСнькиС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΠΎ ΠΈΡ… Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, подпискС ΠΈΠ»ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅ Π΄Π°Π½Π½Ρ‹Ρ…), Π° Π½Π΅ Π½Π° основС ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π°. Π’Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π΅ состояниС с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ€Π΅Π΄ΡŽΡΠ΅Ρ€Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π±Ρ‹Π»ΠΎ Π±ΠΎΠ»Π΅Π΅ прСдсказуСмым.

ΠšΠ»Π°ΡΡΡ‹ ΠΏΡƒΡ‚Π°ΡŽΡ‚ ΠΊΠ°ΠΊ людСй, Ρ‚Π°ΠΊ ΠΈ ΠΌΠ°ΡˆΠΈΠ½Ρ‹

Π’Π΄ΠΎΠ±Π°Π²ΠΎΠΊ ΠΊ ΡƒΡΠ»ΠΎΠΆΠ½Π΅Π½ΠΈΡŽ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ΄Π° ΠΈ Π΅Π³ΠΎ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ³ΠΎ использования, классы ΡΠΎΠ·Π΄Π°ΡŽΡ‚ сущСствСнный Π±Π°Ρ€ΡŒΠ΅Ρ€ Π² ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΠΈ React. НуТно ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ this Π² JavaScript, ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ отличаСтся ΠΎΡ‚ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° языков. ΠŸΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚ΡΡ ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎ привязку контСкста для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² событий. Π‘Π΅Π· использования Π½Π΅ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½Ρ‹Ρ… синтаксичСских ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠΉ, ΠΊΠΎΠ΄ становится многословным. Π›ΡŽΠ΄ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ прСкрасно ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ пропсы, состояниС ΠΈ ΠΎΠ΄Π½ΠΎΠ½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Π½Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ Π΄Π°Π½Π½Ρ‹Ρ…, Π½ΠΎ всё Ρ€Π°Π²Π½ΠΎ ΠΏΡƒΡ‚Π°Ρ‚ΡŒΡΡ с классами. Различия ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΈ классовыми ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌΠΈ Π² React ΠΈ Ρ‚Π΅ΠΌ, ΠΊΠΎΠ³Π΄Π° ΠΈΡ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ, приводят ΠΊ разногласиям Π΄Π°ΠΆΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΎΠΏΡ‹Ρ‚Π½Ρ‹ΠΌΠΈ React-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌΠΈ.

Π’Π΄ΠΎΠ±Π°Π²ΠΎΠΊ, React сущСствуСт ΡƒΠΆΠ΅ ΠΎΠΊΠΎΠ»ΠΎ пяти Π»Π΅Ρ‚ ΠΈ ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ останСтся Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΌ Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… пяти Π»Π΅Ρ‚. Как ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ Svelte, Angular, Glimmer ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ, компиляция ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² ΠΏΠ΅Ρ€Π΅Π΄ ΠΈΡ… исполнСниСм ΠΈΠΌΠ΅Π΅Ρ‚ ΠΎΠ³Ρ€ΠΎΠΌΠ½Ρ‹ΠΉ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π» Π² Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ. ОсобСнно, Ссли ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ Π½Π΅ Π½Π°ΠΊΠ»Π°Π΄Ρ‹Π²Π°ΡŽΡ‚ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ. НСдавно ΠΌΡ‹ экспСримСнтировали со свёртываниСм ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² с использованиСм Prepack ΠΈ ΡƒΠ²ΠΈΠ΄Π΅Π»ΠΈ ΠΏΠ΅Ρ€Π²Ρ‹Π΅ ΠΌΠ½ΠΎΠ³ΠΎΠΎΠ±Π΅Ρ‰Π°ΡŽΡ‰ΠΈΠ΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹. Однако ΠΌΡ‹ Π·Π°ΠΌΠ΅Ρ‚ΠΈΠ»ΠΈ, Ρ‡Ρ‚ΠΎ классовыС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΊ Π½Π΅Π½Π°ΠΌΠ΅Ρ€Π΅Π½Π½Ρ‹ΠΌ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Π°ΠΌ, сводящим ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ Π½Π° Π½Π΅Ρ‚. ΠšΠ»Π°ΡΡΡ‹ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ слоТности для инструмСнтов ΠΈ сСгодня. НапримСр, классы ΠΏΠ»ΠΎΡ…ΠΎ ΠΌΠΈΠ½ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΡŽΡ‚ΡΡ, Π° горячая ΠΏΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° (hot reloading) Π½Π΅Π½Π°Π΄Ρ‘ΠΆΠ½Π° ΠΈ часто Π»ΠΎΠΌΠ°Π΅Ρ‚ ΠΈΡ…. Наша Ρ†Π΅Π»ΡŒ β€” ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ API, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ повысит Π²Π΅Ρ€ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ.

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

ΠžΠ±Π·ΠΎΡ€ Ρ…ΡƒΠΊΠΎΠ² β€” Ρ…ΠΎΡ€ΠΎΡˆΠ΅Π΅ Π½Π°Ρ‡Π°Π»ΠΎ для изучСния Ρ…ΡƒΠΊΠΎΠ².

БтратСгия постСпСнного внСдрСния

TLDR: ΠœΡ‹ Π½Π΅ ΠΏΠ»Π°Π½ΠΈΡ€ΡƒΠ΅ΠΌ ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ классы ΠΈΠ· React.

ΠœΡ‹ Π·Π½Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ React-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ сфокусированы Π½Π° поставкС ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π° ΠΈ Ρƒ Π½ΠΈΡ… Π½Π΅Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΈΠ·ΡƒΡ‡Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ API ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ€Π΅Π»ΠΈΠ·Π°. Π₯ΡƒΠΊΠΈ это Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π½ΠΎΠ²ΠΎΠ΅, ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π»ΡƒΡ‡ΡˆΠ΅ ΠΏΠΎΠ΄ΠΎΠΆΠ΄Π°Ρ‚ΡŒ большС ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² ΠΈ ΡƒΡ€ΠΎΠΊΠΎΠ², ΠΏΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ Π½Π°Ρ‡ΠΈΠ½Π°Ρ‚ΡŒ ΠΈΡ… ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΠ΅.

ΠœΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΠ»Π°Π½ΠΊΠ° для добавлСния Π½ΠΎΠ²Ρ‹Ρ… ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²ΠΎΠ² Π² React ΠΎΡ‡Π΅Π½ΡŒ высока. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ для Π»ΡŽΠ±ΠΎΠΏΡ‹Ρ‚Π½Ρ‹Ρ… Ρ‡ΠΈΡ‚Π°Ρ‚Π΅Π»Π΅ΠΉ ΠΌΡ‹ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΈΠ»ΠΈ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Ρ‹ΠΉ RFC, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ большС ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ тСхничСских аспСктах Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠ³ΠΎ Π΄ΠΈΠ·Π°ΠΉΠ½Π°.

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

ΠœΡ‹ Π½Π°ΠΌΠ΅Ρ€Π΅Π½Ρ‹ ΠΎΡ…Π²Π°Ρ‚ΠΈΡ‚ΡŒ всС Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ использования классов Π² Ρ…ΡƒΠΊΠ°Ρ…, Π½ΠΎ ΠΌΡ‹ всё Π΅Ρ‰Ρ‘ Π±ΡƒΠ΄Π΅ΠΌ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ классовыС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Π² ΠΎΠ±ΠΎΠ·Ρ€ΠΈΠΌΠΎΠΌ Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ. Π’ Facebook дСсятки тысяч ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ², написанных Π² Π²ΠΈΠ΄Π΅ классов, ΠΈ Ρƒ нас Π½Π΅Ρ‚ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… ΠΏΠ»Π°Π½ΠΎΠ² ΠΈΡ… ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ. ВмСсто этого ΠΌΡ‹ Π½Π°Ρ‡ΠΈΠ½Π°Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ…ΡƒΠΊΠΈ Π² Π½ΠΎΠ²ΠΎΠΌ ΠΊΠΎΠ΄Π΅ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ с классами.

Часто Π·Π°Π΄Π°Π²Π°Π΅ΠΌΡ‹Π΅ вопросы

ΠœΡ‹ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΈΠ»ΠΈ для вас страницу FAQ с ΠΎΡ‚Π²Π΅Ρ‚Π°ΠΌΠΈ Π½Π° самыС частыС вопросы ΠΎ Ρ…ΡƒΠΊΠ°Ρ….

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

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

Π₯ΡƒΠΊΠΈ β€” это Π»ΡƒΡ‡ΡˆΠ΅Π΅, Ρ‡Ρ‚ΠΎ ΡΠ»ΡƒΡ‡ΠΈΠ»ΠΎΡΡŒ с React

React β€” это самая популярная Ρ„Ρ€ΠΎΠ½Ρ‚Π΅Π½Π΄-Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ΠΈΠ· экосистСмы JavaScript. Она извСстна простотой использования ΠΈ Ρ‡ΠΈΡ‚Π°Π±Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ ΠΊΠΎΠ΄Π°, создаваСмого с Π΅Ρ‘ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ. Π­Ρ‚ΠΎ позволяСт организациям самых Ρ€Π°Π·Π½Ρ‹Ρ… ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΎΠ² ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ Π²Π½Π΅Π΄Ρ€ΡΡ‚ΡŒ Π΄Π°Π½Π½ΡƒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ. Но ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹, основанныС Π½Π° классах, это Π³Ρ€ΠΎΠΌΠΎΠ·Π΄ΠΊΠΈΠ΅ конструкции, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ нСпросто Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ. Π₯ΡƒΠΊΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с состояниСм ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ², с ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ ΠΈΡ… ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π°, с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ°ΠΌΠΈ React Π±Π΅Π· использования классов.

React Ρ…ΡƒΠΊΠΈ Ρ‡Ρ‚ΠΎ это. . React Ρ…ΡƒΠΊΠΈ Ρ‡Ρ‚ΠΎ это Ρ„ΠΎΡ‚ΠΎ. React Ρ…ΡƒΠΊΠΈ Ρ‡Ρ‚ΠΎ это-. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° React Ρ…ΡƒΠΊΠΈ Ρ‡Ρ‚ΠΎ это. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ°

Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ React-Ρ…ΡƒΠΊΠΈ, ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΡ‚Π»ΠΈΡ‡Π°Π΅Ρ‚ ΠΈΡ… ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠ² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, ΠΈ ΠΎ Ρ‚ΠΎΠΌ, ΠΏΠΎΡ‡Π΅ΠΌΡƒ ΠΎΠ½ΠΈ β€” это Π»ΡƒΡ‡ΡˆΠ΅Π΅, Ρ‡Ρ‚ΠΎ ΡΠ»ΡƒΡ‡ΠΈΠ»ΠΎΡΡŒ с React.

О Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠΈ Ρ…ΡƒΠΊΠΎΠ² React

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

Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΊΠΎΠ΄Π°, ΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅ использованиС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ², основанных Π½Π° классах, ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ².

ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚, основанный Π½Π° классах:

Π­Ρ‚ΠΎΡ‚ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ Π² DOM элСмСнт

А Π²ΠΎΡ‚ β€” ΠΊΠΎΠ΄ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°, Ρ€Π΅ΡˆΠ°ΡŽΡ‰Π΅Π³ΠΎ Ρ‚Ρƒ ΠΆΠ΅ Π·Π°Π΄Π°Ρ‡Ρƒ.

Π”Π°, ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Ρ…ΡƒΠΊΠΈ нСльзя ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°Ρ…, основанных Π½Π° классах.

Как Ρ…ΡƒΠΊΠΈ ΡƒΠΏΡ€ΠΎΡ‰Π°ΡŽΡ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ с ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ²?

Π‘Ρ€Π΅Π΄ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π° React-ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ Ρ‚Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΏΡ€ΠΈ Π΅Π³ΠΎ ΠΌΠΎΠ½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ, ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΈ ΠΈ Ρ€Π°Π·ΠΌΠΎΠ½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ.

Π˜Π·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ эти ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ², основанных Π½Π° классах. Π­Ρ‚ΠΎ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π±Ρ‹Π»ΠΎ связано с Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒΡŽ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с ΠΊΠΎΠ΄ΠΎΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ достаточно слоТно ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΈ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ. Если ΠΆΠ΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌΠΈ ΠΈ Ρ…ΡƒΠΊΠ°ΠΌΠΈ β€” Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Ρ‚Π΅Ρ… ΠΆΠ΅ Π·Π°Π΄Π°Ρ‡ упрощаСтся.

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ с использованиСм ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π° componentDidMount() Π² ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π΅, основанном Π½Π° классах:

А Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Ρ€Π΅ΡˆΠΈΠΌ Ρ‚Ρƒ ΠΆΠ΅ Π·Π°Π΄Π°Ρ‡Ρƒ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π΅, ΠΏΠΎΠ»ΡŒΠ·ΡƒΡΡΡŒ Ρ…ΡƒΠΊΠ°ΠΌΠΈ useState ΠΈ useEffect :

Π₯ΡƒΠΊΠΈ ΠΎΠ±Π»Π΅Π³Ρ‡ΠΈΠ»ΠΈ ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΠ΅ React

ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹, основанныС Π½Π° классах, всСгда Π±Ρ‹Π»ΠΈ нСсколько Π³Ρ€ΠΎΠΌΠΎΠ·Π΄ΠΊΠΈΠΌΠΈ ΠΈ нСпонятными конструкциями, особСнно учитывая Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΈΡ… ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π²Π΅Π΄Ρ‘Ρ‚ ΠΊ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹ управлСния состояниСм ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎΠ³ΠΎ использования ΠΊΠΎΠ΄Π° каТутся слоТнСС, Ρ‡Π΅ΠΌ ΠΎΠ½ΠΈ Π΅ΡΡ‚ΡŒ Π½Π° самом Π΄Π΅Π»Π΅. Π­Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²Π΅Π»ΠΎ ΠΊ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Π½ΠΎΠ²ΠΈΡ‡ΠΊΠΈ ΠΈΠ·Π±Π΅Π³Π°Π»ΠΈ React, выбирая Π±ΠΎΠ»Π΅Π΅ Β«Π»Ρ‘Π³ΠΊΠΈΠ΅Β» Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΈ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΈ. А с появлСниСм Ρ…ΡƒΠΊΠΎΠ² ΠΈΠ·ΡƒΡ‡ΠΈΡ‚ΡŒ React стало Π»Π΅Π³Ρ‡Π΅, Ρ‡Π΅ΠΌ ΠΏΡ€Π΅ΠΆΠ΄Π΅. Π­Ρ‚ΠΎ стало ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· ΠΏΡ€ΠΈΡ‡ΠΈΠ½ роста популярности React.

На этом Π³Ρ€Π°Ρ„ΠΈΠΊΠ΅ Π²ΠΈΠ΄Π΅Π½ постоянный рост интСрСса ΠΊ React Π½Π° Stack Overflow, ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°ΡŽΡ‰ΠΈΠΉΡΡ ΡƒΠΆΠ΅ ΠΌΠ½ΠΎΠ³ΠΎ Π»Π΅Ρ‚. Π—Π΄Π΅ΡΡŒ ΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΡ€Π°Π²Π½ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚ вопросов ΠΎ React с ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚ΠΎΠΌ вопросов ΠΎ Π΄Ρ€ΡƒΠ³ΠΈΡ… популярных JavaScript-инструмСнтах. Π­Ρ‚ΠΎΡ‚ Π³Ρ€Π°Ρ„ΠΈΠΊ Π΄ΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ стали Ρ‡Π°Ρ‰Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ React послС появлСния Ρ…ΡƒΠΊΠΎΠ².

О Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Ρ…ΡƒΠΊΠ°Ρ… ΠΈ ΠΈΡ… ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΈ

▍Π₯ΡƒΠΊ useState

ВСроятно, useState β€” это самый распространённый React-Ρ…ΡƒΠΊ. Он позволяСт Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ состояния Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°Ρ….

Π—Π΄Π΅ΡΡŒ useState ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ СдинствСнный Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚: исходноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ состояния. Он Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ массив с ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ state ΠΈ с Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ для обновлСния этого состояния. ПослС этого Ρƒ программиста Π΅ΡΡ‚ΡŒ всё, Ρ‡Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с состояниСм Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π΅.

▍Π₯ΡƒΠΊ useEffect

Π₯ΡƒΠΊ useEffect ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ программисту Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΏΠΎΠ±ΠΎΡ‡Π½Ρ‹Π΅ эффСкты Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°Ρ…. Π’ΠΎ Π΅ΡΡ‚ΡŒ β€” Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ послС обновлСния DOM. Он замСняСт Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ события, позволяя Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΏΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…. Он ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π΄Π²Π° Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°: Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΈ Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ массив. Π­Ρ‚Π° функция опрСдСляСт Ρ‚ΠΎ, ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠΌΠ΅Π½Π½ΠΎ Β«ΠΏΠΎΠ±ΠΎΡ‡Π½Ρ‹ΠΉ эффСкт» Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ, Π° Π² массивС ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, Π·Π° измСнСниями ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½ΡƒΠΆΠ½ΠΎ Π½Π°Π±Π»ΡŽΠ΄Π°Ρ‚ΡŒ.

▍ДругиС Ρ…ΡƒΠΊΠΈ

Π˜Ρ‚ΠΎΠ³ΠΈ

ΠœΡ‹, ΠΏΡ€ΠΈ создании React-ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ², пользовались классами ΠΈΠ·-Π·Π° Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π² своё врСмя для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с состояниСм ΠΈΠ»ΠΈ для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π° нСльзя Π±Ρ‹Π»ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌΠΈ. Π₯ΡƒΠΊΠΈ React Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ упростили Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ старых Π·Π°Π΄Π°Ρ‡, Π΄Π°Π² Π½Π°ΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ отличаСтся Π»ΡƒΡ‡ΡˆΠ΅ΠΉ ΠΏΡ€ΠΈΠ³ΠΎΠ΄Π½ΠΎΡΡ‚ΡŒΡŽ ΠΊ созданию Π½ΠΎΠ²ΠΎΠ³ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»Π° ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ получаСтся Π³ΠΈΠ±Ρ‡Π΅, Ρ‡Π΅ΠΌ ΠΏΡ€Π΅ΠΆΠ΄Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π»Π΅Π³Ρ‡Π΅ Ρ€Π°ΡΡˆΠΈΡ€ΡΡ‚ΡŒ. МногиС ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ React Π² Ρ€ΠΎΠ»ΠΈ своСй основной Ρ„Ρ€ΠΎΠ½Ρ‚Π΅Π½Π΄-Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ всё большС ΠΈ большС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² ΠΎΡΠ²Π°ΠΈΠ²Π°ΡŽΡ‚ React.

ΠŸΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ΡΡŒ Π»ΠΈ Π²Ρ‹ Ρ…ΡƒΠΊΠ°ΠΌΠΈ React Π² своих ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ…?

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

React hooks β€” ΠΏΠΎΠ±Π΅Π΄Π° ΠΈΠ»ΠΈ ΠΏΠΎΡ€Π°ΠΆΠ΅Π½ΠΈΠ΅?

React Ρ…ΡƒΠΊΠΈ Ρ‡Ρ‚ΠΎ это. . React Ρ…ΡƒΠΊΠΈ Ρ‡Ρ‚ΠΎ это Ρ„ΠΎΡ‚ΠΎ. React Ρ…ΡƒΠΊΠΈ Ρ‡Ρ‚ΠΎ это-. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° React Ρ…ΡƒΠΊΠΈ Ρ‡Ρ‚ΠΎ это. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ°

Π‘ Π²Ρ‹Ρ…ΠΎΠ΄ΠΎΠΌ Π½ΠΎΠ²ΠΎΠ³ΠΎ React 16.6.0 Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ появился HOOKS (PROPOSAL). Они сСйчас доступны Π² react 17.0.0-alpha ΠΈ ΠΎΠ±ΡΡƒΠΆΠ΄Π°ΡŽΡ‚ΡΡ Π² ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΠΌ RFC: React Hooks. Π”Π°Π²Π°ΠΉΡ‚Π΅ разбСрСмся Ρ‡Ρ‚ΠΎ это Ρ‚Π°ΠΊΠΎΠ΅ ΠΈ Π·Π°Ρ‡Π΅ΠΌ это Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ΄ ΠΊΠ°Ρ‚ΠΎΠΌ.

Π”Π° это RFC ΠΈ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠ²Π»ΠΈΡΡ‚ΡŒ Π½Π° ΠΊΠΎΠ½Π΅Ρ‡Π½ΡƒΡŽ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ обсуТдая с создатСлями react ΠΏΠΎΡ‡Π΅ΠΌΡƒ ΠΎΠ½ΠΈ Π²Ρ‹Π±Ρ€Π°Π»ΠΈ Ρ‚ΠΎΡ‚ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄.

Π”Π°Π²Π°ΠΉΡ‚Π΅ взглянСм Π½Π° Ρ‚ΠΎ ΠΊΠ°ΠΊ выглядит стандартный Ρ…ΡƒΠΊ:

ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ ΠΎΠ±Π΄ΡƒΠΌΠ°Ρ‚ΡŒ этот ΠΊΠΎΠ΄, это Ρ‚ΠΈΠ·Π΅Ρ€ ΠΈ ΠΊ ΠΊΠΎΠ½Ρ†Ρƒ ΡΡ‚Π°Ρ‚ΡŒΠΈ Π²Ρ‹ ΡƒΠΆΠ΅ Π±ΡƒΠ΄Π΅Ρ‚Π΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚. ΠŸΠ΅Ρ€Π²ΠΎΠ΅, Ρ‡Ρ‚ΠΎ стоит Π·Π½Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ это Π½Π΅ Π»ΠΎΠΌΠ°Π΅Ρ‚ ΠΎΠ±Ρ€Π°Ρ‚Π½ΡƒΡŽ ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡ… добавят Π² 16.7 послС сбора ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ связи ΠΈ ΠΏΠΎΠΆΠ΅Π»Π°Π½ΠΈΠΉ Π² RFC.

Как ΡƒΠ²Π΅Ρ€ΡΡŽΡ‚ рСбята, это Π½Π΅ ΠΏΠ»Π°Π½ ΠΏΠΎ Π²Ρ‹ΠΏΠΈΠ»ΠΈΠ²Π°Π½ΠΈΡŽ классов ΠΈΠ· Ρ€Π΅Π°ΠΊΡ‚Π°.

Π’Π°ΠΊ ΠΆΠ΅ Ρ…ΡƒΠΊΠΈ Π½Π΅ Π·Π°ΠΌΠ΅Π½ΡΡŽΡ‚ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠ΅ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ Ρ€Π΅Π°ΠΊΡ‚Π°, всС Π½Π° мСстС props/state/context/refs. Π­Ρ‚ΠΎ всСго лишь Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ способ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… силу.

ΠœΠΎΡ‚ΠΈΠ²Π°Ρ†ΠΈΡ

Π₯ΡƒΠΊΠΈ Ρ€Π΅ΡˆΠ°ΡŽΡ‚ Π½Π° ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ взгляд Π½Π΅ связныС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ появились ΠΏΡ€ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ΅ дСсятков тысяч ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠΈ 5 Π»Π΅Ρ‚ Ρƒ facebook.

Π‘Π°ΠΌΠΎΠ΅ слоТноС это ΠΏΠ΅Ρ€Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π»ΠΎΠ³ΠΈΠΊΡƒ Π² stateful ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°Ρ…, Ρƒ Ρ€Π΅Π°ΠΊΡ‚Π° Π½Π΅Ρ‚ способа ΠΏΡ€ΠΈΠΊΡ€Π΅ΠΏΠΈΡ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎΡ€Π°Π·ΠΎΠ²ΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΊ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρƒ(Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π΅Π³ΠΎ ΠΊ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Ρƒ). Если Π²Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΈ с React Π²Π°ΠΌ извСстно понятиС HOC(high-order-component) ΠΈΠ»ΠΈ render props. Π­Ρ‚ΠΎ достаточно Ρ…ΠΎΡ€ΠΎΡˆΠΈΠ΅ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Ρ‹, Π½ΠΎ ΠΈΠ½ΠΎΠ³Π΄Π° ΠΎΠ½ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Ρ‡Ρ€Π΅Π·ΠΌΠ΅Ρ€Π½ΠΎ, ΠΎΠ½ΠΈ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ рСструктуризации ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ², для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡ… ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ ΠΊΠΎΠ΄ Π±ΠΎΠ»Π΅Π΅ Π³Ρ€ΠΎΠΌΠΎΠ·Π΄ΠΊΠΈΠΌ. Π‘Ρ‚ΠΎΠΈΡ‚ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π½Π° Ρ‚ΠΈΠΏΠΈΡ‡Π½ΠΎΠ΅ Ρ€Π΅Π°ΠΊΡ‚ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈ станСт понятно ΠΎ Ρ‡Π΅ΠΌ ΠΈΠ΄Π΅Ρ‚ Ρ€Π΅Ρ‡ΡŒ.

React Ρ…ΡƒΠΊΠΈ Ρ‡Ρ‚ΠΎ это. image loader. React Ρ…ΡƒΠΊΠΈ Ρ‡Ρ‚ΠΎ это Ρ„ΠΎΡ‚ΠΎ. React Ρ…ΡƒΠΊΠΈ Ρ‡Ρ‚ΠΎ это-image loader. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° React Ρ…ΡƒΠΊΠΈ Ρ‡Ρ‚ΠΎ это. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° image loader

Π­Ρ‚ΠΎ называСтся wrapped-hell β€” Π°Π΄ ΠΎΠ±Π΅Ρ€Ρ‚ΠΎΠΊ.

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠ· ΠΎΠ΄Π½ΠΈΡ… HOC это Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ Π² Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΡ… рСалиях, ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΠ»ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ ΠΊ стору/Ρ‚Π΅ΠΌΠ΅/Π»ΠΎΠΊΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ/кастомным Ρ…ΠΎΠΊΠ°ΠΌ, я Π΄ΡƒΠΌΠ°ΡŽ это всСм Π·Π½Π°ΠΊΠΎΠΌΠΎ.

Бтановится понятно, Ρ‡Ρ‚ΠΎ Ρ€Π΅Π°ΠΊΡ‚Ρƒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ для раздСлСния Π»ΠΎΠ³ΠΈΠΊΠΈ.

Π₯ΡƒΠΊΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚ΠΎΠΆΠ΅ самоС разбивая Π»ΠΎΠ³ΠΈΠΊΡƒ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌΠΈ Π½Π° малСнькиС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ².

ΠšΠ»Π°ΡΡΡ‹ слоТны для людСй ΠΈ для машин

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

ГлянСм Π½Π° Ρ…ΡƒΠΊΠΈ

State hook

Код Π½ΠΈΠΆΠ΅ Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΡ‚ ΠΏΠ°Ρ€Π°Π³Ρ€Π°Ρ„ ΠΈ ΠΊΠ½ΠΎΠΏΠΊΡƒ ΠΈ Ссли ΠΌΡ‹ Π½Π°ΠΆΠΌΠ΅ΠΌ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡƒ Ρ‚ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² ΠΏΠ°Ρ€Π°Π³Ρ€Π°Ρ„Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠ½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΎ.

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

Effect hook

Часто Π² классовых ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°Ρ…, ΠΌΡ‹ Π΄Π΅Π»Π°Π΅ΠΌ side effect Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ подписываСмся Π½Π° события ΠΈΠ»ΠΈ Π΄Π΅Π»Π°Π΅ΠΌ запросы Π·Π° Π΄Π°Π½Π½Ρ‹ΠΌΠΈ, ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ для этого ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ componentDidMount / componentDidUpdate

Когда ΠΌΡ‹ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ useEffect ΠΌΡ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ Ρ€Π΅Π°ΠΊΡ‚Ρƒ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ‘side effect’ послС обновлСния ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² DOM Π΄Π΅Ρ€Π΅Π²Π΅. Π­Ρ„Ρ„Π΅ΠΊΡ‚Ρ‹ ΠΎΠ±ΡŠΡΠ²Π»ΡΡŽΡ‚ΡΡ Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°, поэтому ΠΈΠΌΠ΅ΡŽΡ‚ доступ ΠΊ props/state. ΠŸΡ€ΠΈΡ‡Π΅ΠΌ ΠΈΡ… ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ сколько ΡƒΠ³ΠΎΠ΄Π½ΠΎ.

Π‘Ρ€Π°Π·Ρƒ ΠΆΠ΅ стоит ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Π²Ρ‚ΠΎΡ€ΠΎΠΉ side effect Π² Π½Π΅ΠΌ ΠΌΡ‹ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, Π΄Π΅Π»Π°Π΅ΠΌ ΠΌΡ‹ это для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊΠΈΠ΅ Ρ‚ΠΎ дСйствия послС Ρ‚ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ выполняСт unmount, Π² Π½ΠΎΠ²ΠΎΠΌ api это Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ эффСкты с очисткой. ΠžΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ эффСкты ΠΌΠΎΠ³ΡƒΡ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΡƒΠ³ΠΎΠ΄Π½ΠΎ.

ΠŸΡ€Π°Π²ΠΈΠ»Π° Ρ…ΡƒΠΊΠΎΠ²

Π₯ΡƒΠΊΠΈ это просто javascript Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π½ΠΎ ΠΎΠ½ΠΈ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ всСго Π΄Π²ΡƒΡ… ΠΏΡ€Π°Π²ΠΈΠ»:

ΠšΠ°ΡΡ‚ΠΎΠΌΠ½Ρ‹Π΅ Ρ…ΡƒΠΊΠΈ

Π’ Ρ‚ΠΎΠΆΠ΅ врСмя Π½Π°ΠΌ хочСтся ΠΏΠ΅Ρ€Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π»ΠΎΠ³ΠΈΠΊΡƒ stateful ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ², ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ для этого ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Π»ΠΈΠ±ΠΎ HOC Π»ΠΈΠ±ΠΎ render props ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Ρ‹, Π½ΠΎ ΠΎΠ½ΠΈ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ объСм нашСго прилоТСния.
НапримСр опишСм ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ:

ΠžΡΠΎΠ·Π½Π°ΠΉΡ‚Π΅ этот ΠΊΠΎΠ΄, это Π±ΡƒΠ΄Π΅Ρ‚ кастомный Ρ…ΡƒΠΊ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ Π² Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°Ρ…. НапримСр Ρ‚Π°ΠΊ:

Π’ любом случаС, ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ состояниС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Π²Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ useFriendStatus создаСт ΠΈΠ·ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ состояниС. Π’Π°ΠΊ ΠΆΠ΅ стоит ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π½Π°Ρ‡Π°Π»ΠΎ этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ начинаСтся со слова use это Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ это Ρ…ΡƒΠΊ. Π‘ΠΎΠ²Π΅Ρ‚ΡƒΠ΅ΠΌ ΡΠΎΠ±Π»ΡŽΠ΄Π°Ρ‚ΡŒ этот Ρ„ΠΎΡ€ΠΌΠ°Ρ‚. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΈΡΠ°Ρ‚ΡŒ кастомныС Ρ…ΡƒΠΊΠΈ Π½Π° Ρ‡Ρ‚ΠΎ ΡƒΠ³ΠΎΠ΄Π½ΠΎ, Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΠΈ/подписки/Ρ‚Π°ΠΉΠΌΠ΅Ρ€Ρ‹ ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ ΠΌΠ½ΠΎΠ³ΠΎΠ΅ Π΄Ρ€ΡƒΠ³ΠΎΠ΅.

Π•ΡΡ‚ΡŒ Π΅Ρ‰Π΅ ΠΏΠ°Ρ€Π° Ρ…ΡƒΠΊΠΎΠ².

useContext

useContext позволяСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ вмСсто renderProps ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Π² Π½Π΅Π³ΠΎ слСдуСт ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ контСкст ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΈΠ·Π²Π»Π΅Ρ‡ΡŒ ΠΈ ΠΎΠ½ Π½Π°ΠΌ Π΅Π³ΠΎ Π²Π΅Ρ€Π½Π΅Ρ‚, Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΠ·Π±Π°Π²ΠΈΡ‚ΡŒΡΡ ΠΎΡ‚ всСх HOC, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π»ΠΈ context Π² props.

И Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ контСкста ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ просто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΈ.

useCallback

Как часто Π²Π°ΠΌ ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΠ»ΠΎΡΡŒ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ класса Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ссылку Π½Π° ΠΌΠ΅Ρ‚ΠΎΠ΄? Π­Ρ‚ΠΎΠ³ΠΎ большС Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ useCallback ΠΈ наши ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΠ΅Ρ€Π΅Ρ€ΠΈΡΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒΡΡ ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΡˆΠ»Π° новая ссылка Π½Π° onClick.

useMemo

Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌ ΠΌΠ΅ΠΌΠΎΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΌΠ΅ΠΌΠΎΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ Π·Π½Π°Ρ‡ΠΈΡ‚ вычисляСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚ΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² помСнялся, Π²Ρ‚ΠΎΡ€ΠΎΠΉ Ρ€Π°Π· ΠΎΠ΄Π½ΠΎ ΠΈ Ρ‚ΠΎΠΆΠ΅ Π²Ρ‹Ρ‡ΠΈΡΠ»ΡΡ‚ΡŒΡΡ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚.

Π”Π° Ρ‚ΡƒΡ‚ приходится Π΄ΡƒΠ±Π»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ значСния Π² массивС, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ…ΡƒΠΊ понял, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ Π½Π΅ измСнились.

useRef

useImperativeMethods

useImperativeMethods кастомизируСт Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ экзСмпляра ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ пСрСдаСтся ΠΈΠ· родитСля ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ref Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ. Как всСгда слСдуСт ΠΈΠ·Π±Π΅Π³Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Ρƒ ссылок Π½Π° ΠΏΡ€ΡΠΌΡƒΡŽ ΠΈ слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ forwardRef

useMutationEffect

useMutationEffect ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΡ…ΠΎΠΆ Π½Π° useEffect Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎ ΠΎΠ½ запускаСтся синхронно Π½Π° Ρ‚ΠΎΠΌ этапС ΠΊΠΎΠ³Π΄Π° Ρ€Π΅Π°ΠΊΡ‚ измСняСт значСния DOM, ΠΏΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ сосСдниС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½Ρ‹, этот Ρ…ΡƒΠΊ слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для выполнСния DOM ΠΌΡƒΡ‚Π°Ρ†ΠΈΠΉ.
Π›ΡƒΡ‡ΡˆΠ΅ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ useEffect Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ.

useLayoutEffect

useLayoutEffect Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΏΠΎΡ…ΠΎΠΆ Π½Π° useEffect Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ запускаСтся синхронно послС всСх ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΉ DOM ΠΈ синхронного Ρ€Π΅-Ρ€Π΅Π½Π΄Π΅Ρ€Π°. ОбновлСния Π·Π°ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Π² useLayoutEffect ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ синхронно, Π΄ΠΎ Ρ‚ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΎΡ‚Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ элСмСнты. Π’Π°ΠΊ ΠΆΠ΅ слСдуСт ΡΡ‚Π°Ρ€Π°Ρ‚ΡŒΡΡ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ стандартный useEffect Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ измСнСния.

useReducer

useReducer β€” это Ρ…ΡƒΠΊ для создания Ρ€Π΅Π΄ΡŽΡΠ΅Ρ€Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ состояниС ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π΄ΠΈΡΠΏΠ°Ρ‚Ρ‡ΠΈΡ‚ΡŒ измСнСния:

Π’Π°ΠΊ ΠΆΠ΅ useReducer ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ 3 Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚, это action ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄ΠΎΠ»ΠΆΠ΅Π½ выполнятся ΠΏΡ€ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ€Π΅Π΄ΡŽΡΠ΅Ρ€Π°:

Π’Π°ΠΊ ΠΆΠ΅ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ контСкст Π² Π΄Π°Π½Π½Ρ‹ΠΌ Ρ€Π΅Π΄ΡŽΡΠ΅Ρ€ΠΎΠΌ ΠΈ Ρ‡Π΅Ρ€Π΅Π· Ρ…ΡƒΠΊ useContext ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π²ΠΎ всСм ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ, это остаСтся Π½Π° домашнСС Π·Π°Π΄Π°Π½ΠΈΠ΅.

Подводя ΠΈΡ‚ΠΎΠ³

Π₯ΡƒΠΊΠΈ достаточно ΠΌΠΎΡ‰Π½Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΏΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡŽ wrapper-hell ΠΈ Ρ€Π΅ΡˆΠ°ΡŽΡ‚ нСсколько ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, Π½ΠΎ всС ΠΈΡ… ΠΌΠΎΠΆΠ½ΠΎ свСти с ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡŽ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° ссылок. Π£ΠΆΠ΅ сСйчас Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ ΠΏΠΎΡΠ²Π»ΡΡ‚ΡŒΡΡ сборники Ρ…ΡƒΠΊΠΎΠ² ΠΏΠΎ использованию ΠΈΠ»ΠΈ этот сборник. Π‘ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ с Ρ…ΡƒΠΊΠ°ΠΌΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚ΡŒΡΡ Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ.

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

Π₯ΡƒΠΊΠΈ: ΠΎΡ‚Π²Π΅Ρ‚Ρ‹ Π½Π° вопросы

Π₯ΡƒΠΊΠΈ β€” Π½ΠΎΠ²ΠΎΠ²Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² React 16.8, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ позволяСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ состояниС ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ возмоТности React Π±Π΅Π· написания классов.

На этой страницС Π²Ρ‹ Π½Π°ΠΉΠ΄Ρ‘Ρ‚Π΅ ΠΎΡ‚Π²Π΅Ρ‚Ρ‹ Π½Π° популярныС вопросы ΠΎ Ρ…ΡƒΠΊΠ°Ρ….

Π’ ΠΊΠ°ΠΊΠΎΠΉ вСрсии React появились Ρ…ΡƒΠΊΠΈ?

Начиная с Ρ€Π΅Π»ΠΈΠ·Π° 16.8.0, React Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² сСбя ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΡƒΡŽ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ Ρ…ΡƒΠΊΠΎΠ² для:

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Ρ…ΡƒΠΊΠΈ Π±ΡƒΠ΄ΡƒΡ‚ доступны, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ссли всС React-ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ вСрсии 16.8.0 ΠΈΠ»ΠΈ Π²Ρ‹ΡˆΠ΅. Π₯ΡƒΠΊΠΈ Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ, Ссли Π²Ρ‹, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π·Π°Π±Ρ‹Π»ΠΈ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ React DOM.

React Native 0.59 ΠΈ Π²Ρ‹ΡˆΠ΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Ρ…ΡƒΠΊΠΈ.

Надо Π»ΠΈ ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡΠ°Ρ‚ΡŒ всС ΠΌΠΎΠΈ классовыС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹?

НСт, ΠΌΡ‹ Π½Π΅ собираСмся ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ классы ΠΈΠ· React, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π½ΠΈΠΊΡ‚ΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ΡŒ сСбС Ρ‚Π°ΠΊΠΎΠΉ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³. ΠœΡ‹ совСтуСм ΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ Ρ…ΡƒΠΊΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Π½ΠΎΠ²ΠΎΠΌ ΠΊΠΎΠ΄Π΅.

Π§Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ…ΡƒΠΊΠΎΠ², Ρ‡Π΅Π³ΠΎ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ классы?

Π₯ΡƒΠΊΠΈ Π΄Π°ΡŽΡ‚ Π½ΠΎΠ²Ρ‹ΠΉ ΠΌΠΎΡ‰Π½Ρ‹ΠΉ способ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ³ΠΎ использования ΠΊΠΎΠ΄Π° Π² ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°Ρ…. Β«Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… Ρ…ΡƒΠΊΠΎΠ²Β» Π΄Π°Ρ‘Ρ‚ прСдставлСниС ΠΎΠ± ΠΈΡ… возмоТностях. Π­Ρ‚Π° ΡΡ‚Π°Ρ‚ΡŒΡ, написанная ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· участников ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ React, описываСт Π½ΠΎΠ²Ρ‹Π΅ возмоТности, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‚ Ρ…ΡƒΠΊΠΈ.

Какая Ρ‡Π°ΡΡ‚ΡŒ ΠΌΠΎΠΈΡ… Π·Π½Π°Π½ΠΈΠΉ ΠΎ React всё Π΅Ρ‰Ρ‘ Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Π°?

Π₯ΡƒΠΊΠΈ β€” это Π½ΠΎΠ²Ρ‹ΠΉ способ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ возмоТности React, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ ΡƒΠΆΠ΅ Π·Π½Π°Π΅Ρ‚Π΅: состояниС, ΠΆΠΈΠ·Π½Π΅Π½Π½Ρ‹ΠΉ Ρ†ΠΈΠΊΠ», контСкст ΠΈ Ρ€Π΅Ρ„Ρ‹. Π₯ΡƒΠΊΠΈ Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»ΠΈ Ρ„ΡƒΠ½Π΄Π°ΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½ΡƒΡŽ Π»ΠΎΠ³ΠΈΠΊΡƒ React, поэтому ваши знания ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ², пропсов ΠΈ нисходящСго ΠΏΠΎΡ‚ΠΎΠΊΠ° Π΄Π°Π½Π½Ρ‹Ρ… ΠΎΡΡ‚Π°ΡŽΡ‚ΡΡ Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ.

Однако, Ρ…ΡƒΠΊΠΈ β€” Π½Π΅ самая простая Ρ‡Π°ΡΡ‚ΡŒ React. Если Π²Π°ΠΌ Ρ‡Π΅Π³ΠΎ-Ρ‚ΠΎ Π½Π΅ Ρ…Π²Π°Ρ‚Π°Π΅Ρ‚ Π² этой Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ, Π΄Π°ΠΉΡ‚Π΅ Π½Π°ΠΌ Π·Π½Π°Ρ‚ΡŒ, ΠΈ ΠΌΡ‹ постараСмся Π²Π°ΠΌ ΠΏΠΎΠΌΠΎΡ‡ΡŒ.

Π§Ρ‚ΠΎ ΠΌΠ½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ: Ρ…ΡƒΠΊΠΈ, классы ΠΈΠ»ΠΈ ΠΎΠ±Π° ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π°?

ΠœΡ‹ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅ΠΌ Π½Π°Ρ‡Π°Ρ‚ΡŒ с использования Ρ…ΡƒΠΊΠΎΠ² Π² Π½ΠΎΠ²Ρ‹Ρ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°Ρ…, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ Π³ΠΎΡ‚ΠΎΠ²Ρ‹. Π£Π±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ Π² вашСй ΠΊΠΎΠΌΠ°Π½Π΄Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ вас ΠΈ Π·Π½Π°ΠΊΠΎΠΌ с Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠ΅ΠΉ. ΠœΡ‹ Π½Π΅ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅ΠΌ ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ всС ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ классы Π½Π° Ρ…ΡƒΠΊΠΈ, ΠΏΠΎΠΊΠ° Π½Π΅Ρ‚ нСобходимости Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎΠΌΡƒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρƒ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ Π±Π°Π³).

Π’Ρ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ…ΡƒΠΊΠΈ Π²Π½ΡƒΡ‚Ρ€ΠΈ классового ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°, Π½ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ классы ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ с Ρ…ΡƒΠΊΠ°ΠΌΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ Π΄Π΅Ρ€Π΅Π²Π΅. ЯвляСтся Π»ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ классовым ΠΈΠ»ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΌ с использованиСм Ρ…ΡƒΠΊΠΎΠ² β€” Π½Π΅Π²Π°ΠΆΠ½ΠΎ, это всСго лишь ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ. ΠœΡ‹ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Π² Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ Ρ…ΡƒΠΊΠΈ станут Π³Π»Π°Π²Π½Ρ‹ΠΌ способом написания React-ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ².

Π”Π°ΡŽΡ‚ Π»ΠΈ Ρ…ΡƒΠΊΠΈ всС возмоТности классов?

Π₯ΡƒΠΊΠΈ появились совсСм Π½Π΅Π΄Π°Π²Π½ΠΎ, ΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ сторонниС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π΅Ρ‰Ρ‘ Π½Π΅ совмСстимы с Π½ΠΈΠΌΠΈ.

Π―Π²Π»ΡΡŽΡ‚ΡΡ Π»ΠΈ Ρ…ΡƒΠΊΠΈ Π·Π°ΠΌΠ΅Π½ΠΎΠΉ Ρ€Π΅Π½Π΄Π΅Ρ€-пропсам ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌ Π²Ρ‹ΡΡˆΠ΅Π³ΠΎ порядка?

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

Как Ρ…ΡƒΠΊΠΈ ΠΏΠΎΠ²Π»ΠΈΡΡŽΡ‚ Π½Π° популярныС API, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ Redux connect() ΠΈ React Router?

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΡ‚ ΠΆΠ΅ самый API, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹ использовали β€” всё ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ ΠΏΡ€Π΅ΠΆΠ΄Π΅.

Начиная с вСрсии 5.1 появилась ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Ρ…ΡƒΠΊΠΎΠ² Π² React Router.

Π’ Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Ρ‚Π°ΠΊΠΆΠ΅ Π½Π°Ρ‡Π°Ρ‚ΡŒ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ Ρ…ΡƒΠΊΠΈ.

ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ Π»ΠΈ Ρ…ΡƒΠΊΠΈ ΡΡ‚Π°Ρ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΡŽ?

Π₯ΡƒΠΊΠΈ спроСктированы с ΡƒΡ‡Ρ‘Ρ‚ΠΎΠΌ статичСской Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ. Π’Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ функциями, ΠΈΡ… Π»Π΅Π³Ρ‡Π΅ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‡Π΅ΠΌ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Π²Ρ‹ΡΡˆΠ΅Π³ΠΎ порядка. ПослСдниС вСрсии ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΉ Ρ‚ΠΈΠΏΠΎΠ² React для Flow ΠΈ TypeScript ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ Ρ…ΡƒΠΊΠΈ.

Π—Π°ΠΌΠ΅Ρ‚ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ Ρ…ΡƒΠΊΠΈ Π΄Π°ΡŽΡ‚ Π²Π°ΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π½Π°ΠΊΠ»Π°Π΄Ρ‹Π²Π°Ρ‚ΡŒ ограничСния Π½Π° API React, Ссли Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… Π±ΠΎΠ»Π΅Π΅ строго ΠΊΠ°ΠΊΠΈΠΌ-Ρ‚ΠΎ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ. React прСдоставляСт ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎ своСму ΡƒΡΠΌΠΎΡ‚Ρ€Π΅Π½ΠΈΡŽ Π΄Π°ΠΆΠ΅ Ρ‚Π°ΠΊΠΈΠΌΠΈ способами, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈ Π½Π΅ Π±Ρ‹Π»ΠΈ ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ прСдусмотрСны.

Как Ρ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Ρ…ΡƒΠΊΠΈ?

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

Π Π΅Ρ†Π΅ΠΏΡ‚Ρ‹ ВСстирования Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ Π² сСбя мноТСство ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ сСбС.

НапримСр, Ρƒ нас Π΅ΡΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚-счётчик:

ΠœΡ‹ Π±ΡƒΠ΄Π΅ΠΌ Ρ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ этот ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ React DOM. Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ совпадаСт с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ случится Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅, ΠΌΡ‹ ΠΎΠ±Π΅Ρ€Π½Ρ‘ΠΌ ΠΊΠΎΠ΄ Ρ€Π΅Π½Π΄Π΅Ρ€Π° ΠΈ обновлСния Π² Π²Ρ‹Π·ΠΎΠ² ReactTestUtils.act() :

Π’Ρ‹Π·ΠΎΠ²Ρ‹ act() Ρ‚Π°ΠΊΠΆΠ΅ запустят эффСкты Π²Π½ΡƒΡ‚Ρ€ΠΈ.

Если Π²Π°ΠΌ Π½Π°Π΄ΠΎ ΠΏΡ€ΠΎΡ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ Ρ…ΡƒΠΊ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Π² Π²Π°ΡˆΠΈΡ… тСстах ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² Π½Ρ‘ΠΌ этот Ρ…ΡƒΠΊ. ПослС этого Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΎΡ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ сам ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚.

Для ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΡ ΠΎΠ΄Π½ΠΎΡ‚ΠΈΠΏΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°, ΠΌΡ‹ совСтуСм ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ React Testing Library. Она Π±Ρ‹Π»Π° создана для написания тСстов, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΡ… ваши ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ ΠΈ ΠΈΠΌΠΈΡ‚ΠΈΡ€ΡƒΡŽΡ‰ΠΈΡ… ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅.

Π—Π° Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ΡΡŒ ΠΊ Π Π΅Ρ†Π΅ΠΏΡ‚Π°ΠΌ ВСстирования.

Π§Ρ‚ΠΎ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡŽΡ‚ ΠΏΡ€Π°Π²ΠΈΠ»Π° Π»ΠΈΠ½Ρ‚Π΅Ρ€Π° Π² Ρ…ΡƒΠΊΠ°Ρ…?

ΠœΡ‹ прСдоставляСм ΠΏΠ»Π°Π³ΠΈΠ½ ΠΊ ESLint, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€ΠΈΠ½ΡƒΠΆΠ΄Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌ Ρ…ΡƒΠΊΠΎΠ², Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ошибок. ΠŸΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎ любая функция, имя ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ начинаСтся с Β« use Β» ΠΈ Π·Π°Π³Π»Π°Π²Π½ΠΎΠΉ Π±ΡƒΠΊΠ²Ρ‹ Π΄Π°Π»Π΅Π΅, являСтся Ρ…ΡƒΠΊΠΎΠΌ. ΠœΡ‹ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ это ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π΅ идСальноС, ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΡΠ»ΡƒΡ‡Π°Ρ‚ΡŒΡΡ Π»ΠΎΠΆΠ½Ρ‹Π΅ срабатывания. Однако, Π±Π΅Π· этого Π²Π°ΠΆΠ½ΠΎΠ³ΠΎ соглашСния, Π±Ρ‹Π»ΠΎ Π±Ρ‹ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Ρ…ΡƒΠΊΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Ρ…ΠΎΡ€ΠΎΡˆΠΎ, Π° Π±ΠΎΠ»Π΅Π΅ Π΄Π»ΠΈΠ½Π½Ρ‹Π΅ ΠΈΠΌΠ΅Π½Π° ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ ΠΏΠΎΠΌΠ΅ΡˆΠ°Ρ‚ΡŒ людям Π½Π°Ρ‡Π°Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ…ΡƒΠΊΠΈ ΠΈΠ»ΠΈ ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ соглашСнию.

ΠŸΡ€Π°Π²ΠΈΠ»Π° Π»ΠΈΠ½Ρ‚Π΅Ρ€Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡŽΡ‚, Ρ‡Ρ‚ΠΎ:

БущСствуСт Π΅Ρ‰Ρ‘ нСсколько ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒΡΡ ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ Ρ€Π΅Π³ΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€Π°Π²ΠΈΠ»Π° ΠΈ ΠΈΡΠΊΠ°Ρ‚ΡŒ баланс ΠΌΠ΅ΠΆΠ΄Ρƒ Π½Π°Ρ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ΠΌ ошибок ΠΈ Π»ΠΎΠΆΠ½Ρ‹ΠΌΠΈ срабатываниями.

ΠžΡ‚ классов ΠΊ Ρ…ΡƒΠΊΠ°ΠΌ

Как ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π° ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚ Ρ…ΡƒΠΊΠ°ΠΌ?

Как ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡ‚ΡŒ запросы Π·Π° Π΄Π°Π½Π½Ρ‹ΠΌΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ…ΡƒΠΊΠΎΠ²?

ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅ нСбольшоС Π΄Π΅ΠΌΠΎ, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΎΠ·Π½Π°ΠΊΠΎΠΌΡŒΡ‚Π΅ΡΡŒ со ΡΡ‚Π°Ρ‚ΡŒΡ‘ΠΉ, которая рассказываСт ΠΊΠ°ΠΊ Π΄Π΅Π»Π°Ρ‚ΡŒ запросы Π΄Π°Π½Π½Ρ‹Ρ… с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ…ΡƒΠΊΠΎΠ².

Π•ΡΡ‚ΡŒ Π»ΠΈ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π²Ρ€ΠΎΠ΄Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… экзСмпляра?

Π”Π°! Π₯ΡƒΠΊ useRef() ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для DOM-Ρ€Π΅Ρ„ΠΎΠ². Π Π΅Ρ„ β€” это ΠΎΠ±Ρ‰ΠΈΠΉ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€, Π° Π΅Π³ΠΎ свойство current β€” измСняСмоС ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ любоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ свойству экзСмпляра класса.

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π²Π½ΡƒΡ‚Ρ€ΠΈ useEffect :

Для объявлСния ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Π° Π½Π°ΠΌ Π½Π΅ понадобится Ρ€Π΅Ρ„ ( id ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ эффСкта). Но это Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ, Ссли потрСбуСтся ΡΠ±Ρ€ΠΎΡΠΈΡ‚ΡŒ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π» ΠΈΠ· ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° события:

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

Бколько ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… состояния я ΠΌΠΎΠ³Ρƒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ β€” ΠΎΠ΄Π½Ρƒ ΠΈΠ»ΠΈ нСсколько?

Если Π²Ρ‹ ΠΏΡ€ΠΈΠ²Ρ‹ΠΊΠ»ΠΈ ΠΏΠΈΡΠ°Ρ‚ΡŒ классовыС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹, Π²Ρ‹ скорСС всСго Π·Π°Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ useState() ΠΎΠ΄Π½ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎ ΠΈ сразу ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ всё состояниС Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅. Π”Π°, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Ρ‚Π°ΠΊ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ. ВзглянитС Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ слСдуСт Π·Π° Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ΠΌ курсора. ΠœΡ‹ Ρ…Ρ€Π°Π½ΠΈΠΌ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€ этого ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° Π² локальном состоянии.

Π’ Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠΈ состояния Π½Π° нСзависимыС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π΅ΡΡ‚ΡŒ Π΅Ρ‰Ρ‘ ΠΎΠ΄Π½ΠΎ прСимущСство. Π­Ρ‚ΠΎ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ Π»Π΅Π³ΠΊΠΎ вынСсти Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π»ΠΎΠ³ΠΈΠΊΡƒ Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ Ρ…ΡƒΠΊ Π² Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

На самом Π΄Π΅Π»Π΅, ΠΎΠ±Π° Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° ΠΈΠΌΠ΅ΡŽΡ‚ ΠΏΡ€Π°Π²ΠΎ Π½Π° Тизнь. Однако, ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚ Π±ΠΎΠ»Π΅Π΅ Ρ‡ΠΈΡ‚Π°Π΅ΠΌΡ‹ΠΌΠΈ, Ссли Π²Ρ‹ Π½Π°ΠΉΠ΄Ρ‘Ρ‚Π΅ баланс ΠΌΠ΅ΠΆΠ΄Ρƒ двумя ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π°ΠΌΠΈ ΠΈ Π±ΡƒΠ΄Π΅Ρ‚Π΅ Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ связанныС Π΄Ρ€ΡƒΠ³ с Π΄Ρ€ΡƒΠ³ΠΎΠΌ Π΄Π°Π½Π½Ρ‹Π΅. Если Ρ€Π°Π±ΠΎΡ‚Π° с состояниСм становится слоТной, ΠΌΡ‹ совСтуСм ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π΅Π΄ΡŽΡΠ΅Ρ€ ΠΈΠ»ΠΈ Π²Ρ‹Π½ΠΎΡΠΈΡ‚ΡŒ Π»ΠΎΠ³ΠΈΠΊΡƒ Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ…ΡƒΠΊΠΈ.

ΠœΠΎΠ³Ρƒ Π»ΠΈ я ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ эффСкт Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° обновлСниях ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°?

Π­Ρ‚ΠΎ довольно Ρ€Π΅Π΄ΠΊΠΈΠΉ случай. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ измСняСмый Ρ€Π΅Ρ„, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ логичСскоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰Π΅Π΅, ΠΏΡ€ΠΎΡˆΡ‘Π» Π»ΠΈ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Ρ€Π΅Π½Π΄Π΅Ρ€. Π’ свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ эффСкт ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΏΠΈΡ€Π°Ρ‚ΡŒΡΡ Π½Π° это Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Если Π²Ρ‹ Π·Π°ΠΌΠ΅Ρ‡Π°Π΅Ρ‚Π΅, Ρ‡Ρ‚ΠΎ эта Π»ΠΎΠ³ΠΈΠΊΠ° Π½ΡƒΠΆΠ½Π° Π²Π°ΠΌ часто, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ вынСсти Π΅Ρ‘ Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ Ρ…ΡƒΠΊ.

Как ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠ΅ пропсы ΠΈΠ»ΠΈ состояниС?

БСйчас, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ€Π΅Ρ„:

Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ услоТнённым, Π½ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ вынСсти эту Π»ΠΎΠ³ΠΈΠΊΡƒ Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ Ρ…ΡƒΠΊ:

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΠΊΠ°ΠΊ это Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ для пропсов, состояния ΠΈΠ»ΠΈ любого Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ вычисляСмого значСния.

ΠŸΠΎΡ‡Π΅ΠΌΡƒ я Π²ΠΈΠΆΡƒ ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΠ΅ пропсы ΠΈΠ»ΠΈ состояниС Π² ΠΌΠΎΠ΅ΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ?

Если Π²Ρ‹ спСрва ΠΊΠ»ΠΈΠΊΠ½Π΅Ρ‚Π΅ ΠΏΠΎ Β«ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅Β», Π° ΠΏΠΎΡ‚ΠΎΠΌ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚Π΅ счётчик, Ρ‚ΠΎ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ count Π½Π° ΠΌΠΎΠΌΠ΅Π½Ρ‚ наТатия ΠΏΠΎ ΠΊΠ½ΠΎΠΏΠΊΠ΅ Β«ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅Β». Π’Π°ΠΊΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π±Π°Π³ΠΈ Π² ΠΊΠΎΠ΄Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ пропсы ΠΈ состояниС Π½Π΅ ΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ.

Если Π²Ρ‹ Π½Π°ΠΌΠ΅Ρ€Π΅Π½Π½ΠΎ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΈΠ· асинхронного колбэка свСТайшСС состояниС, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ спСрва ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π² Ρ€Π΅Ρ„, ΠΏΠΎΡ‚ΠΎΠΌ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π΅Π³ΠΎ ΠΈ Π·Π°Ρ‚Π΅ΠΌ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π΅Π³ΠΎ ΠΈΠ· Ρ€Π΅Ρ„Π°.

НСсмотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π²Π°ΠΌ скорСС всСго это Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ, Π² Ρ€Π΅Π΄ΠΊΠΈΡ… случаях (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° ), Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ состояниС прямо Π²ΠΎ врСмя Ρ€Π΅Π½Π΄Π΅Ρ€Π°. React ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½ΠΎ сдСлаСт ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½Ρ‹ΠΉ Ρ€Π΅Π½Π΄Π΅Ρ€ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° с ΠΎΠ±Π½ΠΎΠ²Π»Ρ‘Π½Π½Ρ‹ΠΌ состояниСм сразу послС ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ Ρ€Π΅Π½Π΄Π΅Ρ€Π°, ΠΈ это Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°Ρ‚Ρ€Π°Ρ‚Π½ΠΎ.

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅, ΠΌΡ‹ Ρ…Ρ€Π°Π½ΠΈΠΌ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠΏΠ° row Π² состоянии, Ρ‡Ρ‚ΠΎ позволяСт ΡΡ€Π°Π²Π½ΠΈΡ‚ΡŒ значСния:

БущСствуСт Ρ‡Ρ‚ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Π½Π°ΠΏΠΎΠ΄ΠΎΠ±ΠΈΠ΅ forceUpdate?

Оба Ρ…ΡƒΠΊΠ° useState ΠΈ useReducer ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΡƒΡŽΡ‚ обновлСния, Ссли ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ€Π°Π²Π½ΠΎ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌΡƒ. ΠœΡƒΡ‚Π°Ρ†ΠΈΡ состояния ΠΈ Π²Ρ‹Π·ΠΎΠ² setState Π½Π΅ ΠΏΡ€ΠΈΠ²Π΅Π΄ΡƒΡ‚ ΠΊ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠΌΡƒ Ρ€Π΅Π½Π΄Π΅Ρ€Ρƒ.

ΠžΠ±Ρ‹Ρ‡Π½ΠΎ, Π²Ρ‹ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΌΡƒΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π΅ состояниС Π² React. Однако, Π² качСствС Π»Π°Π·Π΅ΠΉΠΊΠΈ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°ΡŽΡ‰ΠΈΠΉΡΡ счётчик, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΡ‚ΡŒΡΡ, Ссли состояниС Π½Π΅ измСнилось:

Π‘Ρ‚Π°Ρ€Π°ΠΉΡ‚Π΅ΡΡŒ ΠΈΠ·Π±Π΅Π³Π°Ρ‚ΡŒ этого ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π°, Ссли Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ.

ΠœΠΎΠ³Ρƒ Π»ΠΈ я ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ€Π΅Ρ„, ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½Ρ‹ΠΉ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚?

Как я ΠΌΠΎΠ³Ρƒ ΠΈΠ·ΠΌΠ΅Ρ€ΠΈΡ‚ΡŒ ΡƒΠ·Π΅Π» DOM?

Один ΠΈΠ· элСмСнтарных способов опрСдСлСния полоТСния ΠΈΠ»ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° DOM-ΡƒΠ·Π»Π° это использованиС колбэк-Ρ€Π΅Ρ„. React Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ этот колбэк всякий Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° Ρ€Π΅Ρ„ привязываСтся ΠΊ Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ ΡƒΠ·Π»Ρƒ. Π’ΠΎΡ‚ нСбольшая дСмонстрация:

ΠœΡ‹ Π½Π΅ Π²Ρ‹Π±Ρ€Π°Π»ΠΈ useRef Π² этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ€Π΅Ρ„Π° Π½Π΅ увСдомляСт нас ΠΎΠ± измСнСниях Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ значСния Ρ€Π΅Ρ„Π°. ИспользованиС колбэк-Ρ€Π΅Ρ„Π° Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎ Π΄Π°ΠΆΠ΅ Ссли Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½Π½Ρ‹ΠΉ ΡƒΠ·Π΅Π» ΠΏΠΎΠ·ΠΆΠ΅ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² ΠΎΡ‚Π²Π΅Ρ‚ Π½Π° ΠΊΠ»ΠΈΠΊ), ΠΌΡ‹ ΠΏΠΎ-ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅ ΠΎΠ± этом Π² Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π΅ ΠΈ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡ‚ΡŒ измСрСния.

Π’ Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ колбэк-Ρ€Π΅Ρ„ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·Π²Π°Π½ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΈ ΠΌΠΎΠ½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ ΠΈ Ρ€Π°Π·ΠΌΠΎΠ½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°, хотя ΠΎΡ‚Ρ€Π΅Π½Π΄Π΅Ρ€Π΅Π½Π½Ρ‹ΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚

остаётся Π½Π° мСстС ΠΏΡ€ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½Ρ‹Ρ… Ρ€Π΅Π½Π΄Π΅Ρ€Π°Ρ…. Если Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΡ‚ΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°, Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ΡΡŒ ResizeObserver ΠΈΠ»ΠΈ сторонним Ρ…ΡƒΠΊΠΎΠΌ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠΉ этот API.

ΠŸΡ€ΠΈ ΠΆΠ΅Π»Π°Π½ΠΈΠΈ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΠ·Π²Π»Π΅Ρ‡ΡŒ эту Π»ΠΎΠ³ΠΈΠΊΡƒ Π² Ρ…ΡƒΠΊ для ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ³ΠΎ использования:

Если Π²Ρ‹ Π½Π΅ Π·Π½Π°ΠΊΠΎΠΌΡ‹ с этим синтаксисом, ΠΎΠ·Π½Π°ΠΊΠΎΠΌΡŒΡ‚Π΅ΡΡŒ с объяснСниСм Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ Ρ…ΡƒΠΊΠ° состояния.

ΠœΠΎΠ³Ρƒ Π»ΠΈ я ΠΏΡ€ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ эффСкт ΠΏΡ€ΠΈ обновлСниях?

Π”Π°. ΠžΠ·Π½Π°ΠΊΠΎΠΌΡŒΡ‚Π΅ΡΡŒ с условным Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ эффСктов. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Π·Π°Π±Ρ‹Π² ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ обновлСния, Π²Ρ‹ Π·Π°Ρ‡Π°ΡΡ‚ΡƒΡŽ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ошибки. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ это ΠΈ Π½Π΅ являСтся ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ.

БСзопасно Π»ΠΈ Π½Π΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² спискС зависимостСй?

Π’ΠΎΠΎΠ±Ρ‰Π΅ говоря, это нСбСзопасно.

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

Если послС Ρ‚Π°ΠΊΠΎΠ³ΠΎ измСнСния ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π½ΠΈΠΊΠ°ΠΊΠΈΠ΅ значСния ΠΈΠ· области видимости ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ бСзопасно ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ [] :

Π’ зависимости ΠΎΡ‚ ситуации, ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ³ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ², описанных Π½ΠΈΠΆΠ΅.

Π”Π°Π²Π°ΠΉΡ‚Π΅ разбСрёмся, ΠΏΠΎΡ‡Π΅ΠΌΡƒ это Π²Π°ΠΆΠ½ΠΎ.

БСзопасно ΠΎΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ Π² спискС Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Π½ΠΈ сами, Π½ΠΈ Ρ‡Π΅Ρ€Π΅Π· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ½ΠΈ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚, пропсы, состояниС ΠΈΠ»ΠΈ ΠΈΡ… ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹Π΅. Π’Π°ΠΊ, Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ Π±Π°Π³:

Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΠΎΠ²Π°Π½ΠΎ ΠΈΡΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ Ρ‚Π°ΠΊΠΎΠΉ ΠΊΠΎΠ΄, пСрСмСщая Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π²Π½ΡƒΡ‚Ρ€ΡŒ вашСго эффСкта. Π­Ρ‚ΠΎ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ Π·Π°ΠΌΠ΅Ρ‡Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊΠΈΠ΅ пропсы ΠΈ состояниС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ вашим эффСктом, ΠΈ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ пСрСчислСны Π² спискС зависимостСй:

Π­Ρ‚ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ позволяСт ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΎΡ‚Π²Π΅Ρ‚Ρ‹, ΠΏΡ€ΠΈΡˆΠ΅Π΄ΡˆΠΈΠ΅ Π½Π΅ Π² порядкС запросов, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ локальной ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π²Π½ΡƒΡ‚Ρ€ΠΈ эффСкта:

ΠœΡ‹ пСрСмСстили Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π²Π½ΡƒΡ‚Ρ€ΡŒ эффСкта, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Π΅Ρ‘ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π² спискС зависимостСй.

ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅ этот нСбольшой ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΈ эту ΡΡ‚Π°Ρ‚ΡŒΡŽ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ·Π½Π°Ρ‚ΡŒ большС ΠΎ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ…ΡƒΠΊΠΎΠ².

Если ΠΏΠΎ ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅ Π²Ρ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π² эффСкт, Π΅ΡΡ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹:

Π§Ρ‚ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ, Ссли зависимости эффСкта ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ слишком часто?

Π‘Ρ‹Π²Π°ΡŽΡ‚ случаи, ΠΊΠΎΠ³Π΄Π° эффСкт ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°Π²ΠΈΡΠ΅Ρ‚ΡŒ ΠΎΡ‚ состояния, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΎΡ‡Π΅Π½ΡŒ часто измСняСтся. Π£ вас ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ ΠΆΠ΅Π»Π°Π½ΠΈΠ΅ Π½Π΅ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ это состояниС Π² список зависимостСй Ρ…ΡƒΠΊΠ°, Π½ΠΎ это ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Π±Π°Π³Π°ΠΌ:

(Π˜Π΄Π΅Π½Ρ‚ΠΈΡ‡Π½ΠΎΡΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ setCount Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π°, поэтому Π΅Ρ‘ ΠΌΠΎΠΆΠ½ΠΎ бСзопасно Π½Π΅ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ Π² список зависимостСй.)

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΉ Π²Ρ‹Π·ΠΎΠ² setInterval выполняСтся ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π· Π² сСкунду, Π½ΠΎ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΉ Π²Ρ‹Π·ΠΎΠ² setCount ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ для count (Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠ΅ c Π² ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΌ Π²Ρ‹Π·ΠΎΠ²Π΅ здСсь.)

Π’ ΠΊΡ€Π°ΠΉΠ½Π΅ΠΌ случаС Ссли Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π½Π°ΠΏΠΎΠ΄ΠΎΠ±ΠΈΠ΅ this Π² классах, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π΅Ρ„, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π² Π½Ρ‘ΠΌ ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ. Π’ΠΎΠ³Π΄Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΈ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΈΠ· Π½Π΅Π³ΠΎ. НапримСр:

РСкомСндуСтся ΠΏΡ€ΠΈΠ±Π΅Π³Π°Ρ‚ΡŒ ΠΊ этому ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Ρƒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ссли Π½Π΅ ΡƒΠ΄Π°Π»ΠΎΡΡŒ Π½Π°ΠΉΡ‚ΠΈ Π»ΡƒΡ‡ΡˆΠ΅ΠΉ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Ρ‹, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹, ΠΏΠΎΠ»Π°Π³Π°ΡŽΡ‰ΠΈΠ΅ΡΡ Π½Π° ΠΈΠ·ΠΌΠ΅Π½Ρ‡ΠΈΠ²ΠΎΡΡ‚ΡŒ, ΠΌΠ΅Π½Π΅Π΅ прСдсказуСмы. Если ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½ ΠΏΠ»ΠΎΡ…ΠΎ получаСтся Π²Ρ‹Ρ€Π°Π·ΠΈΡ‚ΡŒ, ΠΎΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ ишью Π½Π° GitHub с ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ исполняСмого ΠΊΠΎΠ΄Π° ΠΈ ΠΌΡ‹ постараСмся ΠΏΠΎΠΌΠΎΡ‡ΡŒ.

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠ±Π΅Ρ€Π½ΡƒΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Π² Π²Ρ‹Π·ΠΎΠ² React.memo для повСрхностного сравнСния Π΅Π³ΠΎ пропсов:

Как Π·Π°ΠΊΠ΅ΡˆΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ вычислСния?

Π₯ΡƒΠΊ useMemo позволяСт Π²Π°ΠΌ Π·Π°ΠΊΠ΅ΡˆΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ вычислСния ΠΌΠ΅ΠΆΠ΄Ρƒ нСсколькими Ρ€Π΅Π½Π΄Π΅Ρ€Π°ΠΌΠΈ, ΠΏΡƒΡ‚Ρ‘ΠΌ запоминания ΠΏΡ€ΠΎΡˆΠ»ΠΎΠ³ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°:

Π’Π°ΠΊΠΆΠ΅ ΡƒΠ΄ΠΎΠ±Π½ΠΎ, Ρ‡Ρ‚ΠΎ useMemo позволяСт ΠΏΡ€ΠΎΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ Π·Π°Ρ‚Ρ€Π°Ρ‚Π½Ρ‹Π΅ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½Ρ‹Π΅ Ρ€Π΅Π½Π΄Π΅Ρ€Ρ‹ Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΡ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ²:

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ этот ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ†ΠΈΠΊΠ»ΠΎΠ², Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π²Ρ‹Π·ΠΎΠ²Ρ‹ Ρ…ΡƒΠΊΠΎΠ² Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠΌΠ΅Ρ‰Π΅Π½Ρ‹ Π²Π½ΡƒΡ‚Ρ€ΡŒ Ρ†ΠΈΠΊΠ»ΠΎΠ². Но Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ для элСмСнта списка, ΠΈ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ useMemo Ρ‚Π°ΠΌ.

Как Π»Π΅Π½ΠΈΠ²ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ большиС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹?

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

ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ частый Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ использования β€” созданиС ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ состояния Π·Π°Ρ‚Ρ€Π°Ρ‚Π½ΠΎ:

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ Π½Π΅ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ состояниС (ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΏΠΎ Ρ„Π°ΠΊΡ‚Ρƒ игнорируСтся), ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π² useState :

Π­Ρ‚ΠΎΡ‚ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ позволяСт ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ создания Π±ΠΎΠ»ΡŒΡˆΠΈΡ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π½Π° всСх этапах, ΠΊΡ€ΠΎΠΌΠ΅ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ Ρ€Π΅Π½Π΄Π΅Ρ€Π°, ΠΊΠΎΠ³Π΄Π° это Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ. Если Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Flow ΠΈΠ»ΠΈ TypeScript, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Ρ‚Π°ΠΊΠΆΠ΅ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ для getObserver() нСпустой Ρ‚ΠΈΠΏ для увСрСнности.

Π―Π²Π»ΡΡŽΡ‚ΡΡ Π»ΠΈ Ρ…ΡƒΠΊΠΈ ΠΌΠ΅Π΄Π»Π΅Π½Π½Ρ‹ΠΌΠΈ ΠΈΠ·-Π·Π° создания Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Ρ€Π΅Π½Π΄Π΅Ρ€Π΅?

НСт. Π’ соврСмСнных Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π°Ρ… сырая ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π·Π°ΠΌΡ‹ΠΊΠ°Π½ΠΈΠΉ Π½Π΅ сильно отличаСтся ΠΎΡ‚ классов, ΠΊΡ€ΠΎΠΌΠ΅ особых случаСв.

Π’Π°ΠΊΠΆΠ΅ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°ΠΉΡ‚Π΅, Ρ‡Ρ‚ΠΎ рСализация Ρ…ΡƒΠΊΠΎΠ² Π±ΠΎΠ»Π΅Π΅ эффСктивна ΠΏΠΎ нСскольким ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°ΠΌ:

Π’Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½ΠΎ, ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ встроСнных Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π² React связаны с Ρ‚Π΅ΠΌ, ΠΊΠ°ΠΊ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° Π½ΠΎΠ²Ρ‹Ρ… колбэков Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Ρ€Π΅Π½Π΄Π΅Ρ€Π΅ Π»ΠΎΠΌΠ°Π΅Ρ‚ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ shouldComponentUpdate Π² Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΡ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°Ρ…. ΠŸΠΎΠ΄Ρ…ΠΎΠ΄ с Ρ…ΡƒΠΊΠ°ΠΌΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ эту ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ трСмя способами.

Π₯ΡƒΠΊ useCallback позволяСт ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ Ρ‚Ρƒ ΠΆΠ΅ ΡΠ°ΠΌΡƒΡŽ ссылку Π½Π° колбэк ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½Ρ‹ΠΌΠΈ Ρ€Π΅Π½Π΄Π΅Ρ€Π°ΠΌΠΈ, поэтому shouldComponentUpdate ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ:

Как ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ колбэков Π²Π½ΠΈΠ·?

ΠœΡ‹ поняли, Ρ‡Ρ‚ΠΎ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Ρƒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² Π½Π΅ нравится Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ колбэки Π²Π½ΠΈΠ· Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΡƒΡ€ΠΎΠ²Π½Π΅ Π΄Π΅Ρ€Π΅Π²Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ². Π”Π°ΠΆΠ΅ учитывая, Ρ‡Ρ‚ΠΎ этот ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Π±ΠΎΠ»Π΅Π΅ явный, это ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ чСрСсчур Π³Ρ€ΠΎΠΌΠΎΠ·Π΄ΠΊΠΈΠΌ.

Π’ качСствС Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Ρ‹ для Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Π΄Π΅Ρ€Π΅Π²ΡŒΠ΅Π² ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² ΠΌΡ‹ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅ΠΌ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ Π²Π½ΠΈΠ· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ dispatch ΠΈΠ· Ρ…ΡƒΠΊΠ° useReducer Ρ‡Π΅Ρ€Π΅Π· контСкст:

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

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ состояниС прилоТСния Π²Π½ΠΈΠ· Ρ‡Π΅Ρ€Π΅Π· пропсы (Π±ΠΎΠ»Π΅Π΅ явно) ΠΈΠ»ΠΈ Ρ‡Π΅Ρ€Π΅Π· контСкст (Π±ΠΎΠ»Π΅Π΅ ΡƒΠ΄ΠΎΠ±Π½ΠΎ для Π³Π»ΡƒΠ±ΠΎΠΊΠΎΠ³ΠΎ Π΄Π΅Ρ€Π΅Π²Π°). Если ваш контСкст Π² Ρ‚ΠΎΠΌ числС ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‘Ρ‚ Π½Π΅ΠΊΠΎΠ΅ состояниС, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π΄Π²Π° Ρ€Π°Π·Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠ° контСкста. Π’Π°ΠΊ ΠΊΠ°ΠΊ контСкст dispatch Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ измСняСтся, Ρ‚ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠ΅ Π΅Π³ΠΎ, Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ Π½ΡƒΠΆΠ΄Π°Ρ‚ΡŒΡΡ Π² ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠΌ Ρ€Π΅Π½Π΄Π΅Ρ€Π΅, Ссли Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠΌ Π½Π΅ трСбуСтся Π΅Ρ‰Ρ‘ ΠΈ контСкст с состояниСм прилоТСния.

ΠœΡ‹ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅ΠΌ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ dispatch Π²Π½ΠΈΠ· Ρ‡Π΅Ρ€Π΅Π· контСкст вмСсто ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… колбэков Ρ‡Π΅Ρ€Π΅Π· пропсы. Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Π½ Ρ‚ΡƒΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для ΠΏΠΎΠ»Π½ΠΎΡ‚Ρ‹ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½Ρ‹ Π² качСствС Π»Π°Π·Π΅ΠΉΠΊΠΈ.

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

Π’ любом случаС ΠΌΡ‹ Π½Π΅ совСтуСм ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ этот ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΈ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌ Π΅Π³ΠΎ Ρ‚ΡƒΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для ΠΏΠΎΠ»Π½ΠΎΡ‚Ρ‹ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½Ρ‹. ВмСсто этого, ΡΡ‚Π°Ρ€Π°ΠΉΡ‚Π΅ΡΡŒ ΠΈΠ·Π±Π΅Π³Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ колбэков Π³Π»ΡƒΠ±ΠΎΠΊΠΎ Π²Π½ΠΈΠ· Π² Π΄Π΅Ρ€Π΅Π²ΠΎ.

Как React связываСт Π²Ρ‹Π·ΠΎΠ²Ρ‹ Ρ…ΡƒΠΊΠΎΠ² с ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠΌ?

React слСдит Π·Π° Ρ‚Π΅ΠΌ, ΠΊΠ°ΠΊΠΎΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ рСндСрится Π² Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚. Благодаря ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌ Ρ…ΡƒΠΊΠΎΠ², ΠΌΡ‹ Π·Π½Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Ρ…ΡƒΠΊΠΈ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠ· React-ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² (ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ Ρ…ΡƒΠΊΠΈ Ρ‚Π°ΠΊΠΆΠ΅ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠ· React-ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ²).

Π§Ρ‚ΠΎ послуТило ΠΏΡ€ΠΎΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Ρ…ΡƒΠΊΠΎΠ²?

Π₯ΡƒΠΊΠΈ Π±Ρ‹Π»ΠΈ основаны Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… идСях ΠΈ экспСримСнтах:

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

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

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