Π­Ρ‚ΠΎΡ‚ сайт большС Π½Π΅ обновляСтся.ΠŸΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ Π½Π° react.dev

Устройство ΠΊΠΎΠ΄ΠΎΠ²ΠΎΠΉ Π±Π°Π·Ρ‹

Π’ ΡΡ‚ΠΎΠΉ Π³Π»Π°Π²Π΅ Π²Ρ‹ ΡƒΠ·Π½Π°Π΅Ρ‚Π΅ ΠΎΠ± ΡƒΡΡ‚ройствС ΠΊΠΎΠ΄ΠΎΠ²ΠΎΠΉ Π±Π°Π·Ρ‹ React, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… ΡΠΎΠ³Π»Π°ΡˆΠ΅Π½ΠΈΡΡ… ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ.

Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ внСсти свой Π²ΠΊΠ»Π°Π΄ Π² React, Ρ‚ΠΎ ΠΌΡ‹ Π½Π°Π΄Π΅Π΅ΠΌΡΡ, Ρ‡Ρ‚ΠΎ эта Π³Π»Π°Π²Π° Π²Π°ΠΌ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚.

ΠœΡ‹ ΡΡ‡ΠΈΡ‚Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Π²Π°ΠΌ Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ этим соглашСниям Π² Π²Π°ΡˆΠΈΡ… React-прилоТСниях. МногиС ΠΈΠ· ΡΡ‚ΠΈΡ… соглашСний ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΏΠΎ ΠΈΡΡ‚оричСским ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°ΠΌ ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Ρ‹ со Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ.

Top-Level Folders

ПослС клонирования рСпозитория React Π²Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ ΠΏΠ°ΠΏΠΊΠΈ Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ уровня:

  • packages содСрТит ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Π΅ (Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ package.json) ΠΈ ΠΈΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ (ΠΏΠΎΠ΄ΠΏΠ°ΠΏΠΊΠ° src) для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΠ°ΠΊΠ΅Ρ‚Π° ΠΈΠ· Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ория React. Π‘ΠΎΠ»ΡŒΡˆΠ°Ρ Ρ‡Π°ΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΊΠΎΠ΄ΠΎΠΌ происходит Π² ΠΏΠΎΠ΄ΠΏΠ°ΠΏΠΊΠ°Ρ… src Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΠ°ΠΊΠ΅Ρ‚Π°.
  • fixtures содСрТит нСсколько Π½Π΅Π±ΠΎΠ»ΡŒΡˆΠΈΡ… React-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ для ΠΊΠΎΠ½Ρ‚Ρ€ΠΈΠ±ΡŒΡŽΡ‚Π΅Ρ€ΠΎΠ².
  • build содСрТит ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ React. Π­Ρ‚ΠΎΠ³ΠΎ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° Π½Π΅Ρ‚ Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ, Π½ΠΎ ΠΎΠ½ ΠΏΠΎΡΠ²ΠΈΡ‚ся послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π²Ρ‹ ΡΠΎΠ±Π΅Ρ€Ρ‘Ρ‚Π΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π² ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Ρ€Π°Π·.

ДокумСнтация располоТСна Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΌ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ.

Π‘ΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Π΅Ρ‰Ρ‘ нСсколько Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π²Π΅Ρ€Ρ…Π½Π΅ΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹Ρ… ΠΏΠ°ΠΏΠΎΠΊ. Но Π²Ρ‹, вСроятно, Π½Π΅ ΡΡ‚ΠΎΠ»ΠΊΠ½Ρ‘Ρ‚Π΅ΡΡŒ с Π½ΠΈΠΌΠΈ ΠΏΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ ΠΊΠΎΠ΄Π°.

ВСсты

