Можно ли сравнить роль объектов в программировании с тем, как компоненты высокого порядка работают в React? - PullRequest
0 голосов
/ 10 ноября 2019

Я новичок в программировании, и после некоторого изучения JS я решил сделать React. Честно говоря, во время изучения ООП я не мог правильно понять концепцию объектов, поэтому решил продолжить свое обучение с надеждой, что позже я выясню эту концепцию. Позже я столкнулся с концепцией HOC в React, которая в основном помогает нам повторно использовать определенную логику в нашем приложении React, то есть, если у нас есть логика наведения, используемая в нескольких местах, это происходит, когда мы создаем HOC и повторно используем ее везде, где это наведениелогика используется. Мой единственный и главный вопрос: работают ли объекты в объектно-ориентированном программировании одинаково, то есть всякий раз, когда у нас есть определенная логика, используемая в нескольких местах, нам нужно создать объект, который затем используется повторно. Могу ли я считать, что объект в ООП похож на HOC в React?

1 Ответ

0 голосов
/ 10 ноября 2019

Объектно-ориентированное программирование основывается на наследовании как методе обмена кодом между объектами в иерархии родитель-потомок. Строгая древовидная природа иерархии родитель-потомок означает, что нередко можно столкнуться с «алмазной проблемой» .

enter image description here

В этом примере Scanner и Printer наследуются от PoweredDevice. Copier должен иметь общее поведение Scanner и Printer, но в большинстве языков объектно-ориентированного программирования вам не разрешено наследовать от двух родителей.

Другие языки и библиотеки предпочитают метод, называемый состав , как альтернатива наследования. React попадает в эту категорию. Вы можете определить столько вариантов многократного использования, сколько пожелаете, для компонентов более высокого порядка, а затем применить их все к компоненту.

function Copier() {
  return (
    // ...
  )
}

export default withScanner(withPrinter(App)))

Вы по-прежнему создаете иерархию, но динамически создаете их во время выполнения,Нет статического правила, которое говорит, что withPrinter должен быть потомком withPoweredDevice - в отличие от традиционного наследования, где вы должны определить иерархию, когда вы создаете класс (до компиляции).

Документы React даже предоставляютдокумент, который рассматривает "состав против наследования" , который является отличным местом для чтения, чтобы понять различия между двумя парадигмами.

В заключение:

  • И OOP, и HOC позволяют повторное использование кода
  • Класс OOP может расширяться только от одного родителя
  • Компоненты React могут быть обернуты любым количеством HOC
  • OOP позволяет повторное использование только вместестатические иерархии времени компиляции
  • HOCs позволяют повторно использовать динамические иерархии времени выполнения
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...