Π’ ΠΌΠΈΡ€Π΅ соврСмСнной Π²Π΅Π±-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ, Π³Π΄Π΅ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ ΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ ‍с Π·Π°Π²ΠΈΠ΄Π½ΠΎΠΉ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒΡŽ, React⁀ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ особоС мСсто Π² сСрдцах Ρ„Ρ€ΠΎΠ½Ρ‚Π΅Π½Π΄-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ².⁒ Эта⁣ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ΠΎΡ‚ Facebook ⁀нС​ пСрСстаёт ΡƒΠ΄ΠΈΠ²Π»ΡΡ‚ΡŒ своими возмоТностями ΠΈ Π³ΠΈΠ±ΠΊΠΎΡΡ‚ΡŒΡŽ, прСдоставляя Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ мощныС⁣ инструмСнты⁒ для создания Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π½Ρ‹Ρ…β€Œ ΠΈ ΠΎΡ‚Π·Ρ‹Π²Ρ‡ΠΈΠ²Ρ‹Ρ… ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… интСрфСйсов.⁒ ΠžΠ΄Π½ΠΈΠΌβ€Œ из‍ таких⁀ инструмСнтов ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ…ΡƒΠΊΠΈ ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‚ Π½ΠΎΠ²Ρ‹Π΅ Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Ρ‹ для управлСния состояниСм ΠΈ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ β€ŒΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² ​React.

Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ мы⁣ погрузимся Π² ΠΌΠΈΡ€β€Œ Ρ…ΡƒΠΊΠΎΠ² ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π° React, которыС⁀ ΠΏΡ€ΠΈΡˆΠ»ΠΈ ⁀на ‍смСну β€ŒΡ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌ ΠΈ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΈΠ»ΠΈ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΊ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΡŽβ€ ΠΆΠΈΠ·Π½Π΅Π½Π½Ρ‹ΠΌ Ρ†ΠΈΠΊΠ»ΠΎΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ². ΠœΡ‹ рассмотрим, ΠΊΠ°ΠΊ ​эти малСнькиС, Π½ΠΎ могущСствСнныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π½Π°ΠΌ эффСктивно Ρ€Π΅Π°Π³ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π° измСнСния Π² DOM, ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ сайд-эффСкты ΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒβ’ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π½Π°ΡˆΠΈΡ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. ΠŸΡ€ΠΈΡΠΎΠ΅Π΄ΠΈΠ½ΡΠΉΡ‚Π΅ΡΡŒ ΠΊ Π½Π°ΠΌ Π² ΠΏΡƒΡ‚Π΅ΡˆΠ΅ΡΡ‚Π²ΠΈΠΈ ΠΏΠΎ ⁀миру Ρ…ΡƒΠΊΠΎΠ² React, Π³Π΄Π΅ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Π½ΠΎΠ²Ρ‹ΠΉ Ρ…ΡƒΠΊ ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ Π΄Π²Π΅Ρ€ΡŒ ⁣к Π±ΠΎΠ»Π΅Π΅ чистому ΠΈ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠΌΡƒ ΠΊΠΎΠ΄Ρƒ.

ОглавлСниС

ΠžΡΠ½ΠΎΠ²Ρ‹ ‍ТизнСнного Ρ†ΠΈΠΊΠ»Π°β€Œ Π² React

Π’ ΠΌΠΈΡ€Π΅ React ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ Ρ‡Π΅Ρ€Π΅Π· ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹Π΅ этапы своСго сущСствования,⁒ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ вмСстС Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΡŽΡ‚ Π΅Π³ΠΎ ТизнСнный‍ Ρ†ΠΈΠΊΠ». Π­Ρ‚ΠΈ этапы Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ Π² сСбя ‍созданиС, ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΠΈ Ρ€Π°Π·Ρ€ΡƒΡˆΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°.⁒ Π”ΠΎ появлСния Ρ…ΡƒΠΊΠΎΠ², ΠΆΠΈΠ·Π½Π΅Π½Π½Ρ‹ΠΉ Ρ†ΠΈΠΊΠ» ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° контролировался с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² классовых ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ², Ρ‚Π°ΠΊΠΈΡ… как⁀ componentDidMount, componentDidUpdate ΠΈ componentWillUnmount. Однако ​с Π²Π²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ Ρ…ΡƒΠΊΠΎΠ² Π² ⁀вСрсии 16.8, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ эти ΠΆΠ΅ возмоТности Π±Π΅Π· нСобходимости прСвращСния Π² ⁀классы.