Π£ Π½Π°Ρ Π½Π΅Ρ‚ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΉ Π²Π΅Ρ€Ρ…Π½Π΅ΡƒΡ€ΠΎΠ²Π½Π΅Π²ΠΎΠΉ ΠΏΠ°ΠΏΠΊΠΈ с ΡŽΠ½ΠΈΡ‚ тСстами. ВмСсто этого, ΠΌΡ‹ ΠΏΠΎΠΌΠ΅Ρ‰Π°Π΅ΠΌ ΠΈΡ… Π² ΠΏΠ°ΠΏΠΊΡƒ __tests__, Ρ€Π°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½Π½ΡƒΡŽ рядом с Ρ‚СстируСмыми Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ.

НапримСр, тСсты для setInnerHTML.js располоТСны Π² __tests__/setInnerHTML-test.js.

ΠŸΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΡ ΠΈ ΠΈΠ½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹

ΠŸΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΡ Π² React выводятся Ρ‡Π΅Ρ€Π΅Π· console.error.

if (__DEV__) {
  console.error('Π§Ρ‚ΠΎ-Ρ‚ΠΎ Π½Π΅ Ρ‚Π°ΠΊ.');
}

ΠŸΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΡ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Π²Ρ‹Ρ€Π΅Π·Π°Π½Ρ‹ ΠΈΠ· ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ΅Π½Π°. Если Π²Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π·Π°ΠΏΡ€Π΅Ρ‚ΠΈΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Π»ΠΈΠ±ΠΎ ΠΊΠΎΠ΄Π°, Ρ‚ΠΎΠ³Π΄Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ invariant:

var invariant = require('invariant');

invariant(
  2 + 2 === 4,
  'Π’Ρ‹ Π½Π΅ ΠΏΡ€ΠΎΠΉΠ΄Ρ‘ΡˆΡŒ!'
);

Если условиС Π²Π½ΡƒΡ‚Ρ€ΠΈ invariant Ρ€Π°Π²Π½ΠΎ false, Ρ‚ΠΎΠ³Π΄Π° выбрасываСтся ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅.

Β«Π˜Π½Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹Β» β€” это всСго лишь способ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ: «УсловиС всСгда истинно». Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄ΡƒΠΌΠ°Ρ‚ΡŒ ΠΎ Π½ΠΈΡ… ΠΊΠ°ΠΊ ΠΎΠ± ΡƒΡ‚вСрТдСниях (assertion).

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

Π Π΅ΠΆΠΈΠΌΡ‹ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈ ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ΅Π½Π°

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡΠ΅Π²Π΄ΠΎΠ³Π»ΠΎΠ±Π°Π»ΡŒΠ½ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ __DEV__, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π±Π»ΠΎΠΊ ΠΊΠΎΠ΄Π° присутствовал Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ.

На ΡΡ‚Π°ΠΏΠ΅ компиляции добавится ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° process.env.NODE_ENV !== 'production', ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰Π°Ρ, Π΄ΠΎΠ»ΠΆΠ΅Π½ Π»ΠΈ Π΄Π°Π½Π½Ρ‹ΠΉ Π±Π»ΠΎΠΊ ΠΊΠΎΠ΄Π° ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π² ΡΠ±ΠΎΡ€ΠΊΠ΅ CommonJS.

Π’Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π²Π½ΠΎ true Π² Π½Π΅ΠΌΠΈΠ½ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ сборкС, Π° Π² ΠΌΠΈΠ½ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Ρ€Π΅Π·Π°Π½ вСсь Π±Π»ΠΎΠΊ вмСстС с if.

if (__DEV__) {
  // Π­Ρ‚ΠΎΡ‚ ΠΊΠΎΠ΄ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ.
}

Flow

НСдавно ΠΌΡ‹ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΠ»ΠΈ статичСский Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ Flow. Π€Π°ΠΉΠ»Ρ‹, ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Π½Ρ‹Π΅ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠ΅ΠΉ @flow Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ΅ послС Π»ΠΈΡ†Π΅Π½Π·ΠΈΠΈ, Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΠΎΠ΄Π²Π΅Ρ€Π³Π½ΡƒΡ‚Ρ‹ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ΅ Ρ‚ΠΈΠΏΠΎΠ².

