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

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… Ρ…ΡƒΠΊΠΎΠ²

These docs are old and won’t be updated. Go to react.dev for the new React docs.

These new documentation pages teach modern React and include live examples:

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

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… Ρ…ΡƒΠΊΠΎΠ² позволяСт Π²Π°ΠΌ пСрСнСсти Π»ΠΎΠ³ΠΈΠΊΡƒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ.

Π’ Ρ€Π°Π·Π΄Π΅Π»Π΅ использованиС Ρ…ΡƒΠΊΠ° эффСкта ΠΌΡ‹ ΡƒΠ²ΠΈΠ΄Π΅Π»ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ ΠΈΠ· ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Ρ‡Π°Ρ‚Π°, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ отобраТаСтся сообщСниС ΠΎ Ρ‚ΠΎΠΌ, находится Π»ΠΈ наш Π΄Ρ€ΡƒΠ³ Π² ΡΠ΅Ρ‚ΠΈ:

import React, { useState, useEffect } from 'react';

function FriendStatus(props) {
  const [isOnline, setIsOnline] = useState(null);  useEffect(() => {    function handleStatusChange(status) {      setIsOnline(status.isOnline);    }    ChatAPI.subscribeToFriendStatus(props.friend.id, handleStatusChange);    return () => {      ChatAPI.unsubscribeFromFriendStatus(props.friend.id, handleStatusChange);    };  });
  if (isOnline === null) {
    return 'Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ°...';
  }
  return isOnline ? 'Π’ сСти' : 'НС Π² сСти';
}

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ Ρ‡Π°Ρ‚Π° Ρ‚Π°ΠΊΠΆΠ΅ Π΅ΡΡ‚ΡŒ список ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚ΠΎΠ², ΠΈ ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒ Π·Π΅Π»Ρ‘Π½Ρ‹ΠΌ Ρ†Π²Π΅Ρ‚ΠΎΠΌ ΠΈΠΌΠ΅Π½Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ сСйчас Π² ΡΠ΅Ρ‚ΠΈ. ΠœΡ‹ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ просто ΡΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ Π²ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Π½Π½ΡƒΡŽ Π²Ρ‹ΡˆΠ΅ Π»ΠΎΠ³ΠΈΠΊΡƒ Π² Π½Π°Ρˆ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ FriendListItem, Π½ΠΎ ΡΡ‚ΠΎ Π½Π΅ ΡΠ°ΠΌΡ‹ΠΉ Π»ΡƒΡ‡ΡˆΠΈΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚:

import React, { useState, useEffect } from 'react';

function FriendListItem(props) {
  const [isOnline, setIsOnline] = useState(null);  useEffect(() => {    function handleStatusChange(status) {      setIsOnline(status.isOnline);    }    ChatAPI.subscribeToFriendStatus(props.friend.id, handleStatusChange);    return () => {      ChatAPI.unsubscribeFromFriendStatus(props.friend.id, handleStatusChange);    };  });
  return (
    <li style={{ color: isOnline ? 'green' : 'black' }}>
      {props.friend.name}
    </li>
  );
}

ВмСсто этого, ΠΌΡ‹ Π±Ρ‹ Ρ…ΠΎΡ‚Π΅Π»ΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ FriendStatus ΠΈ FriendListItem раздСляли эту Π»ΠΎΠ³ΠΈΠΊΡƒ.

Когда ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡƒΡŽ Π»ΠΎΠ³ΠΈΠΊΡƒ состояния Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°Ρ…, Π² React Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΠ»ΠΈΡΡŒ Ρ€Π΅Π½Π΄Π΅Ρ€-пропсы ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Π²Ρ‹ΡΡˆΠ΅Π³ΠΎ порядка. Рассмотрим, ΠΊΠ°ΠΊ Ρ…ΡƒΠΊΠΈ Ρ€Π΅ΡˆΠ°ΡŽΡ‚ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΈΠ· Ρ‚Π΅Ρ… ΠΆΠ΅ Π·Π°Π΄Π°Ρ‡, Π½Π΅ Π΄ΠΎΠ±Π°Π²Π»ΡΡ Π»ΠΈΡˆΠ½ΠΈΡ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² Π² Π²Π°ΡˆΠ΅ Π΄Π΅Ρ€Π΅Π²ΠΎ.

