Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ render Π² react

Π Π΅Π½Π΄Π΅Ρ€ΠΈΠ½Π³ элСмСнтов

Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Ρ‹ β€” ΠΌΠ΅Π»ΡŒΡ‡Π°ΠΉΡˆΠΈΠ΅ ΠΊΠΈΡ€ΠΏΠΈΡ‡ΠΈΠΊΠΈ React-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ.

Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ описываСт Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ Π½Π° экранС:

Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ DOM-элСмСнтов, элСмСнты React β€” это простыС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, Π½Π΅ ΠΎΡ‚Π½ΠΈΠΌΠ°ΡŽΡ‰ΠΈΠ΅ ΠΌΠ½ΠΎΠ³ΠΎ рСсурсов. React DOM обновляСт DOM, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ соотвСтствовал ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½Ρ‹ΠΌ React-элСмСнтам.

Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΏΡƒΡ‚Π°Ρ‚ΡŒ с Π±ΠΎΠ»Π΅Π΅ извСстной ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠ΅ΠΉ Β«ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ²Β». Π‘ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌΠΈ ΠΌΡ‹ ознакомимся Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ Π³Π»Π°Π²Π΅. Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Ρ‹ β€” это Ρ‚ΠΎ, Β«ΠΈΠ· Ρ‡Π΅Π³ΠΎ сдСланы» ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹, ΠΈ ΠΌΡ‹ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅ΠΌ Π²Π°ΠΌ Π΄ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ эту Π³Π»Π°Π²Ρƒ, ΠΏΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ Π΄Π²ΠΈΠ³Π°Ρ‚ΡŒΡΡ дальшС.

Π Π΅Π½Π΄Π΅Ρ€ΠΈΠ½Π³ элСмСнта Π² DOM

Допустим, Π² вашСм HTML-Ρ„Π°ΠΉΠ»Π΅ Π΅ΡΡ‚ΡŒ

ΠœΡ‹ Π½Π°Π·ΠΎΠ²Ρ‘ΠΌ Π΅Π³ΠΎ Β«ΠΊΠΎΡ€Π½Π΅Π²Ρ‹ΠΌΒ» ΡƒΠ·Π»ΠΎΠΌ DOM, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ React DOM Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ Π΅Π³ΠΎ содСрТимым.

ΠžΠ±Ρ‹Ρ‡Π½ΠΎ Π² прилоТСниях, написанных ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Π½Π° React, Π΅ΡΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠΉ элСмСнт. ΠŸΡ€ΠΈ встраивании React Π² ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΡ‚ΡŒ Π²ΠΎ ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ нСзависимых ΠΊΠΎΡ€Π½Π΅Π²Ρ‹Ρ… элСмСнтов, Π²ΠΎ сколько посчитаСтС Π½ΡƒΠΆΠ½Ρ‹ΠΌ.

Для Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΠ½Π³Π° React-элСмСнта Π² ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠΉ ΡƒΠ·Π΅Π» DOM Π²Ρ‹Π·ΠΎΠ²ΠΈΡ‚Π΅ ReactDOM.render() с React-элСмСнтом ΠΈ ΠΊΠΎΡ€Π½Π΅Π²Ρ‹ΠΌ DOM-ΡƒΠ·Π»ΠΎΠΌ Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ²:

На страницС Π±ΡƒΠ΄Π΅Ρ‚ написано Β«Hello, worldΒ».

ОбновлСниС элСмСнтов Π½Π° страницС

Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Ρ‹ React ΠΈΠΌΠΌΡƒΡ‚Π°Π±Π΅Π»ΡŒΠ½Ρ‹. ПослС создания элСмСнта нСльзя ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π΅Π³ΠΎ ΠΏΠΎΡ‚ΠΎΠΌΠΊΠΎΠ² ΠΈΠ»ΠΈ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹. Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ ΠΏΠΎΡ…ΠΎΠΆ Π½Π° ΠΊΠ°Π΄Ρ€ Π² Ρ„ΠΈΠ»ΡŒΠΌΠ΅: ΠΎΠ½ ΠΎΡ‚Ρ€Π°ΠΆΠ°Π΅Ρ‚ состояниС интСрфСйса Π² ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ.

Рассмотрим ΠΏΡ€ΠΈΠΌΠ΅Ρ€ с часами:

На ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ React-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ ReactDOM.render() Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·. Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅ Π²Ρ‹ ΡƒΠ·Π½Π°Π΅Ρ‚Π΅, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡ‚ΡŒ интСрфСйс ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° с состояниСм.

ΠœΡ‹ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅ΠΌ Π½Π΅ ΠΏΡ€ΠΎΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ Π³Π»Π°Π²Ρ‹, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ каТдая ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ Π³Π»Π°Π²Π° опираСтся Π½Π° знания ΠΈΠ· ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ.

React обновляСт Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ

React DOM сравниваСт элСмСнт ΠΈ Π΅Π³ΠΎ Π΄ΠΎΡ‡Π΅Ρ€Π½Π΅Π΅ Π΄Π΅Ρ€Π΅Π²ΠΎ с ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ вСрсиСй ΠΈ вносит Π² DOM Ρ‚ΠΎΠ»ΡŒΠΊΠΎ минимально Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ измСнСния.

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ Π² этом Π½Π° послСднСм ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ инструмСнтов Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅:

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ render Π² react. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ render Π² react. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ render Π² react. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ render Π² react. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ render Π² react

НСсмотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ создаём элСмСнт, ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰ΠΈΠΉ всё UI-Π΄Π΅Ρ€Π΅Π²ΠΎ, ΠΊΠ°ΠΆΠ΄ΡƒΡŽ сСкунду React DOM измСняСт Ρ‚ΠΎΠ»ΡŒΠΊΠΎ тСкстовый ΡƒΠ·Π΅Π», содСрТимоС ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ измСнилось.

ΠŸΡ€ΠΎΡ‰Π΅ ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ, ΠΊΠ°ΠΊ интСрфСйс выглядит Π² ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚, Ρ‡Π΅ΠΌ ΠΊΠ°ΠΊ ΠΎΠ½ измСняСтся с Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. По Π½Π°ΡˆΠ΅ΠΌΡƒ ΠΎΠΏΡ‹Ρ‚Ρƒ, Ρ‚Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ позволяСт ΠΈΠ·Π±Π°Π²ΠΈΡ‚ΡŒΡΡ ΠΎΡ‚ Ρ†Π΅Π»ΠΎΠ³ΠΎ класса ошибок.

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

ΠžΡ‚Ρ€ΠΈΡΠΎΠ²ΠΊΠ° элСмСнтов

Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Ρ‹ β€” это самыС малСнькиС ΡΡ‚Ρ€ΠΎΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Π±Π»ΠΎΠΊΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ React.

Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ описываСт, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ Π½Π° экранС:

Unlike browser DOM elements, React elements are plain objects, and are cheap to create. React DOM takes care of updating the DOM to match the React elements.

Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ DOM-элСмСнтов Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π°, элСмСнты React β€” ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, Π»Ρ‘Π³ΠΊΠΈΠ΅ для создания. React DOM Π±Π΅Ρ€Ρ‘Ρ‚ Π·Π°Π±ΠΎΡ‚Ρƒ ΠΏΠΎ обновлСнию DOM Π½Π° сСбя для соотвСтствия элСмСнтам React.

ΠœΠΎΠΆΠ΅Ρ‚ ΡΠ±ΠΈΡ‚ΡŒ с Ρ‚ΠΎΠ»ΠΊΡƒ элСмСнты с Π±ΠΎΠ»Π΅Π΅ ΡˆΠΈΡ€ΠΎΠΊΠΎ извСстной ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠ΅ΠΉ Β«ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ²Β». ΠœΡ‹ прСдставим ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅ (/docs/components-and-props.html). Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Ρ‹ β€” это Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΈΠ· Ρ‡Π΅Π³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ «сдСланы», ΠΈ ΠΌΡ‹ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅ΠΌ Π²Π°ΠΌ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ этот Ρ€Π°Π·Π΄Π΅Π», ΠΏΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΈΠ΄Ρ‚ΠΈ Π²ΠΏΠ΅Ρ€Ρ‘Π΄.

ΠžΡ‚Ρ€ΠΈΡΠΎΠ²ΠΊΠ° элСмСнта Π² DOM

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π² вашСм Ρ„Π°ΠΉΠ»Π΅ HTML Π΅ΡΡ‚ΡŒ

ΠœΡ‹ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌ это Β«ΠΊΠΎΡ€Π½Π΅Π²Ρ‹ΠΌΒ» ΡƒΠ·Π»ΠΎΠΌ DOM, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ всё Π²Π½ΡƒΡ‚Ρ€ΠΈ Π½Π΅Π³ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒΡΡ DOM React.

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

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ элСмСнт React Π² ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠΌ ΡƒΠ·Π»Π΅ DOM, ΠΏΠ΅Ρ€Π΅Π΄Π°ΠΉΡ‚Π΅ Π΅Π³ΠΎ Π² ReactDOM.render() :

На страницС отобразится Β«ΠŸΡ€ΠΈΠ²Π΅Ρ‚, ΠΌΠΈΡ€Β».

ОбновлСниС отрисованного элСмСнта

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

Рассмотрим этот ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ‚ΠΈΠΊΠ°ΡŽΡ‰ΠΈΡ… часов:

ΠœΡ‹ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅ΠΌ Π²Π°ΠΌ Π½Π΅ ΠΏΡ€ΠΎΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ эти Ρ‚Π΅ΠΌΡ‹, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ ΠΎΠΏΠΈΡ€Π°ΡŽΡ‚ΡΡ Π΄Ρ€ΡƒΠ³ Π½Π° Π΄Ρ€ΡƒΠ³Π°.

React обновляСт Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ

DOM React сравниваСт элСмСнт ΠΈ Π΅Π³ΠΎ Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠ΅ элСмСнты с ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΌΠΈ ΠΈ примСняСт Ρ‚ΠΎΠ»ΡŒΠΊΠΎ обновлСния DOM, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ для прСобразования DOM Π² ΠΆΠ΅Π»Π°Π΅ΠΌΠΎΠ΅ состояниС.

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ Π² Ρ‚ΠΎΠΌ, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠ² послСдний ΠΏΡ€ΠΈΠΌΠ΅Ρ€ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ инструмСнтов Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π°:

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ render Π² react. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ render Π² react. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ render Π² react. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ render Π² react. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ render Π² react

НСсмотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ создаём элСмСнт, ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰ΠΈΠΉ всё Π΄Π΅Ρ€Π΅Π²ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ интСрфСйса Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Ρ‚ΠΈΠΊΠ΅, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ тСкстовый ΡƒΠ·Π΅Π», содСрТимоС ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ измСнилось, обновляСтся Π² DOM React.

По Π½Π°ΡˆΠ΅ΠΌΡƒ ΠΎΠΏΡ‹Ρ‚Ρƒ, Ρ€Π°Π·ΠΌΡ‹ΡˆΠ»Π΅Π½ΠΈΠ΅ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ интСрфСйс Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Π² любой Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚, Π° Π½Π΅ Ρ‚ΠΎ, ΠΊΠ°ΠΊ Π΅Π³ΠΎ ΠΌΠ΅Π½ΡΡ‚ΡŒ со Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ, устраняСт Ρ†Π΅Π»Ρ‹ΠΉ класс Π±Π°Π³ΠΎΠ².

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

Render Props

The term β€œrender prop” refers to a technique for sharing code between React components using a prop whose value is a function.

A component with a render prop takes a function that returns a React element and calls it instead of implementing its own render logic.

Libraries that use render props include React Router, Downshift and Formik.

In this document, we’ll discuss why render props are useful, and how to write your own.

Use Render Props for Cross-Cutting Concerns

Components are the primary unit of code reuse in React, but it’s not always obvious how to share the state or behavior that one component encapsulates to other components that need that same state.

For example, the following component tracks the mouse position in a web app:

As the cursor moves around the screen, the component displays its (x, y) coordinates in a

Now the question is: How can we reuse this behavior in another component? In other words, if another component needs to know about the cursor position, can we encapsulate that behavior so that we can easily share it with that component?

Since components are the basic unit of code reuse in React, let’s try refactoring the code a bit to use a component that encapsulates the behavior we need to reuse elsewhere.

Now the component encapsulates all behavior associated with listening for mousemove events and storing the (x, y) position of the cursor, but it’s not yet truly reusable.

For example, let’s say we have a component that renders the image of a cat chasing the mouse around the screen. We might use a prop to tell the component the coordinates of the mouse so it knows where to position the image on the screen.

As a first pass, you might try rendering the inside ’s render method, like this:

This approach will work for our specific use case, but we haven’t achieved the objective of truly encapsulating the behavior in a reusable way. Now, every time we want the mouse position for a different use case, we have to create a new component (i.e. essentially another ) that renders something specifically for that use case.

Here’s where the render prop comes in: Instead of hard-coding a inside a component, and effectively changing its rendered output, we can provide with a function prop that it uses to dynamically determine what to render–a render prop.

Now, instead of effectively cloning the component and hard-coding something else in its render method to solve for a specific use case, we provide a render prop that can use to dynamically determine what it renders.

More concretely, a render prop is a function prop that a component uses to know what to render.

This technique makes the behavior that we need to share extremely portable. To get that behavior, render a with a render prop that tells it what to render with the current (x, y) of the cursor.

One interesting thing to note about render props is that you can implement most higher-order components (HOC) using a regular component with a render prop. For example, if you would prefer to have a withMouse HOC instead of a component, you could easily create one using a regular with a render prop:

So using a render prop makes it possible to use either pattern.

Using Props Other Than render

It’s important to remember that just because the pattern is called β€œrender props” you don’t have to use a prop named render to use this pattern. In fact, any prop that is a function that a component uses to know what to render is technically a β€œrender prop”.

And remember, the children prop doesn’t actually need to be named in the list of β€œattributes” in your JSX element. Instead, you can put it directly inside the element!

You’ll see this technique used in the react-motion API.

Since this technique is a little unusual, you’ll probably want to explicitly state that children should be a function in your propTypes when designing an API like this.

Be careful when using Render Props with React.PureComponent

Using a render prop can negate the advantage that comes from using React.PureComponent if you create the function inside a render method. This is because the shallow prop comparison will always return false for new props, and each render in this case will generate a new value for the render prop.

In this example, each time renders, it generates a new function as the value of the prop, thus negating the effect of extending React.PureComponent in the first place!

To get around this problem, you can sometimes define the prop as an instance method, like so:

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

React.Component

Π­Ρ‚Π° страница содСрТит ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Ρ‹ΠΉ справочник API для опрСдСлСния классового ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° React. ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π·Π½Π°ΠΊΠΎΠΌΡ‹ с Ρ‚Π°ΠΊΠΈΠΌΠΈ концСпциями React, ΠΊΠ°ΠΊ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ ΠΈ пропсы, Π° Ρ‚Π°ΠΊΠΆΠ΅ состояниС ΠΈ ΠΆΠΈΠ·Π½Π΅Π½Π½Ρ‹ΠΉ Ρ†ΠΈΠΊΠ». ΠŸΡ€ΠΎΡ‡ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΏΡ€ΠΎ Π½ΠΈΡ…, Ссли Π²Ρ‹ этого Π½Π΅ сдСлали.

React позволяСт ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ ΠΊΠ°ΠΊ классы ΠΈΠ»ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π’ настоящСС врСмя классовыС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ ΠΈΠΌΠ΅ΡŽΡ‚ большС возмоТностСй. Они Ρ€Π°Π·ΠΎΠ±Ρ€Π°Π½Ρ‹ Π½Π° этой страницС. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ‚Π°ΠΊΠΎΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΡ‚Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΎΡ‚ React.Component :

ΠœΡ‹ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅ΠΌ Π½Π΅ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ собствСнныС классы Π±Π°Π·ΠΎΠ²Ρ‹Ρ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ². Π’ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°Ρ… React ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ΅ использованиС ΠΊΠΎΠ΄Π° ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ достигаСтся Π·Π° счёт ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ, Π° Π½Π΅ наслСдования.

React Π½Π΅ заставляСт вас ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ синтаксис классов ΠΈΠ· ES6. ВмСсто этого Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ create-react-class ΠΈΠ»ΠΈ Π΅Π³ΠΎ Π°Π½Π°Π»ΠΎΠ³ΠΈ. ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅ Ρ€Π°Π·Π΄Π΅Π» ИспользованиС React Π±Π΅Π· ES6, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ·Π½Π°Ρ‚ΡŒ большС.

Π–ΠΈΠ·Π½Π΅Π½Π½Ρ‹ΠΉ Ρ†ΠΈΠΊΠ» ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°

ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ ΠΈΠΌΠ΅Π΅Ρ‚ нСсколько Β«ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π°Β». ΠŸΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° позволяСт Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΊΠΎΠ΄ Π½Π° ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΌ этапС этого процСсса. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ эту Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΡƒ ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π° ΠΊΠ°ΠΊ ΡˆΠΏΠ°Ρ€Π³Π°Π»ΠΊΡƒ. Π”Π°Π»Π΅Π΅ Π½Π° страницС ΠΏΠΎΠ»ΡƒΠΆΠΈΡ€Π½Ρ‹ΠΌ ΡˆΡ€ΠΈΡ„Ρ‚ΠΎΠΌ Π²Ρ‹Π΄Π΅Π»Π΅Π½Ρ‹ самыС распространённыС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π°.

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

Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ устарСл. НС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π΅Π³ΠΎ Π² Π½ΠΎΠ²ΠΎΠΌ ΠΊΠΎΠ΄Π΅.

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

Π­Ρ‚ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ устарСли. НС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΈΡ… Π² Π½ΠΎΠ²ΠΎΠΌ ΠΊΠΎΠ΄Π΅.

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

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ, Ссли ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»Π° ошибка Π² процСссС Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΠ½Π³Π°, ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π° ΠΈΠ»ΠΈ конструкторС любого Π΄ΠΎΡ‡Π΅Ρ€Π½Π΅Π³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°.

Π’ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π΅ доступны ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ API:

РаспространённыС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π°

ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π² этом Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠΎΡ…Π²Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ Π·Π°Π΄Π°Ρ‡, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ Π²Ρ‹ ΡΡ‚ΠΎΠ»ΠΊΠ½Ρ‘Ρ‚Π΅ΡΡŒ ΠΏΡ€ΠΈ использовании React-ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ². Для Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ прСдставлСния Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ эту Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΡƒ ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π°.

render() β€” СдинствСнный ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π² классовом ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π΅.

ΠŸΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ ΠΎΠ½ провСряСт this.props ΠΈ this.state ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ²:

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

Π’Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ с Π±Ρ€Π°ΡƒΠ·Π΅Ρ€ΠΎΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π² componentDidMount() ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΌΠ΅Ρ‚ΠΎΠ΄Π°Ρ… ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π°. Чистый render() Π΄Π΅Π»Π°Π΅Ρ‚ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ понятным.

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ конструктор Π² React-ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π΅, Ссли Π²Ρ‹ Π½Π΅ опрСдСляСтС состояниС ΠΈΠ»ΠΈ Π½Π΅ привязываСтС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹.

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

НС ΠΊΠΎΠΏΠΈΡ€ΡƒΠΉΡ‚Π΅ пропсы Π² состояниС! Π­Ρ‚ΠΎ распространённая ошибка:

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

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

componentDidUpdate() вызываСтся сразу послС обновлСния. НС вызываСтся ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠΌ Ρ€Π΅Π½Π΄Π΅Ρ€Π΅.

ΠœΠ΅Ρ‚ΠΎΠ΄ позволяСт Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с DOM ΠΏΡ€ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°. Π’Π°ΠΊΠΆΠ΅ ΠΎΠ½ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для выполнСния Ρ‚Π°ΠΊΠΈΡ… сСтСвых запросов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ Π½Π° основании Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° сравнСния Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΡ… пропсов с ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΌΠΈ. Если пропсы Π½Π΅ измСнились, Π½ΠΎΠ²Ρ‹ΠΉ запрос ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈ Π½Π΅ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒΡΡ.

Π Π΅Π΄ΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π°

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

Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π½ΡƒΠΆΠ΅Π½ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ. Но Π½Π΅ ΠΎΠΏΠΈΡ€Π°ΠΉΡ‚Π΅ΡΡŒ Π½Π° Π΅Π³ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Β«ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΒ» Ρ€Π΅Π½Π΄Π΅Ρ€, это ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ Π±Π°Π³Π°ΠΌ. ВмСсто этого ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ PureComponent , ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт Π½Π΅ ΠΎΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ shouldComponentUpdate() Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ. PureComponent повСрхностно сравниваСт пропсы ΠΈ состояниС ΠΈ позволяСт Π½Π΅ ΠΏΡ€ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅.

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

ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠ΅ состояниС ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ слоТному ΠΊΠΎΠ΄Ρƒ ΠΈ Π΄Π΅Π»Π°Π΅Ρ‚ ваши ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ слоТными для понимания. Π£Π±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π·Π½Π°ΠΊΠΎΠΌΡ‹ с простыми Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π°ΠΌΠΈ:

Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ ΠΌΠ΅ΠΆΠ΄Ρƒ getDerivedStateFromProps() ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ класса, ΠΈΠ·Π²Π»Π΅ΠΊΠΈΡ‚Π΅ чистыС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ пропсов ΠΈ состояния ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° ΠΈ помСститС ΠΈΡ… Π²Π½Π΅ опрСдСлСния класса.

Π­Ρ‚ΠΎ примСняСтся Ρ€Π΅Π΄ΠΊΠΎ, Π½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ Π² Ρ‚Π°ΠΊΠΈΡ… интСрфСйсах, ΠΊΠ°ΠΊ Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠ° сообщСний Π² Ρ‡Π°Ρ‚Π°Ρ…, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… позиция ΠΏΡ€ΠΎΠΊΡ€ΡƒΡ‚ΠΊΠΈ обрабатываСтся особым ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ.

Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ снимка (ΠΈΠ»ΠΈ null ) Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π΅Π½ΠΎ.

Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ… Π²Ρ‹ΡˆΠ΅ Π²Π°ΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ свойства scrollHeight Π² getSnapshotBeforeUpdate ΠΈΠ·-Π·Π° Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠ³ΡƒΡ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Ρ‚ΡŒ Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ этапами ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π° Β«Ρ€Π΅Π½Π΄Π΅Ρ€Β» (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, render ) ΠΈ «фиксированиС» (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, getSnapshotBeforeUpdate ΠΈ componentDidUpdate ).

ΠŸΡ€Π΅Π΄ΠΎΡ…Ρ€Π°Π½ΠΈΡ‚Π΅Π»ΠΈ β€” это React-ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ JavaScript-ошибки Π² любом мСстС ΠΈΡ… Π΄ΠΎΡ‡Π΅Ρ€Π½Π΅Π³ΠΎ Π΄Π΅Ρ€Π΅Π²Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ². Π—Π°Ρ‚Π΅ΠΌ Π»ΠΎΠ³ΠΈΡ€ΡƒΡŽΡ‚ эти ошибки ΠΈ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°ΡŽΡ‚ запасной интСрфСйс вмСсто Β«ΠΏΠΎΠ»ΠΎΠΌΠ°Π½Π½ΠΎΠ³ΠΎΒ» Π΄Π΅Ρ€Π΅Π²Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ². ΠŸΡ€Π΅Π΄ΠΎΡ…Ρ€Π°Π½ΠΈΡ‚Π΅Π»ΠΈ ΠΎΡ‚Π»Π°Π²Π»ΠΈΠ²Π°ΡŽΡ‚ ошибки ΠΏΡ€ΠΈ Ρ€Π΅Π½Π΄Π΅Ρ€Π΅, Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π°Ρ… ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π° ΠΈ Π² конструкторах всСго Π΄Π΅Ρ€Π΅Π²Π° ΠΏΠΎΠ΄ Π½ΠΈΠΌΠΈ.

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΏΡ€Π΅Π΄ΠΎΡ…Ρ€Π°Π½ΠΈΡ‚Π΅Π»ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½Ρ‹Ρ… ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ, Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΈΡ… для управлСния ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ исполнСния Π² вашСм ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ.

ΠŸΡ€Π΅Π΄ΠΎΡ…Ρ€Π°Π½ΠΈΡ‚Π΅Π»ΠΈ ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ ошибки Π² ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°Ρ… Π½ΠΈΠΆΠ΅ ΠΏΠΎ Π΄Π΅Ρ€Π΅Π²Ρƒ. ΠŸΡ€Π΅Π΄ΠΎΡ…Ρ€Π°Π½ΠΈΡ‚Π΅Π»ΠΈ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠΉΠΌΠ°Ρ‚ΡŒ ΠΎΡˆΠΈΠ±ΠΊΡƒ Π²Π½ΡƒΡ‚Ρ€ΠΈ сСбя.

Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π° вызываСтся послС возникновСния ошибки Ρƒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°-ΠΏΠΎΡ‚ΠΎΠΌΠΊΠ°. Он ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ Π² качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ для обновлСния состояния.

Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π° вызываСтся послС возникновСния ошибки Ρƒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°-ΠΏΠΎΡ‚ΠΎΠΌΠΊΠ°. Он ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ Π΄Π²Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°:

componentDidCatch() вызываСтся Π²ΠΎ врСмя этапа «фиксации», поэтому здСсь ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ±ΠΎΡ‡Π½Ρ‹Π΅ эффСкты. ΠœΠ΅Ρ‚ΠΎΠ΄ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для логирования ошибок.

ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ошибок Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ componentDidCatch() отличаСтся ΠΌΠ΅ΠΆΠ΄Ρƒ React-сборками для ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ΅Π½Π° ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ.

Π£ΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π°

ΠŸΡ€ΠΈΠ²Π΅Π΄Ρ‘Π½Π½Ρ‹Π΅ Π½ΠΈΠΆΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π° устарСли. Π˜Ρ… Π½Π΅ рСкомСндуСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² Π½ΠΎΠ²ΠΎΠΌ ΠΊΠΎΠ΄Π΅, хотя ΠΎΠ½ΠΈ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°ΡŽΡ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠ·Π½Π°Ρ‚ΡŒ большС ΠΎ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π΅ с ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΡ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π° Π² Π±Π»ΠΎΠ³Π΅.

Π­Ρ‚ΠΎ СдинствСнный ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π°, Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ ΠΏΡ€ΠΈ сСрвСрном Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΠ½Π³Π΅.

ИспользованиС этого ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π° часто ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΠ»ΠΎ ΠΊ Π±Π°Π³Π°ΠΌ

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

UNSAFE_componentWillUpdate() вызываСтся нСпосрСдствСнно ΠΏΠ΅Ρ€Π΅Π΄ Ρ€Π΅Π½Π΄Π΅Ρ€ΠΎΠΌ ΠΏΡ€ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠΈ Π½ΠΎΠ²Ρ‹Ρ… пропсов ΠΈΠ»ΠΈ состояния. Π’ этом ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΡƒ ΠΏΠ΅Ρ€Π΅Π΄ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ΠΌ. Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π½Π΅ вызываСтся ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠΌ Ρ€Π΅Π½Π΄Π΅Ρ€Π΅.

Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π°, прСдставлСнных Π²Ρ‹ΡˆΠ΅ (React Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΈΡ… сам), ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Π½Π½Ρ‹Π΅ Π½ΠΈΠΆΠ΅, ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΈΠ· ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ².

setState() добавляСт Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ измСнСния Π² состоянии ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°. Π’Π°ΠΊΠΆΠ΅ ΠΎΠ½ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ React, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ ΠΈ Π΅Π³ΠΎ Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠ΅ элСмСнты Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΠΎΡ‚Ρ€Π΅Π½Π΄Π΅Ρ€Π΅Π½Ρ‹ с ΠΎΠ±Π½ΠΎΠ²Π»Ρ‘Π½Π½Ρ‹ΠΌ состояниСм. Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для обновлСния интСрфСйса Π² ΠΎΡ‚Π²Π΅Ρ‚ Π½Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ событий ΠΈ ΠΎΡ‚Π²Π΅Ρ‚Ρ‹ сСрвСра.

Π­Ρ‚Π° Ρ„ΠΎΡ€ΠΌΠ° записи setState() Ρ‚Π°ΠΊΠΆΠ΅ асинхронна, ΠΈ нСсколько Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π° ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½Π΅Π½Ρ‹ вмСстС. НапримСр, Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ количСство элСмСнтов нСсколько Ρ€Π°Π· Π² ΠΎΠ΄Π½ΠΎΠΌ Ρ†ΠΈΠΊΠ»Π΅. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ этого ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Ρ‚Π°ΠΊ:

ΠŸΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Π²Ρ‹Π·ΠΎΠ²Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ значСния ΠΈΠ· ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ Ρ†ΠΈΠΊΠ»Π°. Из-Π·Π° этого количСство увСличится Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·. Π’ случаС, Ссли ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ состояниС зависит ΠΎΡ‚ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ, ΠΌΡ‹ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΠΎΡ€ΠΌΡƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ обновлСния:

Для Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ смотритС:

Если props.color Π½Π΅ пСрСдаётся, ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ установится ‘синий’ :

Π‘Ρ‚Ρ€ΠΎΠΊΠ° displayName ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² сообщСниях для ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ Π²Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ Π΅Ρ‘ явно ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ имя Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠ»ΠΈ класса, ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°. Если Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π΅Π³ΠΎ явно, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, для ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ ΠΈΠ»ΠΈ создания ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° Π²Ρ‹ΡΡˆΠ΅Π³ΠΎ порядка, посмотритС Ρ€Π°Π·Π΄Π΅Π» ΠžΠ±Ρ‘Ρ€Ρ‚ΠΊΠ° ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅ΠΌΠΎΠ³ΠΎ ΠΈΠΌΠ΅Π½ΠΈ для простой ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ.

this.props содСрТит свойства, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±Ρ‹Π»ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ Ρ‚Π΅ΠΌ, ΠΊΡ‚ΠΎ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ этот ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚. ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΎΠ± этом ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ·Π½Π°Ρ‚ΡŒ Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ ΠΈ пропсы

БостояниС содСрТит Π΄Π°Π½Π½Ρ‹Π΅, спСцифичныС для этого ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°. Они ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒΡΡ со Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ. БостояниС опрСдСляСтся ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ ΠΈ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ простым ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ JavaScript.

Π’Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ Π²ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ Π² состояниС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Ссли ΠΎΠ½ΠΎ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для Ρ€Π΅Π½Π΄Π΅Ρ€Π° ΠΈΠ»ΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠ° Π΄Π°Π½Π½Ρ‹Ρ… (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°). Π’Π°ΠΊΠΈΠ΅ значСния ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊ поля экзСмпляра ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°.

Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ БостояниС ΠΈ ΠΆΠΈΠ·Π½Π΅Π½Π½Ρ‹ΠΉ Ρ†ΠΈΠΊΠ».

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

Руководство ΠΏΠΎ Ρ€Π΅Π½Π΄Π΅Ρ€Π΅Π½Π³Ρƒ Π² React

Render Π½Π΅ пСрСрисовываСт DOM Π΄Π΅Ρ€Π΅Π²ΠΎ, Π΅Π³ΠΎ Π·Π°Π΄Π°Ρ‡Π° β€” Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ «Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ» Π΄Π΅Ρ€Π΅Π²Π°. Если ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠ΅ Π΄Π΅Ρ€Π΅Π²ΠΎ совпадаСт с ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΌ, Ρ‚ΠΎ обновлСния DOM Π½Π΅ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚.

ΠŸΡ€ΠΎΡ†Π΅ΡΡ обновлСния UI Π² React ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ состоит ΠΈΠ· Ρ‚Ρ€Π΅Ρ… Ρ„Π°Π·:

Render β€” Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ Π΄Π΅Ρ€Π΅Π²Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² Π½Π° основании ΠΈΡ… свойств (props) ΠΈ состояния (state)

Reconciliation β€” сравнСниС ΠΈ вычислСниС ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠΉ с ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΌ Π΄Π΅Ρ€Π΅Π²ΠΎΠΌ

Commit β€” ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ DOM

ПослС ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½ΠΎΠ³ΠΎ Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΠ½Π³Π° ΠΈ отобраТСния прилоТСния Π² DOM Π΄Π΅Ρ€Π΅Π²Π΅, ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½Ρ‹ΠΉ Ρ€Π΅Π½Π΄Π΅Ρ€ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹Π·Π²Π°Π½ ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ΠΏΡ€ΠΈΡ‡ΠΈΠ½.

Для классовых ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ²:

Для Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ²:

Π Π΅Π½Π΄Π΅Ρ€ Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΡ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ²

По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, Ссли рСндСрится Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚, Ρ‚ΠΎ всС Π΅Π³ΠΎ Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΠ΅Ρ€Π΅Ρ€Π΅Π½Π΄Π΅Ρ€Π΅Π½Ρ‹, Π΄Π°ΠΆΠ΅ Ссли ΠΈΡ… props Π½Π΅ измСнились.

Π Π΅Π½Π΄Π΅Ρ€ «Π΄Π΅ΡˆΠ΅Π²Π°Ρ» опСрация, ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ΠΌ DOM Π΄Π΅Ρ€Π΅Π²Π°. Если, выполняя Ρ€Π΅Π½Π΄Π΅Ρ€, React ΡƒΠ²ΠΈΠ΄ΠΈΡ‚, Ρ‡Ρ‚ΠΎ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Ρ€Π΅Π½Π΄Π΅Ρ€Π° совпадаСт с ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΌ, Ρ‚ΠΎ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ DOM Π½Π΅ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚ (Ρ„Π°Π·Π° commit Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠΏΡƒΡ‰Π΅Π½Π°). Но процСсс Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΠ½Π³Π° ΠΈ сравнСния (Ρ„Π°Π·Ρ‹ render ΠΈ reconciliation) Ρ‚ΠΎΠΆΠ΅ Π·Π°Π½ΠΈΠΌΠ°ΡŽΡ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ врСмя, ΠΈ Π² рядС случаСв ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΈΡ… для ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ.

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΠ½Π³Π° Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ Π΄Π΅Π»Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π±Π΅Π· нСобходимости.

Для прСдотвращСния лишнСго Ρ€Π΅Π½Π΄Π΅Ρ€Π° ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Ρ‹:

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ React.memo() Π½Π° Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ каскадный Ρ€Π΅Π½Π΄Π΅Ρ€ всСх Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΡ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ².

ΠœΠ΅ΠΌΠΎΠΈΠ·Π°Ρ†ΠΈΡ Ρ‚ΠΎΠΆΠ΅ ΠΈΠΌΠ΅Π΅Ρ‚ свою Ρ†Π΅Π½Ρƒ ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ Π΅Π΅ слСдуСт ΠΏΡ€ΠΈ нСобходимости. По этой ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅, стандартно, React ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Π½Π΅ ΠΌΠ΅ΠΌΠΎΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹.

Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΡΡ€Π°Π²Π½ΠΈΠ²Π°ΡŽΡ‚ΡΡ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² props ΠΊΠ°ΠΊ ссылки, ΠΈ Ссли ссылка мСняСтся, Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚ Ρ€Π΅Π½Π΄Π΅Ρ€, Π΄Π°ΠΆΠ΅ Ссли Π½ΠΎΠ²Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ эквивалСнтСн ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌΡƒ:

, функция onClick Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒΡΡ Π·Π°Π½ΠΎΠ²ΠΎ. Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ это ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ, Π½ΡƒΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‚ ссылки Π½Π° Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ€Π΅Π½Π΄Π΅Ρ€Π°ΠΌΠΈ.

Данная ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒ касаСтся Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ², Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ экзСмпляр классового ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° ΠΈ ссылки Π½Π° Π΅Π³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ находятся Π² памяти ΠΈ Π½Π΅ ΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ.

Π˜Π·Π±Π΅Π³Π°ΠΉΡ‚Π΅ случайной ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΈΠ»ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ нСпосрСдствСнно Π² props, это являСтся распространСнной ошибкой:

Π§Ρ‚ΠΎΠ±Ρ‹ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π΅ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ссылки Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ€Π΅Π½Π΄Π΅Ρ€Π°ΠΌΠΈ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Ρ…ΡƒΠΊΠΈ:

Π₯ΡƒΠΊΠΈ useMemo() ΠΈ useCallback() ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‚ Π²Ρ‚ΠΎΡ€Ρ‹ΠΌ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ массив зависимостСй. ИзмСнСниС зависимостСй ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ пСрСрасчСту значСния, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ…ΡƒΠΊ.

НС ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅ Π·Π°ΠΌΠ΅Ρ€ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π² develop Ρ€Π΅ΠΆΠΈΠΌΠ΅, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² production сборкС.

ΠŸΠΎΠ»Π΅Π·Π½Ρ‹Π΅ ΡΡ‚Π°Ρ‚ΡŒΠΈ ΠΏΠΎ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ:

React’s Context API обСспСчиваСт ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Ρƒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π² Π΄Π΅Ρ€Π΅Π²ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ², Π±Π΅Π· ΠΈΡ… нСпосрСдствСнной ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π² props Π΄Π°Π½Π½Ρ‹Ρ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ².

Context Π½Π΅ являСтся стСйт-ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ΠΎΠΌ. Π’Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ сами ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ значСниями, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ Π² ΠšΠΎΠ½Ρ‚Π΅ΠΊΡΡ‚. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ это достигаСтся созданиСм ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° со стСйтом, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ устанавливаСт ΠΈΠ· Π½Π΅Π³ΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠšΠΎΠ½Ρ‚Π΅ΠΊΡΡ‚Π°.

Для Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² Ρ…ΡƒΠΊ:

Если Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠšΠΎΠ½Ρ‚Π΅ΠΊΡΡ‚ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΎ, Ρ‚ΠΎ всС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚, Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΠ΅Ρ€Π΅Ρ€Π΅Π½Π΄Π΅Ρ€Π΅Π½Ρ‹. НСт способа это ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ.

Если Π² ΠšΠΎΠ½Ρ‚Π΅ΠΊΡΡ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½ массив, ΠΈΠ»ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, Ρ‚ΠΎ ΠΏΡ€ΠΈ Π΅Π³ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ, Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΠ΅Ρ€Π΅Ρ€Π΅Π½Π΄Π΅Ρ€Π΅Π½ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠΉ Π΄Π°Π½Π½Ρ‹ΠΉ ΠšΠΎΠ½Ρ‚Π΅ΠΊΡΡ‚. Π”Π°ΠΆΠ΅ Ссли измСнилась Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Π°ΡΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ нСпосрСдствСнно этот ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚.

Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ρ€Π΅Π½Π΄Π΅Ρ€ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°, Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ€Π΅Π½Π΄Π΅Ρ€ всСх Π΅Π³ΠΎ Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΡ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ², ΠΏΠΎ этому:

ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ находится ΠΏΠΎΠ΄ Context Provider, ΠΏΠΎΡ‡Ρ‚ΠΈ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ React.memo.

Π”Π°Π»Π΅Π΅ рассмотрим сцСнарий обновлСния ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ², ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΡ… ΠΌΠ΅ΠΌΠΎΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΈ ΠšΠΎΠ½Ρ‚Π΅ΠΊΡΡ‚.

ΠšΠΎΠ½Ρ‚Π΅ΠΊΡΡ‚ ΠΈ мСмоизация

Если Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ setA(42) ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

React-Redux ΠΈ Context

Redux ΠΈ ΠšΠΎΠ½Ρ‚Π΅ΠΊΡΡ‚ β€” Ρ€Π°Π·Π½Ρ‹Π΅ инструмСнты ΠΈ Π΄Π΅Π»Π°ΡŽΡ‚ Ρ€Π°Π·Π½ΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ.

НСсмотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Redux ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠšΠΎΠ½Ρ‚Π΅ΠΊΡΡ‚, ΠΈΠΌΠ΅ΡŽΡ‚ΡΡ сущСствСнныС отличия. Redux ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ Π² ΠšΠΎΠ½Ρ‚Π΅ΠΊΡΡ‚ экзСмпляр Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π°, ссылка Π½Π° экзСмпляр всСгда Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π½Π°. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, React Π½Π΅ обновляСт ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ ΠΏΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π² Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ стандартным способом. Π›ΠΎΠ³ΠΈΠΊΠΎΠΉ обновлСния ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² занимаСтся нСпосрСдствСнно ΠΌΠΎΠ΄ΡƒΠ»ΡŒ, ΡΠ²ΡΠ·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ React ΠΈ Redux.

ΠšΠΎΠ½Ρ‚Π΅ΠΊΡΡ‚, ΠΏΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ значСния Π² ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€Π΅, Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ€Π΅Π½Π΄Π΅Ρ€ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°. Redux Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ€Π΅Π½Π΄Π΅Ρ€ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для Ρ‚Π΅Ρ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ нСпосрСдствСнно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π½Ρ‹Π΅ значСния. Но ΠΏΡ€ΠΈ использовании Redux, для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° запускаСтся сСлСктор ΠΈ ΡΡ€Π°Π²Π½ΠΈΠ²Π°ΡŽΡ‚ΡΡ значСния.

ΠžΠ±Ρ‹Ρ‡Π½ΠΎ рСализация Π² Redux (запуск сСлСкторов, сравнСниС старого ΠΈ Π½ΠΎΠ²ΠΎΠ³ΠΎ значСния, Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΠ½Π³ Ссли Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ измСнилось) Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ быстрСС, Ρ‡Π΅ΠΌ стандартная рСализация Π½Π° ΠšΠΎΠ½Ρ‚Π΅ΠΊΡΡ‚Π΅ (ΠΏΠΎΠ»Π½Ρ‹ΠΉ ΠΏΠ΅Ρ€Π΅Ρ€Π΅Π½Π΄Π΅Ρ€ Π΄Π΅Ρ€Π΅Π²Π°). Но ΠΏΡ€ΠΈ Π½Π°Π»ΠΈΡ‡ΠΈΠΈ слоТных вычислСний Π² сСлСкторах, ΠΈΠ»ΠΈ Ссли сСлСкторы случайно Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ Π½ΠΎΠ²ΡƒΡŽ ссылку, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Π° потСря ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ.

Connect ΠΈ useSelector

Бвойства, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ HOC’ΠΎΠΌ Π² ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚, Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΏΠΎ Ρ‚Π°ΠΊΠΎΠΌΡƒ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ:

Π₯ΡƒΠΊ useSelector() запускаСтся Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° ΠΈ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ возмоТности ΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Ρ€Π΅Π½Π΄Π΅Ρ€ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°, Ссли рСндСрится Π΅Π³ΠΎ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚.

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

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

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