ΠœΡ‹ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅ΠΌ ΠΏΡƒΠ»Π» рСквСсты Π½Π° Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΉ Flow Π² ΡƒΠΆΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄. Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠ΄Π°:

ReactRef.detachRefs = function(
  instance: ReactInstance,
  element: ReactElement | string | number | null | false,
): void {
  // ...
}

Новый ΠΊΠΎΠ΄, Ссли это Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Flow. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ yarn flow, Ρ‡Ρ‚ΠΎΠ±Ρ‹ произвСсти ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ Ρ‚ΠΈΠΏΠΎΠ².

ΠœΠ½ΠΎΠΆΠ΅ΡΡ‚Π²ΠΎ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ²

React являСтся ΠΌΠΎΠ½ΠΎΠ»ΠΈΡ‚Π½Ρ‹ΠΌ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠ΅ΠΌ. Он ΡΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚ мноТСство ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ², Ρ‡Ρ‚ΠΎΠ±Ρ‹ измСнСния Π±Ρ‹Π»ΠΈ согласованными, Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Ρ€Π΅ΡˆΠ°Π»ΠΈΡΡŒ Π² ΠΎΠ΄Π½ΠΎΠΌ мСстС.

Π―Π΄Ρ€ΠΎ React

Π―Π΄Ρ€ΠΎ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² ΡΠ΅Π±Ρ вСсь Π²Π΅Ρ€Ρ…Π½Π΅ΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹ΠΉ API React, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

  • React.createElement()
  • React.Component
  • React.Children

Π―Π΄Ρ€ΠΎ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² ΡΠ΅Π±Ρ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ API Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΉ для объявлСния ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ². Оно Π½Π΅ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ согласования ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠΎ-спСцифичСский ΠΊΠΎΠ΄. Π­Ρ‚ΠΎΡ‚ ΠΊΠΎΠ΄ находится Π² ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°Ρ… React DOM ΠΈ React Native.

Код ядра располоТСн Π² ΠΏΠ°ΠΏΠΊΠ΅ packages/react. Он Π΄ΠΎΡΡ‚ΡƒΠΏΠ΅Π½ Π² npm Π² Π²ΠΈΠ΄Π΅ ΠΏΠ°ΠΊΠ΅Ρ‚Π° react. Π‘ΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π°Ρ сборка для Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π° экспортируСт Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ React ΠΈ Π½Π°Π·Ρ‹Π²Π°Π΅Ρ‚ся react.js.

Π Π΅Π½Π΄Π΅Ρ€Π΅Ρ€Ρ‹

Π˜Π·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ React создавался для DOM, Π½ΠΎ ΠΏΠΎΠ·ΠΆΠ΅ Π±Ρ‹Π» Π°Π΄Π°ΠΏΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ ΠΊ Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°ΠΌ, Ρ‚Π°ΠΊΠΈΠΌ ΠΊΠ°ΠΊ React Native. Π’ ΡΡ‚ΠΎΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠΌΡ‹ Ρ€Π°ΡΡΠΊΠ°ΠΆΠ΅ΠΌ ΠΎΠ± ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… Ρ€Π΅Π½Π΄Π΅Ρ€Π΅Ρ€Π°Ρ….

Π Π΅Π½Π΄Π΅Ρ€Π΅Ρ€Ρ‹ ΠΏΡ€Π΅Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ React-Π΄Π΅Ρ€Π΅Π²ΠΎ Π² ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠΎ-спСцифичСский ΠΊΠΎΠ΄.