Π˜Π·Π²Π»Π΅Ρ‡Π΅Π½ΠΈΠ΅ Π»ΠΎΠ³ΠΈΠΊΠΈ Π² ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ Ρ…ΡƒΠΊ

Когда ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄Π²Π΅ JavaScript-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ раздСляли ΠΊΠ°ΠΊΡƒΡŽ-Ρ‚ΠΎ Π»ΠΎΠ³ΠΈΠΊΡƒ, ΠΌΡ‹ ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅ΠΌ Π΅Ρ‘ Π² Ρ‚Ρ€Π΅Ρ‚ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ. И ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ ΠΈ Ρ…ΡƒΠΊΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ функциями, поэтому с Π½ΠΈΠΌΠΈ это Ρ‚ΠΎΠΆΠ΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚!

ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ Ρ…ΡƒΠΊ β€” это JavaScript-функция, имя ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ начинаСтся с Β«useΒ», ΠΈ ΠΊΠΎΡ‚орая ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ…ΡƒΠΊΠΈ. НапримСр, функция useFriendStatus Π½ΠΈΠΆΠ΅ β€” это наш ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ Ρ…ΡƒΠΊ:

import { useState, useEffect } from 'react';

function useFriendStatus(friendID) {  const [isOnline, setIsOnline] = useState(null);

  useEffect(() => {
    function handleStatusChange(status) {
      setIsOnline(status.isOnline);
    }

    ChatAPI.subscribeToFriendStatus(friendID, handleStatusChange);
    return () => {
      ChatAPI.unsubscribeFromFriendStatus(friendID, handleStatusChange);
    };
  });

  return isOnline;
}

Π—Π΄Π΅ΡΡŒ Π½Π΅Ρ‚ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½ΠΎΠ²ΠΎΠ³ΠΎ, Π»ΠΎΠ³ΠΈΠΊΠ° просто скопирована ΠΈΠ· ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² Π²Ρ‹ΡˆΠ΅. Π’Π°ΠΊ ΠΆΠ΅ ΠΊΠ°ΠΊ ΠΈ Π² ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°Ρ…, ΡƒΠ±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ…ΡƒΠΊΠΈ Π²Π½ΡƒΡ‚Ρ€ΠΈ условных ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² ΠΈ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚Π΅ ΠΈΡ… Π½Π° Π²Π΅Ρ€Ρ…Π½Π΅ΠΌ ΡƒΡ€ΠΎΠ²Π½Π΅ вашСго Ρ…ΡƒΠΊΠ°.

Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ React-ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°, ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ Ρ…ΡƒΠΊ Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΡƒΡŽ сигнатуру. ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π² ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ², ΠΈ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π»ΠΈ ΠΎΠ½ Ρ‡Ρ‚ΠΎ-Π»ΠΈΠ±ΠΎ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ. Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, всё ΠΊΠ°ΠΊ Π² ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ… функциях. Имя Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ-Ρ…ΡƒΠΊΠ° всСгда слСдуСт Π½Π°Ρ‡ΠΈΠ½Π°Ρ‚ΡŒ с use, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹ ΠΌΠΎΠ³Π»ΠΈ сразу ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΊ Π½Π΅ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ ΠΏΡ€Π°Π²ΠΈΠ»Π° Ρ…ΡƒΠΊΠΎΠ².

ЦСль нашСго Ρ…ΡƒΠΊΠ° useFriendStatus β€” ΠΏΠΎΠ΄ΠΏΠΈΡΠ°Ρ‚ΡŒ нас Π½Π° ΡΡ‚атус Π΄Ρ€ΡƒΠ³Π°. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΎΠ½ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π² ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° friendID ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ статус Π΄Ρ€ΡƒΠ³Π° Π² ΡΠ΅Ρ‚ΠΈ:

function useFriendStatus(friendID) {
  const [isOnline, setIsOnline] = useState(null);

  // ...

  return isOnline;
}

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π΄Π°Π²Π°ΠΉΡ‚Π΅ посмотрим, ΠΊΠ°ΠΊ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ наш ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ Ρ…ΡƒΠΊ.

ИспользованиС ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ Ρ…ΡƒΠΊΠ°

Π’Π½Π°Ρ‡Π°Π»Π΅ нашСй Ρ†Π΅Π»ΡŒΡŽ Π±Ρ‹Π»ΠΎ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ Π΄ΡƒΠ±Π»ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ Π»ΠΎΠ³ΠΈΠΊΡƒ ΠΈΠ· ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² FriendStatus ΠΈ FriendListItem. Они ΠΎΠ±Π° хотят Π·Π½Π°Ρ‚ΡŒ, Π΅ΡΡ‚ΡŒ Π»ΠΈ Π΄Ρ€ΡƒΠ³ Π² ΡΠ΅Ρ‚ΠΈ.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ ΠΈΠ·Π²Π»Π΅ΠΊΠ»ΠΈ эту Π»ΠΎΠ³ΠΈΠΊΡƒ Π² Ρ…ΡƒΠΊ useFriendStatus, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ:

function FriendStatus(props) {
  const isOnline = useFriendStatus(props.friend.id);
  if (isOnline === null) {
    return 'Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ°...';
  }
  return isOnline ? 'Π’ сСти' : 'НС Π² сСти';
}
function FriendListItem(props) {
  const isOnline = useFriendStatus(props.friend.id);
  return (
    <li style={{ color: isOnline ? 'green' : 'black' }}>
      {props.friend.name}
    </li>
  );
}

Код Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ Ρ€Π°Π½ΡŒΡˆΠ΅? Π”Π°, ΠΎΠ½ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅. Если Π²Ρ‹ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Π²Ρ‹ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π½Π΅ Π²Π½ΠΎΡΠΈΠ»ΠΈ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² Π»ΠΎΠ³ΠΈΠΊΡƒ. Всё, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΡΠ΄Π΅Π»Π°Π»ΠΈ, это ΠΈΠ·Π²Π»Π΅ΠΊΠ»ΠΈ ΠΎΠ±Ρ‰ΠΈΠΉ ΠΊΠΎΠ΄ Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ. ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ Ρ…ΡƒΠΊΠΈ β€” это скорСС соглашСниС, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ Π΄ΠΈΠ·Π°ΠΉΠ½Ρƒ Ρ…ΡƒΠΊΠΎΠ², Π½Π΅ΠΆΠ΅Π»ΠΈ Ρ‡Π΅ΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ самого React.

Π”ΠΎΠ»ΠΆΠ΅Π½ Π»ΠΈ я ΠΏΠΈΡΠ°Ρ‚ΡŒ Β«useΒ» Π² Π½Π°Ρ‡Π°Π»Π΅ названия Ρ…ΡƒΠΊΠ°? ΠžΡ‡Π΅Π½ΡŒ ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ. Π­Ρ‚ΠΎ Π²Π°ΠΆΠ½ΠΎΠ΅ условиС, Π±Π΅Π· ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΌΡ‹ Π½Π΅ ΡΠΌΠΎΠΆΠ΅ΠΌ автоматичСски ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΈΡ ΠΏΡ€Π°Π²ΠΈΠ» Ρ…ΡƒΠΊΠΎΠ², ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ, содСрТит Π»ΠΈ опрСдСлённая функция Π²Ρ‹Π·ΠΎΠ²Ρ‹ Ρ…ΡƒΠΊΠΎΠ² Π²Π½ΡƒΡ‚Ρ€ΠΈ.

Π£ Ρ…ΡƒΠΊΠ°, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ³ΠΎ Π² Π΄Π²ΡƒΡ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°Ρ…, ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠ΅ состояниС? НСт. ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ Ρ…ΡƒΠΊΠΈ β€” это ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ³ΠΎ использования Π»ΠΎΠ³ΠΈΠΊΠΈ с ΡΠΎΡΡ‚ояниСм (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, установка подписки ΠΈ ΡΠΎΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ значСния), Π½ΠΎ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ Ρ…ΡƒΠΊ, всё состояниС ΠΈ ΡΡ„Ρ„Π΅ΠΊΡ‚Ρ‹ Π²Π½ΡƒΡ‚Ρ€ΠΈ Π½Π΅Π³ΠΎ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΈΠ·ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹.

Как ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ Ρ…ΡƒΠΊ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ ΠΈΠ·ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ состояниС? ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Π²Ρ‹Π·ΠΎΠ² Ρ…ΡƒΠΊΠ° ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ ΠΈΠ·ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ состояниС. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΌΡ‹ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ useFriendStatus Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ, с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния React наш ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ просто Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ useState ΠΈ useEffect. И ΠΊΠ°ΠΊ ΠΌΡ‹ ΡƒΠ·Π½Π°Π»ΠΈ Ρ€Π°Π½Π΅Π΅, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ useState ΠΈ useEffect ΠΌΠ½ΠΎΠ³ΠΎ Ρ€Π°Π· Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π΅, ΠΈ ΠΎΠ½ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ нСзависимы.

Π‘ΠΎΠ²Π΅Ρ‚: ΠŸΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ…ΡƒΠΊΠ°ΠΌΠΈ

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Ρ…ΡƒΠΊΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ функциями, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΈΠΌΠΈ.

ΠŸΡ€ΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΡƒΠ΅ΠΌ это, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ ΠΈΠ· Π½Π°ΡˆΠ΅Π³ΠΎ гипотСтичСского ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° Ρ‡Π°Ρ‚Π°. Π­Ρ‚ΠΎ срСдство Π²Ρ‹Π±ΠΎΡ€Π° ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚Π΅Π»Π΅ΠΉ сообщСний Ρ‡Π°Ρ‚Π°, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, находится Π»ΠΈ Π²Ρ‹Π±Ρ€Π°Π½Π½Ρ‹ΠΉ Π² Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π΄Ρ€ΡƒΠ³ Π² ΡΠ΅Ρ‚ΠΈ:

const friendList = [
  { id: 1, name: 'Π’Π°Ρ‚ΡŒΡΠ½Π°' },
  { id: 2, name: 'Алла' },
  { id: 3, name: 'Лиля' },
];

function ChatRecipientPicker() {
  const [recipientID, setRecipientID] = useState(1);  const isRecipientOnline = useFriendStatus(recipientID);
  return (
    <>
      <Circle color={isRecipientOnline ? 'green' : 'red'} />      <select
        value={recipientID}
        onChange={e => setRecipientID(Number(e.target.value))}
      >
        {friendList.map(friend => (
          <option key={friend.id} value={friend.id}>
            {friend.name}
          </option>
        ))}
      </select>
    </>
  );
}

ΠœΡ‹ ΡΠΎΡ…раняСм Π²Ρ‹Π±Ρ€Π°Π½Π½Ρ‹ΠΉ Π² Π½Π°ΡΡ‚оящСС врСмя ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π΄Ρ€ΡƒΠ³Π° Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ состояния recipientID ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»ΡΠ΅ΠΌ Π΅Π³ΠΎ, Ссли ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π²Ρ‹Π±ΠΈΡ€Π°Π΅Ρ‚ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ Π΄Ρ€ΡƒΠ³Π° Π² <select>.

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π²Ρ‹Π·ΠΎΠ² Ρ…ΡƒΠΊΠ° useState Π΄Π°Ρ‘Ρ‚ Π½Π°ΠΌ послСднСС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ состояния recipientID, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π² Π½Π°Ρˆ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ Ρ…ΡƒΠΊ useFriendStatus Π² ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°:

  const [recipientID, setRecipientID] = useState(1);
  const isRecipientOnline = useFriendStatus(recipientID);

Π­Ρ‚ΠΎ позволяСт Π½Π°ΠΌ ΡƒΠ·Π½Π°Ρ‚ΡŒ, находится Π»ΠΈ Π²Ρ‹Π±Ρ€Π°Π½Π½Ρ‹ΠΉ Π΄Ρ€ΡƒΠ³ Π² ΡΠ΅Ρ‚ΠΈ. Если ΠΌΡ‹ Π²Ρ‹Π±Π΅Ρ€Π΅ΠΌ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ Π΄Ρ€ΡƒΠ³Π° ΠΈ ΠΎΠ±Π½ΠΎΠ²ΠΈΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ состояния recipientID, наш Ρ…ΡƒΠΊ useFriendStatus ΠΎΡ‚ΠΌΠ΅Π½ΠΈΡ‚ подписку Π½Π° Ρ€Π°Π½Π΅Π΅ Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠ³ΠΎ Π΄Ρ€ΡƒΠ³Π° ΠΈ ΠΏΠΎΠ΄ΠΏΠΈΡˆΠ΅Ρ‚ся Π½Π° ΡΡ‚атус вновь Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠ³ΠΎ.

ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅Π’ΠΎΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅()

ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ Ρ…ΡƒΠΊΠΈ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΡŽΡ‚ Π³ΠΈΠ±ΠΊΡƒΡŽ Π»ΠΎΠ³ΠΈΠΊΡƒ совмСстного использования, которая Ρ€Π°Π½ΡŒΡˆΠ΅ Π±Ρ‹Π»Π° Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Π° Π² React-ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°Ρ…. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ собствСнныС Ρ…ΡƒΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΡ…Π²Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ ΡˆΠΈΡ€ΠΎΠΊΠΈΠΉ спСктр Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² использования, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Ρ„ΠΎΡ€ΠΌ, анимация, Π΄Π΅ΠΊΠ»Π°Ρ€Π°Ρ‚ΠΈΠ²Π½Ρ‹Π΅ подписки, Ρ‚Π°ΠΉΠΌΠ΅Ρ€Ρ‹ ΠΈ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΌΠ½ΠΎΠ³ΠΈΡ… Π΄Ρ€ΡƒΠ³ΠΈΡ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ Π½Π΅ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Π»ΠΈ. Π‘ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ³ΠΎ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Ρ…ΡƒΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ‚Π°ΠΊΠΆΠ΅ просты Π² ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΠΈ, ΠΊΠ°ΠΊ ΠΈ Π²ΡΡ‚Ρ€ΠΎΠ΅Π½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ React.

ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ Π½Π΅ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ Π°Π±ΡΡ‚Ρ€Π°ΠΊΡ†ΠΈΡŽ слишком Ρ€Π°Π½ΠΎ. Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ ΠΎΠ±Π»Π°Π΄Π°ΡŽΡ‚ большими возмоТностями, Π²ΠΏΠΎΠ»Π½Π΅ вСроятно, срСдний Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ станСт Π΄Π»ΠΈΠ½Π½Π΅Π΅ Π² Π²Π°ΡˆΠ΅ΠΉ ΠΊΠΎΠ΄ΠΎΠ²ΠΎΠΉ Π±Π°Π·Π΅. Π­Ρ‚ΠΎ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ, Π½Π΅ Π΄ΡƒΠΌΠ°ΠΉΡ‚Π΅, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π½Π° Ρ…ΡƒΠΊΠΈ. Но ΠΌΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅ΠΌ Π²Π°ΠΌ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ ситуации, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ Ρ…ΡƒΠΊ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΊΡ€Ρ‹Ρ‚ΡŒ ΡΠ»ΠΎΠΆΠ½ΡƒΡŽ Π»ΠΎΠ³ΠΈΠΊΡƒ Π·Π° ΠΏΡ€ΠΎΡΡ‚Ρ‹ΠΌ интСрфСйсом ΠΈΠ»ΠΈ Ρ€Π°ΡΠΏΡƒΡ‚Π°Ρ‚ΡŒ большой ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚.

НапримСр, Ρƒ Π²Π°Ρ Π΅ΡΡ‚ΡŒ слоТный ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚, содСрТащий мноТСство Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΡ… состояний, ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… управляСтся особым ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ. useState Π½Π΅ ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ Π»ΠΎΠ³ΠΈΠΊΠΈ обновлСния, поэтому Π΅Ρ‘ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠ°ΠΊ Redux-Ρ€Π΅Π΄ΡŽΡΠ΅Ρ€:

function todosReducer(state, action) {
  switch (action.type) {
    case 'add':
      return [...state, {
        text: action.text,
        completed: false
      }];
    // ... Π΄Ρ€ΡƒΠ³ΠΈΠ΅ дСйствия ...
    default:
      return state;
  }
}

Π Π΅Π΄ΡŽΡΠ΅Ρ€Ρ‹ ΠΎΡ‡Π΅Π½ΡŒ ΡƒΠ΄ΠΎΠ±Π½ΠΎ Ρ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ·ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎ ΠΈ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ слоТной Π»ΠΎΠ³ΠΈΠΊΠΈ обновлСния. ΠŸΡ€ΠΈ нСобходимости Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Ρ€Π°Π·Π±ΠΈΡ‚ΡŒ ΠΈΡ… Π½Π° Π±ΠΎΠ»Π΅Π΅ ΠΌΠ΅Π»ΠΊΠΈΠ΅ Ρ€Π΅Π΄ΡŽΡΠ΅Ρ€Ρ‹. Однако Π²Π°ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Ρ€Π°Π²ΠΈΡ‚ΡŒΡΡ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ прСимущСствами Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π³ΠΎ состояния React, ΠΈΠ»ΠΈ Π²Ρ‹ Π½Π΅ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ Π΅Ρ‰Ρ‘ ΠΎΠ΄Π½Ρƒ ΡΡ‚ΠΎΡ€ΠΎΠ½Π½ΡŽΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ.

Π§Ρ‚ΠΎ Ссли ΠΌΡ‹ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ…ΡƒΠΊ useReducer, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт Π½Π°ΠΌ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΌ состояниСм нашСго ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ€Π΅Π΄ΡŽΡΠ΅Ρ€Π°? Упрощённая вСрсия ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Ρ‚Π°ΠΊ:

function useReducer(reducer, initialState) {
  const [state, setState] = useState(initialState);

  function dispatch(action) {
    const nextState = reducer(state, action);
    setState(nextState);
  }

  return [state, dispatch];
}

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π² Π½Π°ΡˆΠ΅ΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π΅ ΠΈ Ρ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ€Π΅Π΄ΡŽΡΠ΅Ρ€Π° ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ Π΅Π³ΠΎ состояниСм:

function Todos() {
  const [todos, dispatch] = useReducer(todosReducer, []);
  function handleAddClick(text) {
    dispatch({ type: 'add', text });
  }

  // ...
}

Π’Π°ΠΊ ΠΊΠ°ΠΊ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ управлСния Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΌ состояниСм с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ€Π΅Π΄ΡŽΡΠ΅Ρ€Π° Π² ΡΠ»ΠΎΠΆΠ½ΠΎΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π΅ достаточно распространСна, ΠΌΡ‹ Π²ΡΡ‚Ρ€ΠΎΠΈΠ»ΠΈ Ρ…ΡƒΠΊ useReducer прямо Π² React. Π’Ρ‹ Π½Π°ΠΉΠ΄Ρ‘Ρ‚Π΅ Π΅Π³ΠΎ вмСстС с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ встроСнными Ρ…ΡƒΠΊΠ°ΠΌΠΈ Π² API-справочникС Ρ…ΡƒΠΊΠΎΠ².