View in Telegram
πŸš€ Higher-Order Components (HOC) Π² React: ΠŸΠ°Ρ‚Ρ‚Π΅Ρ€Π½ для ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ³ΠΎ использования Π»ΠΎΠ³ΠΈΠΊΠΈ ΠŸΡ€ΠΈΠ²Π΅Ρ‚, Π΄Ρ€ΡƒΠ·ΡŒΡ! πŸ‘‹ БСгодня ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎ Higher-Order Components (HOC) β€” ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ· популярных ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½ΠΎΠ² Π² React, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π»ΠΎΠ³ΠΈΠΊΡƒ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌΠΈ. πŸ”Ή Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ HOC? HOC (ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Π²Ρ‹ΡΡˆΠ΅Π³ΠΎ порядка) β€” это функция, которая ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π½ΠΎΠ²Ρ‹ΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ с Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ. HOC β‰  ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚. Π­Ρ‚ΠΎ скорСС ΠΎΠ±Ρ‘Ρ€Ρ‚ΠΊΠ°, которая Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π» Π²Π°ΡˆΠΈΡ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ². Бинтаксис:
const withExtraProps = (WrappedComponent) => {
  return (props) => {
    // ДобавляСм Π½ΠΎΠ²Ρ‹Π΅ пропсы ΠΈΠ»ΠΈ Π»ΠΎΠ³ΠΈΠΊΡƒ
    const extraProps = { additional: 'value' };
    return <WrappedComponent {...props} {...extraProps} />;
  };
};
πŸ”Ή Когда ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ HOC? HOC примСняСтся, ΠΊΠΎΠ³Π΄Π° Π½ΡƒΠΆΠ½ΠΎ: 1. ΠŸΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ΅ использованиС Π»ΠΎΠ³ΠΈΠΊΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ нСсколькими ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌΠΈ. 2. ΠžΠ±ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Π² Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, авторизация, Π»ΠΎΠ³ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠ»ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π΄Π°Π½Π½Ρ‹Ρ…. 3. Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅ пропсы ΠΈΠ»ΠΈ состояния. ΠŸΡ€ΠΈΠΌΠ΅Ρ€: HOC для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ. πŸ”Ή ΠŸΡ€ΠΈΠΌΠ΅Ρ€ HOC Π—Π°Π΄Π°Ρ‡Π°: Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ HOC для отобраТСния содСрТимого Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹Ρ… ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ.
import React from 'react';

// HOC для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ
const withAuth = (WrappedComponent) => {
  return (props) => {
    const isAuthenticated = props.isAuthenticated; // ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ пропс

    if (!isAuthenticated) {
      return <div>Доступ Π·Π°ΠΏΡ€Π΅Ρ‰Ρ‘Π½. ΠŸΠΎΠΆΠ°Π»ΡƒΠΉΡΡ‚Π°, Π²ΠΎΠΉΠ΄ΠΈΡ‚Π΅ Π² систСму.</div>;
    }

    return <WrappedComponent {...props} />;
  };
};

// ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°
const UserProfile = (props) => {
  return <div>ΠŸΡ€ΠΈΠ²Π΅Ρ‚, {props.name}! Π­Ρ‚ΠΎ Ρ‚Π²ΠΎΠΉ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΡŒ.</div>;
};

// ΠžΠ±ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Π΅ΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚
const ProtectedUserProfile = withAuth(UserProfile);

// ИспользованиС
export default function App() {
  return (
    <div>
      <ProtectedUserProfile isAuthenticated={false} name="АлСксСй" />
    </div>
  );
}
Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚: Если ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π½Π΅ Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·ΠΎΠ²Π°Π½, вмСсто ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° UserProfile отобразится сообщСниС "Доступ Π·Π°ΠΏΡ€Π΅Ρ‰Ρ‘Π½". πŸ”Ή Π’Π°ΠΆΠ½Ρ‹Π΅ аспСкты ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с HOC 1. ΠŸΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° пропсов HOC Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ всС пропсы Π²Π½ΡƒΡ‚Ρ€ΡŒ ΠΎΠ±ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Π΅ΠΌΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ оставался Π³ΠΈΠ±ΠΊΠΈΠΌ:
<WrappedComponent {...props} />
2. Π”Π΅ΠΊΠ»Π°Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠ΅ имя ΠŸΡ€ΠΈΠ΄ΡƒΠΌΠ°ΠΉΡ‚Π΅ Ρ‡ΠΈΡ‚Π°Π΅ΠΌΠΎΠ΅ имя для вашСго HOC, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, withAuth, withLogger. 3. НС пСрСуслоТняйтС HOC ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ слоТнСС для понимания. Если Π»ΠΎΠ³ΠΈΠΊΡƒ ΠΌΠΎΠΆΠ½ΠΎ вынСсти Π² кастомныС Ρ…ΡƒΠΊΠΈ β€” Π²Ρ‹Π±ΠΈΡ€Π°ΠΉΡ‚Π΅ ΠΈΡ…. 4. НС ΠΌΡƒΡ‚ΠΈΡ€ΡƒΠΉΡ‚Π΅ ΠΎΠ±ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Π΅ΠΌΡ‹ΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ HOC Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚, Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ±ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ. πŸ”Ή Когда НЕ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ HOC БСгодня ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Π·Π°Π΄Π°Ρ‡ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π΅ΡˆΠ°Π»ΠΈΡΡŒ Ρ‡Π΅Ρ€Π΅Π· HOC, ΠΏΡ€ΠΎΡ‰Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ: - Custom Hooks для ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ³ΠΎ использования Π»ΠΎΠ³ΠΈΠΊΠΈ. - Context API для глобального состояния. HOC остаётся Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΌ, Π½ΠΎ Π΅Π³ΠΎ ΠΏΠΎΠΏΡƒΠ»ΡΡ€Π½ΠΎΡΡ‚ΡŒ сниТаСтся Π² ΠΏΠΎΠ»ΡŒΠ·Ρƒ Π±ΠΎΠ»Π΅Π΅ простых Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ. 🎯 Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Higher-Order Components β€” ΠΌΠΎΡ‰Π½Ρ‹ΠΉ инструмСнт, Ссли Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π» ΠΊ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌ, сохраняя ΠΈΡ… чистоту ΠΈ ΠΏΠ΅Ρ€Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΡΡ‚ΡŒ. Но ΠΏΠΎΠΌΠ½ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ HOC β€” Π½Π΅ СдинствСнный способ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ³ΠΎ использования Π»ΠΎΠ³ΠΈΠΊΠΈ, ΠΈ Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… случаях кастомныС Ρ…ΡƒΠΊΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π»ΡƒΡ‡ΡˆΠΈΠΌ Π²Ρ‹Π±ΠΎΡ€ΠΎΠΌ 😊 ReactJs Daily | #begginers
Love Center - Dating, Friends & Matches, NY, LA, Dubai, Global
Love Center - Dating, Friends & Matches, NY, LA, Dubai, Global
Find friends or serious relationships easily