Они располоТСны Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ packages/:

  • React DOM Renderer Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΡ‚ React-ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Π² DOM. Он Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ ReactDOM API ΠΈ Π΄ΠΎΡΡ‚ΡƒΠΏΠ΅Π½ ΠΊΠ°ΠΊ ΠΏΠ°ΠΊΠ΅Ρ‚ react-dom ΠΈΠ· npm рСпозитория. МоТно ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π±Π°Π½Π΄Π» react-dom.js, ΡΠΊΡΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ ReactDOM.
  • React Native Renderer Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΡ‚ React-ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Π² Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹Π΅ прСдставлСния. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π²Π½ΡƒΡ‚Ρ€ΠΈ React Native.
  • React Test Renderer Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΡ‚ React-ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Π² JSON-Π΄Π΅Ρ€Π΅Π²ΠΎ. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΏΡ€ΠΈ тСстировании снимками Ρ‡Π΅Ρ€Π΅Π· Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ Jest ΠΈ Π΄ΠΎΡΡ‚ΡƒΠΏΠ΅Π½ ΠΊΠ°ΠΊ ΠΏΠ°ΠΊΠ΅Ρ‚ react-test-renderer Π² npm.

ΠœΡ‹ Π½Π°Ρ‡Π°Π»ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ СдинствСнный Π½Π΅ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π΅Π½Π΄Π΅Ρ€Π΅Ρ€ react-art, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ€Π°Π½ΡŒΡˆΠ΅ находился Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΌ GitHub-Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅:

ВСхничСски react-native-renderer β€” это ΠΎΡ‡Π΅Π½ΡŒ Ρ‚ΠΎΠ½ΠΊΠΈΠΉ слой, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡƒΡ‡ΠΈΡ‚ React Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ с React Native. ΠŸΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠΎ-спСцифичСский ΠΊΠΎΠ΄, ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΠΉ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΌΠΈ прСдставлСниями, располоТСн Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ React Native вмСстС с Π΅Π³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌΠΈ.

БогласоватСли

Π”Π°ΠΆΠ΅ ΠΎΡ‡Π΅Π½ΡŒ Π½Π΅ΠΏΠΎΡ…ΠΎΠΆΠΈΠΌ Ρ€Π΅Π½Π΄Π΅Ρ€Π΅Ρ€Π°ΠΌ, Ρ‚Π°ΠΊΠΈΠΌ ΠΊΠ°ΠΊ React DOM ΠΈ React Native, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Ρ€Π°Π·Π΄Π΅Π»ΡΡ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ Π»ΠΎΠ³ΠΈΠΊΠΈ. Π’ Ρ‡Π°ΡΡ‚ности, Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° согласования Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎΡ…ΠΎΠΆΠΈΠΌΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄Π΅ΠΊΠ»Π°Ρ€Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΠ½Π³, ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹, состояниС, ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π° ΠΈ Ρ€Π΅Ρ„Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΈ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎ ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°ΠΌΠΈ.

Π’ ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ, Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Ρ€Π΅Π½Π΄Π΅Ρ€Π΅Ρ€Ρ‹ ΠΈΠΌΠ΅ΡŽΡ‚ ΠΌΠ΅ΠΆΠ΄Ρƒ собой ΠΎΠ±Ρ‰ΠΈΠΉ ΠΊΠΎΠ΄. Π’ React ΠΌΡ‹ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌ эту Ρ‡Π°ΡΡ‚ΡŒ Β«ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΒ». Когда Π·Π°ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Π°Π½ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅, ΠΊΠ°ΠΊ setState(), ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ render() Π² Π΄Π΅Ρ€Π΅Π²Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² ΠΈ ΠΌΠΎΠ½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚, обновляСт Π»ΠΈΠ±ΠΎ Ρ€Π°Π·ΠΌΠΎΠ½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΈΡ….

БогласоватСли Π½Π΅ ΡΠ²Π»ΡΡŽΡ‚ся ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΌΡ‹ ΠΏΠ°ΠΊΠ΅Ρ‚Π°ΠΌΠΈ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΠ³ΠΎ API. ВмСсто этого ΠΎΠ½ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ‚Π°ΠΊΠΈΠΌΠΈ Ρ€Π΅Π½Π΄Π΅Ρ€Π΅Ρ€Π°ΠΌΠΈ ΠΊΠ°ΠΊ React DOM ΠΈ React Native.