Π‘Ρ€Π΅Π΄ΠΈ Ρ…ΡƒΠΊΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ β’ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ ΠΆΠΈΠ·Π½Π΅Π½Π½Ρ‹ΠΌ Ρ†ΠΈΠΊΠ»ΠΎΠΌ, Π²Ρ‹Π΄Π΅Π»ΡΡŽΡ‚ΡΡβ€ useState для управлСния состояниСм, useEffect Π΄Π»Ρβ€Œ выполнСния побочных⁀ эффСктов, ΠΈ useContext ⁒для доступа ΠΊ контСксту. НапримСр, ⁣ useEffect ΠΌΠΎΠΆΠ΅Ρ‚ β€ŒΠ·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ собой ΠΊΠ°ΠΊ componentDidMount,⁣ Ρ‚Π°ΠΊ ΠΈ componentDidUpdate, ⁀в зависимости ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, ​как ⁀он ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ. Π’ΠΎΡ‚ ΠΏΡ€ΠΎΡΡ‚ΠΎΠΉβ€Œ список Ρ…ΡƒΠΊΠΎΠ², ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ​из ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… играСт⁀ свою Ρ€ΠΎΠ»ΡŒ Π² ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎΠΌ Ρ†ΠΈΠΊΠ»Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°:

  • useState — инициализация ΠΈ ⁣обновлСниС состояния
  • useEffect ⁀- Ρ€Π°Π±ΠΎΡ‚Π° с ΠΏΠΎΠ±ΠΎΡ‡Π½Ρ‹ΠΌΠΈ эффСктами послС Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΠ½Π³Π°
  • useContext — доступ ΠΊ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹ΠΌ Π΄Π°Π½Π½Ρ‹ΠΌ Ρ‡Π΅Ρ€Π΅Π· контСкст
  • useReducer — ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ слоТным состояниСм с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ€Π΅Π΄ΡŒΡŽΡΠ΅Ρ€Π°
  • useCallback ⁣- мСмоизация колбэков
  • useMemo — мСмоизация Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ
  • useRef ⁒- ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ссылками Π½Π° DOM-элСмСнты ⁀и ⁣сохранСниС ​измСняСмых Π΄Π°Π½Π½Ρ‹Ρ… Π±Π΅Π· Ρ€Π΅Ρ€Π΅Π½Π΄Π΅Ρ€Π°
  • useImperativeHandle ⁒- настройка экзСмпляра ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ³ΠΎ Π² Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΡ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°Ρ…
  • useLayoutEffect — ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π΅Π½ ⁣useEffect, Π½ΠΎ срабатываСт синхронно послС всСх ⁣измСнСний DOM
  • useDebugValue — ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΊΠΈ для ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… Ρ…ΡƒΠΊΠΎΠ² Π² Reactβ€Œ DevTools

Π₯ΡƒΠΊΠ­ΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½Ρ‚β€Œ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° класса
useStatethis.state ΠΈ this.setState
useEffectcomponentDidMount, componentDidUpdate, ⁒componentWillUnmount
useContextContext API
useReducerRedux’s dispatch ΠΈ reducer
useCallbackΠœΠ΅ΠΌΠΎΠΈΠ·Π°Ρ†ΠΈΡ колбэков
useMemoΠœΠ΅ΠΌΠΎΠΈΠ·Π°Ρ†ΠΈΡ вычислСний
useRefБсылки Π½Π° элСмСнты
useImperativeHandleref.current
useLayoutEffectΠ‘ΠΈΠ½Ρ…Ρ€ΠΎΠ½Π½Ρ‹Π΅ ΠΏΠΎΠ±ΠΎΡ‡Π½Ρ‹Π΅ эффСкты
useDebugValueΠžΡ‚Π»Π°Π΄ΠΊΠ° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… Ρ…ΡƒΠΊΠΎΠ²

ΠŸΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ ΠΎΡ‚ классовых ​компонСнтов ΠΊ Ρ…ΡƒΠΊΠ°ΠΌ

Π‘ появлСниСм Ρ…ΡƒΠΊΠΎΠ² Π²β€Œ React 16.8, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ ΠΌΠΎΡ‰Π½Ρ‹ΠΉ инструмСнт для управлСния состояниСм ΠΈ ‍ТизнСнным Ρ†ΠΈΠΊΠ»ΠΎΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΌ стилС. Π­Ρ‚ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ»ΠΎ β’ΡƒΠΏΡ€ΠΎΡΡ‚ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄ и​ ΠΈΠ·Π±Π°Π²ΠΈΡ‚ΡŒΡΡ ΠΎΡ‚ ΠΌΠ½ΠΎΠ³ΠΈΡ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, связанных с классами. НапримСр, Ρ…ΡƒΠΊ useState замСняСт ΠΌΠ΅Ρ‚ΠΎΠ΄ setState, Π° useEffect ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ‚ возмоТности componentDidMount, componentDidUpdate ΠΈ componentWillUnmount.

Π”Π°Π²Π°ΠΉΡ‚Π΅ рассмотрим,⁀ ΠΊΠ°ΠΊ ​основныС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π° классовых ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² соотносятся с ⁒хуками Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°Ρ…:

  • componentDidMount – ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ⁀хук useEffect с пустым массивом‍ зависимостСй для выполнСния ΠΊΠΎΠ΄Π° ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π· послС ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΠ½Π³Π°.
  • componentDidUpdate – ⁒вызов useEffect ⁒ с массивом‍ зависимостСй, Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰ΠΈΠΌ ‍пСрСмСнныС, ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π΄ΠΎΠ»ΠΆΠ½ΠΎ β’Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ эффСкт.
  • componentWillUnmount – Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ функции‍ очистки ​из useEffect для выполнСния ΠΊΠΎΠ΄Π° ΠΏΠ΅Ρ€Π΅Π΄ ⁣удалСниСм компонСнта⁣ ΠΈΠ· DOM.
ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π°Π₯ΡƒΠΊ
componentDidMountuseEffect(() => { /* ... */ }, [])
componentDidUpdateuseEffect(() => { /* ... */ }, [deps])
componentWillUnmountuseEffect(() => { return () => { /* ... */ } }, [])

ΠŸΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ ΠΊ хукам⁒ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ структуру ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ², Π½ΠΎ ΠΈ ‍способствуСт Π»ΡƒΡ‡ΡˆΠ΅ΠΌΡƒ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠΌΡƒ использованию Π»ΠΎΠ³ΠΈΠΊΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΈΠΌΠΈ. Π­Ρ‚ΠΎ ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ Π΄Π²Π΅Ρ€ΠΈ для создания ΡΠΎΠ±ΡΡ‚Π²Π΅Π½Π½Ρ‹Ρ…β€Œ Ρ…ΡƒΠΊΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ β€ŒΠ½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΎ встроСнных ​хуков для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡, дСлая ваш ⁒код Π΅Ρ‰Π΅ Π±ΠΎΠ»Π΅Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½Ρ‹ΠΌ ΠΈ понятным.

ИспользованиС useEffect⁀ для эмуляции ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎΠ³ΠΎ β€ŒΡ†ΠΈΠΊΠ»Π°

Π’ ΠΌΠΈΡ€Π΅ React, Ρ…ΡƒΠΊΠΈ стали Ρ€Π΅Π²ΠΎΠ»ΡŽΡ†ΠΈΠΎΠ½Π½Ρ‹ΠΌ Π½ΠΎΠ²ΠΎΠ²Π²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΠΎΡΡ‚ΠΎΡΠ½ΠΈΠ΅β€Œ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ возмоТности React Π±Π΅Π· написания классов. Один ΠΈΠ· Ρ‚Π°ΠΊΠΈΡ… Ρ…ΡƒΠΊΠΎΠ², useEffect, прСдоставляСт ΠΌΠΎΡ‰Π½Ρ‹ΠΉ инструмСнт для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΏΠΎΠ±ΠΎΡ‡Π½Ρ‹ΠΌΠΈ эффСктами, ⁒а Ρ‚Π°ΠΊΠΆΠ΅ ⁀для эмуляции ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎΠ³ΠΎ β€ŒΡ†ΠΈΠΊΠ»Π°, Π·Π½Π°ΠΊΠΎΠΌΡ‹Ρ… Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ классовых ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ². Рассмотрим, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ​ useEffect для ΠΈΠΌΠΈΡ‚Π°Ρ†ΠΈΠΈ повСдСния componentDidMount, componentDidUpdate ΠΈ ‍ componentWillUnmount.

  • componentDidMount: Для ΠΈΠΌΠΈΡ‚Π°Ρ†ΠΈΠΈ этого β€ŒΠΌΠ΅Ρ‚ΠΎΠ΄Π°, useEffect вызываСтся с пустым массивом зависимостСй. Это​ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ React ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ эффСкт​ Π½Π΅ зависит ΠΎΡ‚ ΠΊΠ°ΠΊΠΈΡ…-Π»ΠΈΠ±ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΈΠ· пропсов ΠΈΠ»ΠΈ ​состояния,⁣ ΠΈ поэтому ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ β’Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ⁀один⁒ Ρ€Π°Π· послС ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΠ½Π³Π°.
  • componentDidUpdate: Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠΌΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ этот ⁒мСтод, useEffect ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ с массивом зависимостСй,‍ содСрТащим значСния,β€Œ при⁣ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ эффСкт. Если массив Π½Π΅ прСдоставлСн, эффСкт Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ послС ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΠ½Π³Π°.
  • componentWillUnmount:⁒ Для подраТания этому ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ, Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΠΎΠΉ Π² useEffect, возвращаСтся функция очистки, ⁀которая⁒ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·Π²Π°Π½Π° ΠΏΠ΅Ρ€Π΅Π΄ Ρ‚Π΅ΠΌ, как‍ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π·ΠΌΠΎΠ½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½.

ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ useEffect Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ понимания Ρ‚ΠΎΠ³ΠΎ,⁣ ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ зависимости⁒ и‍ ΠΊΠΎΠ³Π΄Π° React Π²Ρ‹Π±ΠΈΡ€Π°Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ эффСкт. НиТС прСдставлСна Ρ‚Π°Π±Π»ΠΈΡ†Π°, Π΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΡƒΡŽΡ‰Π°Ρ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ сцСнарии⁒ использования useEffect ΠΈ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΈΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π°.

Π₯ΡƒΠΊΠœΠ΅Ρ‚ΠΎΠ΄ ТизнСнного⁒ Ρ†ΠΈΠΊΠ»Π°ΠšΠΎΠ³Π΄Π° β€‹ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ
useEffect(() => {...}, [])componentDidMountОдин Ρ€Π°Π· послС ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΠ½Π³Π°
useEffect(() => {...}, [deps])componentDidUpdateПослС ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΠ½Π³Π°, ΠΊΠΎΠ³Π΄Π° ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ зависимости
useEffect(() => { return () => {...} }, [])componentWillUnmountΠŸΠ΅Ρ€Π΅Π΄ Ρ€Π°Π·ΠΌΠΎΠ½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ​ useEffect прСдоставляСт Π³ΠΈΠ±ΠΊΠΈΠΉ ΠΈ ​мощный способ ⁒управлСния ΠΏΠΎΠ±ΠΎΡ‡Π½Ρ‹ΠΌΠΈ эффСктами ΠΈ ΠΆΠΈΠ·Π½Π΅Π½Π½Ρ‹ΠΌ ⁀циклом ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΌ стилС React. ПониманиС ΠΈ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ΅ использованиС этого Ρ…ΡƒΠΊΠ° Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΠΎΠ²Ρ‹ΡˆΠ°Π΅Ρ‚ качСство‍ ΠΊΠΎΠ΄Π° ΠΈ ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ рСсурсами Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ.

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ β€ŒΡ€Π΅Π½Π΄Π΅Ρ€ΠΈΠ½Π³Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ…ΡƒΠΊΠ° useMemo

Π’ ΠΏΡ€ΠΎΡ†Π΅ΡΡΠ΅β€Œ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π½Π° React часто Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ прилоТСния, особСнно ΠΊΠΎΠ³Π΄Π° Ρ€Π΅Ρ‡ΡŒ ΠΈΠ΄Π΅Ρ‚ ΠΎ слоТных ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°Ρ… с тяТСлыми вычислСниями ⁀или большими объСмами Π΄Π°Π½Π½Ρ‹Ρ…. ⁒ИспользованиС Ρ…ΡƒΠΊΠ° ​ useMemo позволяСт Ρ€Π΅ΡˆΠΈΡ‚ΡŒ эту Π·Π°Π΄Π°Ρ‡Ρƒ, β€ΠΊΡΡˆΠΈΡ€ΡƒΡ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ вычислСний ΠΈ прСдотвращая Π½Π΅Π½ΡƒΠΆΠ½Ρ‹Π΅ пСрСрисовки.

Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ useMemo? Π­Ρ‚ΠΎΡ‚ Ρ…ΡƒΠΊ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ⁀два β€ŒΠ°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°: Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ для β€ŒΠ²Ρ‹Ρ‡ΠΈΡΠ»Π΅Π½ΠΈΡ ΠΈ ⁀массив зависимостСй. Ѐункция Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ Π²Ρ‹Π·Π²Π°Π½Π° β£Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚ΠΎΠ³Π΄Π°,β€Œ ΠΊΠΎΠ³Π΄Π° измСнится хотя Π±Ρ‹ ΠΎΠ΄Π½Π° ΠΈΠ· зависимостСй. Π’ ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… случаях React Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅β€‹ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ использования:

  • ВычислСниС слоТных Π΄Π°Π½Π½Ρ‹Ρ…:
const memoizedValue = useMemo(() => computeExpensiveValue(a, b), [a, b]);
  • ИзбСганиС β€‹Π»ΠΈΡˆΠ½ΠΈΡ… Ρ€Π΅Π½Π΄Π΅Ρ€ΠΎΠ² ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°:
const MemoizedComponent = useMemo(() => , [prop1]);

Когда ​стоит ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ useMemo? НС ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ случай Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ этого Ρ…ΡƒΠΊΠ°. Π’ΠΎΡ‚ нСсколько сцСнариСв, ΠΊΠΎΠ³Π΄Π° Π΅Π³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ⁀будСт ΠΎΠΏΡ€Π°Π²Π΄Π°Π½ΠΎ:

Π‘Ρ†Π΅Π½Π°Ρ€ΠΈΠΉΠžΠΏΠΈΡΠ°Π½ΠΈΠ΅
ВысокиС Π·Π°Ρ‚Ρ€Π°Ρ‚Ρ‹ Π²Ρ‹Ρ‡ΠΈΡΠ»Π΅Π½ΠΈΠΉΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ выполняСт‍ рСсурсоСмкиС вычислСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡ‚ΡŒΡΡβ’ ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Ρ€Π΅Π½Π΄Π΅Ρ€Π΅.
Π Π°Π±ΠΎΡ‚Π° с⁒ большими массивами ΠΈΠ»ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈΠΠ΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ‍повторного ⁒создания массивов/ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², Ссли ΠΈΡ… содСрТимоС Π½Π΅ измСнилось.
ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ ​дочСрних ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ²Π”ΠΎΡ‡Π΅Ρ€Π½ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ зависят ΠΎΡ‚ пропсов, β€ŒΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π΅Π΄ΠΊΠΎ β€ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ, ΠΈ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ β€ΠΏΠ΅Ρ€Π΅Ρ€ΠΈΡΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒΡΡ ⁒бСз нСобходимости.

ИспользованиС useMemo ΠΌΠΎΠΆΠ΅Ρ‚β€Œ сущСствСнно ΠΏΠΎΠ²Ρ‹ΡΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ прилоТСния, Π½ΠΎ Π²Π°ΠΆΠ½ΠΎ ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ΅ ⁀примСнСниС ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΌΡƒ эффСкту. ΠŸΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, ΡƒΠ±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ это Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ, ΠΈ ΠΏΡ€ΠΎΠ²Π΅Π΄ΠΈΡ‚Π΅ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ².

УправлСниС⁀ состояниСм ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° Ρ‡Π΅Ρ€Π΅Π· useState

Одним ΠΈΠ· Ρ„ΡƒΠ½Π΄Π°ΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Ρ‹Ρ… Ρ…ΡƒΠΊΠΎΠ² Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ React являСтся⁣ useState, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ состояниС ΠΊ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌ. Π Π°Π½Π΅Π΅ Π΄Π»Ρβ€Œ управлСния состояниСм ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π»ΠΈΡΡŒβ€Œ ΠΊΠ»Π°ΡΡΠΎΠ²Ρ‹Π΅β€Œ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹,⁣ Π½ΠΎ с появлСниСм Ρ…ΡƒΠΊΠΎΠ² β€ŒΠΊΠΎΠ΄ стал Π±ΠΎΠ»Π΅Π΅ Π»Π°ΠΊΠΎΠ½ΠΈΡ‡Π½Ρ‹ΠΌ ΠΈ понятным. Π₯ΡƒΠΊ useState ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ ⁣значСниС состояния ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ массив ΠΈΠ· Π΄Π²ΡƒΡ… элСмСнтов: Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ состояния β€ŒΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ для β€ŒΠ΅Π³ΠΎ обновлСния.

ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ useState начинаСтся ‍с дСструктуризации Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ³ΠΎ массива для удобства Ρ€Π°Π±ΠΎΡ‚Ρ‹ со значСниями. НапримСр, Ссли Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Ρ‚ΡŒ количСство⁀ ΠΊΠ»ΠΈΠΊΠΎΠ² ΠΏΠΎ ΠΊΠ½ΠΎΠΏΠΊΠ΅, ΠΌΡ‹ моТСм⁣ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ β€ŒΡΠΎΡΡ‚ΠΎΡΠ½ΠΈΠ΅ clickCount β£ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

const [clickCount, setClickCount] = useState(0);

Для обновлСния состояния ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ⁀функция, которая Π±Ρ‹Π»Π° β€ŒΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π° ​вторым элСмСнтом массива, Π² нашСм случаС setClickCount. Это⁀ позволяСт Ρ€Π΅Π°Π³ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π° дСйствия ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Ρ‚ΡŒ счСтчик ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅:

const handleClick = () => {
  setClickCount(clickCount + 1);
};

Π’Π°ΠΆΠ½ΠΎ β£ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ⁀состояния ⁣с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ useState являСтся асинхронным, что‍ слСдуСт⁒ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ интСрфСйсов. НиТС⁣ прСдставлСна Ρ‚Π°Π±Π»ΠΈΡ†Π° с ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌΠΈ использования хука​ useState Π² Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… сцСнариях:

Π‘Ρ†Π΅Π½Π°Ρ€ΠΈΠΉΠšΠΎΠ΄ΠžΠΏΠΈΡΠ°Π½ΠΈΠ΅
Π‘Ρ‡Π΅Ρ‚Ρ‡ΠΈΠΊ ​кликовconst [count, setCount] = useState(0);ΠžΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Π½ΠΈΠ΅ количСства ΠΊΠ»ΠΈΠΊΠΎΠ² по⁒ элСмСнту.
ВСкстовоС ⁣полСconst [text, setText] = useState('');Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ значСниСм​ тСкстового поля.
ΠŸΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚Π΅Π»ΡŒconst [isToggled, setIsToggled] = useState(false);БостояниС ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚Π΅Π»Ρ (Π²ΠΊΠ»/Π²Ρ‹ΠΊΠ»).

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

ΠŸΡ€ΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚Ρ‹Π΅ Ρ‚Π΅Ρ…Π½ΠΈΠΊΠΈ с использованиСм хука⁀ useReducer

ИспользованиС Ρ…ΡƒΠΊΠ° useReducer ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π΄ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌΠΈ React Π½ΠΎΠ²Ρ‹Π΅ ​горизонты управлСния состояниСм, особСнно ΠΊΠΎΠ³Π΄Π° Π΄Π΅Π»ΠΎ касаСтся слоТных ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ². Этот⁀ Ρ…ΡƒΠΊ ⁒прСдоставляСт Π±ΠΎΠ»Π΅Π΅ ΠΌΠΎΡ‰Π½Ρ‹ΠΉ ΠΈ Π³ΠΈΠ±ΠΊΠΈΠΉ способ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ⁣состояния, Ρ‡Π΅ΠΌ useState, позволяя вам⁒ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ ⁣болСС ⁣слоТными ⁀структурами Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ Π»ΠΎΠ³ΠΈΠΊΠΎΠΉ ΠΈΡ… ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ. НапримСр, Π²Ρ‹ моТСтС⁣ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π»ΠΎΠ³ΠΈΠΊΡƒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Ρ„ΠΎΡ€ΠΌ с мноТСством ΠΏΠΎΠ»Π΅ΠΉ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ β€ŒΠΎΠ΄ΠΈΠ½ β£Ρ€Π΅Π΄ΡŒΡŽΡΠ΅Ρ€, Ρ‡Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ ΠΊΠΎΠ΄.

Π”Π°Π²Π°ΠΉΡ‚Π΅ рассмотрим нСсколько ​ ΠΏΡ€ΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚Ρ‹Ρ… Ρ‚Π΅Ρ…Π½ΠΈΠΊ примСнСния ⁣ useReducer:

  • ЛСнивая инициализация: ⁒ позволяСт ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ состояниС Ρ…ΡƒΠΊΠ°β€Œ с ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌβ€ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒβ€ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ для вычислСния Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ состояния ΠΈΠ· пропсов ΠΈΠ»ΠΈ выполнСния слоТных расчСтов.
  • БвязываниС Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Ρ€Π΅Π΄ΡŒΡŽΡΠ΅Ρ€ΠΎΠ²: для управлСния Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ частями состояния моТно⁀ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ нСсколько β£Ρ€Π΅Π΄ΡŒΡŽΡΠ΅Ρ€ΠΎΠ², Ρ‡Ρ‚ΠΎ ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ тСстированиС ΠΈ ΠΏΠΎΠ²Ρ‹ΡˆΠ°Π΅Ρ‚ ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΊΠΎΠ΄Π°.

Π”Π΅ΠΉΡΡ‚Π²ΠΈΠ΅ΠžΠΏΠΈΡΠ°Π½ΠΈΠ΅
INITΠ˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡβ€Œ состояния
SUBMITΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ Ρ„ΠΎΡ€ΠΌΡ‹
RESETБброс ‍состояния ΠΊ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΌΡƒ

ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ useReducer Ρ‚Π°ΠΊΠΆΠ΅ β€‹ΡƒΠ»ΡƒΡ‡ΡˆΠ°Π΅Ρ‚ β€ŒΠ²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΠΈ тСстирования ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ², ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ вы​ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΠ·ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π»ΠΎΠ³ΠΈΠΊΡƒ Ρ€Π΅Π΄ΡŒΡŽΡΠ΅Ρ€Π° ΠΎΡ‚ самого ⁒компонСнта ‍и ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ Π΅Ρ‘ нСзависимо. Π­Ρ‚ΠΎ дСлаСт​ ваш ΠΊΠΎΠ΄ Π±ΠΎΠ»Π΅Π΅ прСдсказуСмым ΠΈ Π½Π°Π΄Π΅ΠΆΠ½Ρ‹ΠΌ. ΠšΡ€ΠΎΠΌΠ΅β’ Ρ‚ΠΎΠ³ΠΎ,⁀ использованиС контСкста Π² сочСтании​ с Ρ€Π΅Π΄ΡŒΡŽΡΠ΅Ρ€ΠΎΠΌ β€ŒΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ‚ β€ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ β€ŒΡΠΎΡΡ‚ΠΎΡΠ½ΠΈΠ΅ΠΌ Π½Π°β€Œ ΡƒΡ€ΠΎΠ²Π½Π΅ прилоТСния бСз‍ нСобходимости‍ пробрасывания колбэков ‍и состояния Ρ‡Π΅Ρ€Π΅Π· пропсы.

ΠŸΠ°Ρ‚Ρ‚Π΅Ρ€Π½Ρ‹ ΠΈ Π»ΡƒΡ‡ΡˆΠΈΠ΅ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ ⁒работы с Ρ…ΡƒΠΊΠ°ΠΌΠΈ Π² React

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΠ΅β€ Ρ…ΡƒΠΊΠΎΠ²β€Œ в​ React ​открываСт ΠΏΠ΅Ρ€Π΅Π΄ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌΠΈ новыС​ возмоТности для управлСния ΠΆΠΈΠ·Π½Π΅Π½Π½Ρ‹ΠΌ Ρ†ΠΈΠΊΠ»ΠΎΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ². Π§Ρ‚ΠΎΠ±Ρ‹ максимально эффСктивно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ…ΡƒΠΊΠΈ, слСдуСт ΠΏΡ€ΠΈΠ΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒΡΡβ€ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹Ρ… ‍паттСрнов ΠΈ β€ŒΡ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΉ. НапримСр, useState ΠΈ useEffect ΡΠ²Π»ΡΡŽΡ‚ΡΡ основными ΡΡ‚Ρ€ΠΎΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ ‍блоками для создания Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² Ρβ€Œ состояниСм ΠΈ ΠΏΠΎΠ±ΠΎΡ‡Π½Ρ‹ΠΌΠΈ эффСктами ⁀соотвСтствСнно. ⁒ВаТно​ ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Π²Ρ‹Π·ΠΎΠ² Ρ…ΡƒΠΊΠ° Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ Π½Π° Π²Π΅Ρ€Ρ…Π½Π΅ΠΌ уровнС​ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°, Π±Π΅Π· влоТСнности Π² условия, Ρ†ΠΈΠΊΠ»Ρ‹ ⁣или Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ ΠΈΡ… ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ Π² соотвСтствии с ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌΠΈ Ρ…ΡƒΠΊΠΎΠ².

Для ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΡ читаСмости ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ ΠΊΠΎΠ΄Π°,⁀ рСкомСндуСтся Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ хуки⁣ по⁣ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ. НапримСр, всС useState Π΄ΠΎΠ»ΠΆΠ½Ρ‹β€Œ ΠΈΠ΄Ρ‚ΠΈ ΠΎΠ΄ΠΈΠ½ Π·Π° Π΄Ρ€ΡƒΠ³ΠΈΠΌ, Π·Π° Π½ΠΈΠΌΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‚ useEffect ⁀ ΠΈ ⁒так Π΄Π°Π»Π΅Π΅.⁣ Π’Π°ΠΊΠΆΠ΅ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΎΠΉ являСтся созданиС ⁀собствСнных Ρ…ΡƒΠΊΠΎΠ² для инкапсуляции⁀ слоТной Π»ΠΎΠ³ΠΈΠΊΠΈ, Ρ‡Ρ‚ΠΎ позволяСт ΠΏΠ΅Ρ€Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ Ρ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΅Ρ‘ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ ΠΎΡ‚ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ². НиТС прСдставлСна Ρ‚Π°Π±Π»ΠΈΡ†Π° с ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌΠΈ распространённых Ρ…ΡƒΠΊΠΎΠ² ΠΈ ΠΈΡ… Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ:

Π₯укНазначСниС
useStateΠ˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ ΠΈ обновлСниС⁒ состояния ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°
useEffectΠ’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ±ΠΎΡ‡Π½Ρ‹Ρ… ‍эффСктов (запросы Π΄Π°Π½Π½Ρ‹Ρ…, подписки)
useContextДоступ ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ ΠΈΠ· контСкста
useReducerΠ£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ⁣слоТным состояниСм с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ€Π΅Π΄ΡŒΡŽΡΠ΅Ρ€Π°
useCallbackΠœΠ΅ΠΌΠΎΠΈΠ·Π°Ρ†ΠΈΡ колбэков для⁣ прСдотвращСния β€ŒΠ»ΠΈΡˆΠ½ΠΈΡ… ⁣рСндСров
useMemoΠœΠ΅ΠΌΠΎΠΈΠ·Π°Ρ†ΠΈΡ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ для ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ
useRefБсылка Π½Π° DOM-элСмСнты β€ŒΠΈΠ»ΠΈ Ρ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ измСняСмых Π΄Π°Π½Π½Ρ‹Ρ… Π±Π΅Π· Ρ€Π΅Π½Π΄Π΅Ρ€Π°
useLayoutEffectΠ˜Π΄Π΅Π½Ρ‚ΠΈΡ‡Π΅Π½ useEffect, Π½ΠΎ срабатываСт синхронно послС всСх ⁒измСнСний DOM
useImperativeHandleНастройка экзСмпляра ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ³ΠΎ ​с ref

ΠŸΡ€ΠΈΠΌΠ΅Π½ΡΡ эти ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Ρ‹ ΠΈ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΠΏΡ€ΠΎΡΡ‚ΠΈΡ‚ΡŒ процСсс управлСния β€ŒΠΆΠΈΠ·Π½Π΅Π½Π½Ρ‹ΠΌ Ρ†ΠΈΠΊΠ»ΠΎΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ², ΠΏΠΎΠ²Ρ‹ΡΠΈΡ‚ΡŒ Ρ‡ΠΈΡ‚Π°Π΅ΠΌΠΎΡΡ‚ΡŒβ€ ΠΊΠΎΠ΄Π° ΠΈ ΠΎΠ±Π»Π΅Π³Ρ‡ΠΈΡ‚ΡŒ Π΅Π³ΠΎ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ.

Вопрос/ΠΎΡ‚Π²Π΅Ρ‚

**Вопрос: Π§Ρ‚ΠΎ такоС⁒ Ρ…ΡƒΠΊΠΈ ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π° Π² React?**

**ΠžΡ‚Π²Π΅Ρ‚:** Π₯ΡƒΠΊΠΈ ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π° Π² React – это ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ «ΠΏΠΎΠ΄Ρ†Π΅ΠΏΠΈΡ‚ΡŒΡΡ» ⁀к⁒ опрСдСлСнным⁀ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°ΠΌ в⁀ ΠΆΠΈΠ·Π½ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°, Ρ‚Π°ΠΊΠΈΠΌ ΠΊΠ°ΠΊ ​Сго‍ созданиС, ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ Ρ€Π°Π·ΠΌΠΎΠ½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅. Π‘ ΠΈΡ… ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ ‍компонСнтов Π² ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρ‹.

**Вопрос: КакиС основныС Ρ…ΡƒΠΊΠΈ ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π° ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Π² React?**

**ΠžΡ‚Π²Π΅Ρ‚:** Π’ ​React ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ основныС Ρ…ΡƒΠΊΠΈ ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π°: `useState`, `useEffect`,‍ `useContext`,⁒ `useReducer`, `useCallback`, `useMemo`, `useRef`, ΠΈ ⁣`useLayoutEffect`.⁣ ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· Π½ΠΈΡ… выполняСт свою β€ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΡƒΡŽ β€Ρ€ΠΎΠ»ΡŒ в⁒ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΈ состояниСм ΠΈ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ².

**Вопрос: Π§Π΅ΠΌ Ρ…ΡƒΠΊΠΈ ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ ΠΎΡ‚ классовых ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π°?**

**ΠžΡ‚Π²Π΅Ρ‚:** Π₯ΡƒΠΊΠΈ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ Π±ΠΎΠ»Π΅Π΅ простой ΠΈ ΠΌΠΎΡ‰Π½Ρ‹ΠΉ ⁒способ использования ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² ‍по ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ ⁒с классовыми ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ. Они ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ состояниС и⁀ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ‍возмоТности‍ React Π±Π΅Π· написания класса, дСлая ΠΊΠΎΠ΄ болСС​ чистым ΠΈ понятным.

**Вопрос:⁀ МоТно Π»ΠΈ β€ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ…ΡƒΠΊΠΈ Π² классовых ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°Ρ…?**

**ΠžΡ‚Π²Π΅Ρ‚:** НСт,⁒ Ρ…ΡƒΠΊΠΈ нСльзя ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² классовых ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°Ρ…. Они ⁒прСдназначСны ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ для Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ², Ρ‡Ρ‚ΠΎ являСтся ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· способов упрощСния ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π½ΠΎΠ³ΠΎ кода‍ и⁀ ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΡ Π΅Π³ΠΎ ‍читаСмости.

**Вопрос: Какой Ρ…ΡƒΠΊ позволяСт Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΏΠΎΠ±ΠΎΡ‡Π½Ρ‹Π΅ эффСкты?**

**ΠžΡ‚Π²Π΅Ρ‚:** ⁀Для выполнСния ⁀побочных эффСктов β€Π²β€Œ React ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ⁀хук `useEffect`. ΠžΠ½β€Œ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ‍собой ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎΠ³ΠΎ ​цикла `componentDidMount`, `componentDidUpdate` ΠΈ `componentWillUnmount` Π² классовых ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°Ρ….

**Вопрос: ΠœΠΎΠΆΠ½ΠΎβ€ Π»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ…ΡƒΠΊΠΈ для ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ²?**

**ΠžΡ‚Π²Π΅Ρ‚:** Π”Π°, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽβ€ Ρ…ΡƒΠΊΠΎΠ² `useMemo` ΠΈ `useCallback` ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ⁒компонСнтов. Π­Ρ‚ΠΈ Ρ…ΡƒΠΊΠΈ ΠΏΠΎΠΌΠΎΠ³Π°ΡŽΡ‚β€ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ Π½Π΅Π½ΡƒΠΆΠ½Ρ‹Ρ… вычислСний ΠΈ Ρ€Π΅Ρ€Π΅Π½Π΄Π΅Ρ€ΠΎΠ², ΠΊΡΡˆΠΈΡ€ΡƒΡ значСния ΠΈ функции⁒ соотвСтствСнно.

**Вопрос: Какой Ρ…ΡƒΠΊ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с β€ŒΡ€Π΅Ρ„Π°ΠΌΠΈ?**

**ΠžΡ‚Π²Π΅Ρ‚:** Для работы⁀ с Ρ€Π΅Ρ„Π°ΠΌΠΈ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°Ρ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ…ΡƒΠΊ `useRef`. Он β€ŒΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ прямой ⁣доступ ΠΊ ​DOM-элСмСнтам ΠΈΠ»ΠΈ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ любоС ΠΌΡƒΡ‚ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ Ρ€Π΅Ρ€Π΅Π½Π΄Π΅Ρ€ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° ⁀при ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ.

**Вопрос: НуТно Π»ΠΈ всСгда Π·Π°ΠΌΠ΅Π½ΡΡ‚ΡŒ классовыС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ с Ρ…ΡƒΠΊΠ°ΠΌΠΈ?**

**ΠžΡ‚Π²Π΅Ρ‚:** НС ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ. Π₯отя​ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ с хуками⁀ часто Π±ΠΎΠ»Π΅Π΅ ΡƒΠ΄ΠΎΠ±Π½Ρ‹ ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΡƒΠΏΡ€ΠΎΡΡ‚ΠΈΡ‚ΡŒ β€ŒΠ²Π°Ρˆ ΠΊΠΎΠ΄, классовыС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ ΠΏΠΎ-прСТнСму​ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… сцСнариях. Π’Ρ‹Π±ΠΎΡ€ ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΈΠΌΠΈ зависит от​ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Ρ… трСбований​ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΈ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚Π΅Π½ΠΈΠΉ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°.

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

ΠœΡ‹ ΠΏΠΎΠ³Ρ€ΡƒΠ·ΠΈΠ»ΠΈΡΡŒ Π² ΠΌΠΈΡ€ React ΠΈ исслСдовали Π΅Π³ΠΎ ΠΆΠΈΠ·Π½Π΅Π½Π½Ρ‹Π΅ Ρ†ΠΈΠΊΠ»Ρ‹, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΡƒΠ·Π½Π°Π»ΠΈ, ΠΊΠ°ΠΊ соврСмСнныС Ρ…ΡƒΠΊΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π½Π°ΠΌ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ этими процСссами⁣ с Π»Π΅Π³ΠΊΠΎΡΡ‚ΡŒΡŽβ€Œ ΠΈ ΡΠ»Π΅Π³Π°Π½Ρ‚Π½ΠΎΡΡ‚ΡŒΡŽ. ΠœΡ‹ надССмся, ⁀что⁣ прСдоставлСнная информация ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ Π²Π°ΠΌ Π² создании Π±ΠΎΠ»Π΅Π΅ ‍эффСктивных ΠΈ ΠΎΡ‚Π·Ρ‹Π²Ρ‡ΠΈΠ²Ρ‹Ρ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. ΠŸΠΎΠΌΠ½ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ…ΡƒΠΊ ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π΄ Π²Π°ΠΌΠΈ Π½ΠΎΠ²Ρ‹Π΅ возмоТности ‍для ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ‍и ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΡ Π²Π°ΡˆΠΈΡ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ². Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ Π²ΠΎΠΎΡ€ΡƒΠΆΠ΅Π½Ρ‹ знаниями ΠΎ ΠΆΠΈΠ·Π½Π΅Π½Π½Ρ‹Ρ… Ρ†ΠΈΠΊΠ»Π°Ρ… React ΠΈ Ρ…ΡƒΠΊΠ°Ρ…, ‍вы Π³ΠΎΡ‚ΠΎΠ²Ρ‹ Π²Π·ΡΡ‚ΡŒΡΡ Π·Π° Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ своих ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ², Π²Π΄ΠΎΡ…Π½ΡƒΠ² Π² Π½ΠΈΡ… ΠΆΠΈΠ·Π½ΡŒβ€ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ соврСмСнных ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΎΠ² β€ŒΠΈ Ρ‚Π΅Ρ…Π½ΠΈΠΊ.

НС ΠΎΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°ΠΉΡ‚Π΅ΡΡŒ Π½Π° достигнутом, ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°ΠΉΡ‚Π΅ ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ ΡΠΊΡΠΏΠ΅Ρ€ΠΈΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ. React постоянно развиваСтся, ΠΈ вмСстС с⁣ Π½ΠΈΠΌ растут возмоТности для ​разработчиков. β€ΠŸΡƒΡΡ‚ΡŒ вашС ΠΏΡ€ΠΈΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π² ΠΌΠΈΡ€Π΅β€Œ Ρ„Ρ€ΠΎΠ½Ρ‚Π΅Π½Π΄-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠ²Π»Π΅ΠΊΠ°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ ΠΈ ΠΏΠ»ΠΎΠ΄ΠΎΡ‚Π²ΠΎΡ€Π½Ρ‹ΠΌ. Π£Π΄Π°Ρ‡ΠΈ Π² ΠΊΠΎΠ΄ΠΈΠ½Π³Π΅!