Π‘ΠΎΠ³Π»Π°ΡΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Stack

Π‘ΠΎΠ³Π»Π°ΡΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Β«StackΒ» β€” это рСализация, которая использовалась Π² React 15 ΠΈ Π±ΠΎΠ»Π΅Π΅ Ρ€Π°Π½Π½ΠΈΡ… вСрсиях. ΠœΡ‹ ΠΏΠ΅Ρ€Π΅ΡΡ‚Π°Π»ΠΈ Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ, Π½ΠΎ Π·Π°Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π»ΠΈ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ΠΉ Π³Π»Π°Π²Π΅.

Π‘ΠΎΠ³Π»Π°ΡΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Fiber

Π’ ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Ρ‚Π΅Π»Π΅ Β«FiberΒ» ΠΌΡ‹ ΠΏΡ‹Ρ‚аСмся ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ Π΄Π°Π²Π½ΠΎ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ошибки ΠΈ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, появившиСся Π² ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Ρ‚Π΅Π»Π΅ Stack.

Π•Π³ΠΎ основными цСлями ΡΠ²Π»ΡΡŽΡ‚ΡΡ:

  • Π Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π΅ΠΌΡ‹Ρ… Π·Π°Π΄Π°Ρ‡ Π½Π° ΠΏΠΎΠ΄Π·Π°Π΄Π°Ρ‡ΠΈ.
  • Π”Π°Ρ‚ΡŒ Π·Π°Π΄Π°Ρ‡Π°ΠΌ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚Ρ‹, ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ ΠΈΡ… ΠΈ ΠΏΠ΅Ρ€Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ.
  • Π˜ΠΌΠ΅Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒΡΡ Π²ΠΏΠ΅Ρ€Ρ‘Π΄ ΠΈ Π½Π°Π·Π°Π΄ ΠΌΠ΅ΠΆΠ΄Ρƒ родитСлями ΠΈ Π΄Π΅Ρ‚ΡŒΠΌΠΈ Π² Ρ€Π°Π·ΠΌΠ΅Ρ‚ΠΊΠ΅ React.
  • Π˜ΠΌΠ΅Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ мноТСство элСмСнтов ΠΈΠ· ΠΌΠ΅Ρ‚ΠΎΠ΄Π° render().
  • Π£Π»ΡƒΡ‡ΡˆΠ΅Π½Π½Π°Ρ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ошибок.

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠ·Π½Π°Ρ‚ΡŒ большС ΠΎΠ± Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π΅ React Fiber здСсь ΠΈ Π·Π΄Π΅ΡΡŒ. НСсмотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ Π²ΠΊΠ»ΡŽΡ‡Ρ‘Π½ Π² React 16, асинхронная Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π½Π΅ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π°.

Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ располоТСн Π² ΠΏΠ°ΠΏΠΊΠ΅ packages/react-reconciler.

БистСма событий

Для большСй кроссбраузСрной совмСстимости Π² React Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ слой, ΠΈΠ½ΠΊΠ°ΠΏΡΡƒΠ»ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ Ρ€Π°Π±ΠΎΡ‚Ρƒ с Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΌΠΈ событиями. Π•Π³ΠΎ исходный ΠΊΠΎΠ΄ располоТСн Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ packages/react-dom/src/events.

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

Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ Π³Π»Π°Π²Π΅ Π²Ρ‹ ΠΏΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚Π΅ΡΡŒ с Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ согласоватСля (вСрсий React 15 ΠΈ Ρ€Π°Π½Π΅Π΅) Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ. Для Π½ΠΎΠ²ΠΎΠ³ΠΎ согласоватСля ΠΌΡ‹ Π΅Ρ‰Ρ‘ Π½Π΅ ΠΏΠΈΡΠ°Π»ΠΈ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ.