Что такое компонент высокого порядка?

Как вы должны знать, React.js полностью посвящен компонентам, и большая часть кода в типичном приложении React состоит из создания автономных компонентов, их передачи и так далее.

React.js следует принципу «не повторяй себя», который заключается в том, чтобы не писать один и тот же код дважды. Мы хотели бы структурировать все в компоненты — но, конечно, не таким образом, чтобы мы создавали отдельный компонент для каждого цвета текста, например, это было бы слишком много работы и слишком сложно поддерживать.

React.js следует принципу «не повторяй себя», который заключается в том, чтобы не писать один и тот же код дважды.
Мы хотели бы структурировать все в компоненты — но, конечно, не таким образом, чтобы мы создавали отдельный компонент. например, для каждого другого цвета текста это было бы слишком много работы и слишком сложно поддерживать.

Например, свойства помогают нам отображать наш текст в компоненте, а затем просто передавать цвет текста в качестве свойства компоненту по мере необходимости.

Компоненты высокого порядка идут в том же направлении, что и использование реквизитов, описанных выше, чтобы сделать наш код компактным.
HOC — это более радикальный способ передачи целых компонентов в качестве реквизитов компоненту-оболочке.

Наконец пример

Компонент высшего порядка – это функция, которая принимает компонент и возвращает новый компонент.

Также важно знать, что компоненты высокого порядка не являются отдельной функцией в React API, например, useState, useEffect или React.lazy, которые принадлежат API.

Компоненты высокого порядка — это скорее концепция, которая работает, потому что они являются логическим завершением архитектуры React.

Поскольку выражение с take и return звучит немного абстрактно, мы могли бы думать о HOC как о своего рода оболочке, и именно для этого мы создаем пример кода.

Давайте создадим HOC для предоставления цвета шрифта CSS компоненту, который был передан в HOC. Просто в качестве примера.
Мы делаем это, возвращая наш обернутый компонент и оборачивая его в div, для которого мы можем установить цвет в виде строки, используя встроенный стиль React.

«https://www.jaguar.gi/nfl/Jonny-Bills-v-Cardinals-cbn-00.html»
«https://www.jaguar.gi/nfl/Jonny-Bills-v- Cardinals-cbn-01.html»
«https://www.jaguar.gi/nfl/Jonny-Bills-v-Cardinals-cbn-02.html»
«https://www. jaguar.gi/nfl/Jonny-Bills-v-Cardinals-cbn-03.html»
«https://www.jaguar.gi/nfl/pori-moni-Dolphins-Chargers-cbn-00.html »
«https://www.jaguar.gi/nfl/pori-moni-Dolphins-Chargers-cbn-01.html»
«https://www.jaguar.gi/nfl/pori -moni-Dolphins-Chargers-cbn-02.html»
«https://www.jaguar.gi/nfl/pori-moni-Dolphins-Chargers-cbn-03.html»
«https ://www.jaguar.gi/nfl/pori-Raiders-Broncos-cbn-00.html»
«https://www.jaguar.gi/nfl/pori-Raiders-Broncos-cbn-01. html»
«https://www.jaguar.gi/nfl/pori-Raiders-Broncos-cbn-02.html»
«https://www.jaguar.gi/nfl/pori- Raiders-Broncos-cbn-03.html»
«https://ayf.com/ayf/1k/Jonny-Bills-v-Cardinals-cbn-00.html»
«https:// ayf.com/ayf/1k/Jonny-Bills-v-Cardinals-cbn-01.html»
«https://ayf.com/ayf/1 k/Jonny-Bills-v-Cardinals-cbn-02.html»
«https://ayf.com/ayf/1k/Jonny-Bills-v-Cardinals-cbn-03.html»
> «https://ayf.com/ayf/1k/pori-moni-Dolphins-Chargers-cbn-00.html»
«https://ayf.com/ayf/1k/pori-moni-Dolphins -Chargers-cbn-01.html»
«https://ayf.com/ayf/1k/pori-moni-Dolphins-Chargers-cbn-02.html»
«https://ayf .com/ayf/1k/pori-moni-Dolphins-Chargers-cbn-03.html»
«https://ayf.com/ayf/1k/pori-Raiders-Broncos-cbn-00.html»
«https://ayf.com/ayf/1k/pori-Raiders-Broncos-cbn-01.html»
«https://ayf.com/ayf/1k/pori-Raiders- Broncos-cbn-02.html»
«https://ayf.com/ayf/1k/pori-Raiders-Broncos-cbn-03.html»
«http://landrover.gi/ land/2k/Jonny-Bills-v-Cardinals-cbn-00.html»
«http://landrover.gi/land/2k/Jonny-Bills-v-Cardinals-cbn-01.html»< br /> «http://landrover.gi/land/2k/Jonny-Bills-v-Cardinals-cbn-02.html»
«http://landrover.gi/land/2k/Jonny-Bills -v-Cardinals-cbn-03.html»
«http://landrover.gi/land/2k/pori-moni-Dolphins-Chargers-cbn -00.html»
«http://landrover.gi/land/2k/pori-moni-Dolphins-Chargers-cbn-01.html»
«http://landrover.gi/land /2k/pori-moni-Dolphins-Chargers-cbn-02.html»
«http://landrover.gi/land/2k/pori-moni-Dolphins-Chargers-cbn-03.html»
«http://landrover.gi/land/2k/pori-Raiders-Broncos-cbn-00.html»
«http://landrover.gi/land/2k/pori-Raiders-Broncos- cbn-01.html»
«http://landrover.gi/land/2k/pori-Raiders-Broncos-cbn-02.html»
«http://landrover.gi/land/ 2k/pori-Raiders-Broncos-cbn-03.html»
«https://www.jaguar.gi/nfl/1Up-Bills-v-Cardinals-liv-xx00.html»
« https://www.jaguar.gi/nfl/1Up-Bills-v-Cardinals-liv-xx01.html»
«https://www.jaguar.gi/nfl/1Up-Bills-v-Cardinals -liv-xx02.html»
«https://www.jaguar.gi/nfl/1Up-Bills-v-Cardinals-liv-xx03.html»
«https://www.jaguar .gi/nfl/1Up-Bills-v-Cardinals-liv-xx04.html»
«https://www.jaguar.gi/nfl/1Up-Bills-v-Cardinals-liv-xx05.html»
«https://www.jaguar.gi/nfl/1Up-Bills-v-Cardinals-liv-xx06.ht мл»
«http://landrover.gi/land/2k/1Up-Bills-v-Cardinals-liv-xx00.html»
«http://landrover.gi/land/2k/ 1Up-Bills-v-Cardinals-liv-xx01.html»
«http://landrover.gi/land/2k/1Up-Bills-v-Cardinals-liv-xx02.html»
« http://landrover.gi/land/2k/1Up-Bills-v-Cardinals-liv-xx03.html»
«http://landrover.gi/land/2k/1Up-Bills-v-Cardinals -liv-xx04.html»
«http://landrover.gi/land/2k/1Up-Bills-v-Cardinals-liv-xx05.html»
«http://landrover.gi /land/2k/1Up-Bills-v-Cardinals-liv-xx06.html»
«https://ayf.com/ayf/1k/1Up-Bills-v-Cardinals-liv-xx00.html»
«https://ayf.com/ayf/1k/1Up-Bills-v-Cardinals-liv-xx01.html»
«https://ayf.com/ayf/1k/1Up- Bills-v-Cardinals-liv-xx02.html»
«https://ayf.com/ayf/1k/1Up-Bills-v-Cardinals-liv-xx03.html»
«https: //ayf.com/ayf/1k/1Up-Bills-v-Cardinals-liv-xx04.html»
«https://ayf.com/ayf/1k/1Up-Bills-v-Cardinals-liv -xx05.html»
«https://ayf.com/ayf/1k/1Up-Bills-v-Cardinals-liv-xx06.html»
«https://ayf.com/ ayf/1k/video-Broncos-v-tvbb01.html»
«https://ayf.com/ayf/1k/video-Broncos-v-tvbb02.html»
«https:// ayf.com/ayf/1k/video-Broncos-v-tvbb03.html»
«https://ayf.com/ayf/1k/video-Broncos-v-tvbb04.html»
« https://ayf.com/ayf/1k/video-Broncos-v-tvbb05.html»
«https://ayf.com/ayf/1k/video-Broncos-v-tvbb06.html»< br /> «https://ayf.com/ayf/1k/video-Broncos-v-tvbb07.html»
«https://ayf.com/ayf/1k/video-Broncos-v-tvbb08 .html»
«http://landrover.gi/land/2k/video-Broncos-v-tvbb01.html»
«http://landrover.gi/land/2k/video-Broncos -v-tvbb02.html»
«http://landrover.gi/land/2k/video-Broncos-v-tvbb03.html»
«http://landrover.gi/land/2k /video-Broncos-v-tvbb04.html»
«http://landrover.gi/land/2k/video-Broncos-v-tvbb05.html»
«http://landrover.gi /land/2k/video-Broncos-v-tvbb06.html»
«http://landrover.gi/land/2k/video-Broncos-v-tvbb07.html»
«http:/ /landrover.gi/land/2k/video-Broncos-v-tvbb08.html»
«https://www.

Поскольку компоненты высокого порядка или, как мы их называем, HOC, — это компоненты, которые возвращают компонент, переданный им, наш синтаксис выглядит немного странно.

Начнем с самого HOC, я назвал его ProvideColor.js, так как он предоставляет цвет для обернутого компонента.

Наш HOC принимает два реквизита: во-первых, компонент, который он оборачивает, а в качестве второго реквизита мы хотим передать ему цвет.
Конечно, вы не ограничены максимальным количеством реквизитов, вы можете поместить несколько вещей в , как вам нужно.

import React from 'react'const ProvideColor = (WrappedComponent, colorName) => () => (
  <div style={{ color: colorName }}>
    <WrappedComponent />
  </div>
)export default ProvideColor

Таким образом, все, что делает наш HOC, — это новый компонент, который затем повсеместно используется «под капотом» для нашего компонента приложения.

Это видно по тому факту, что мы также можем просто ввести className в div нашего HOC или отобразить там дополнительные HTML-элементы, которые затем появятся в DOM работающего приложения. И завернули в него компонент, который мы передали.

Потому что в нашем index.js, точке в каждом приложении React.js, где все потоки собираются вместе, мы просто импортируем и отображаем app.js, как обычно, но не HOC, как мы видим. в нашем коде:

Как всегда, давайте взглянем на последнюю недостающую часть головоломки: App.js.

import React from ‘react’
import ReactDOM from ‘react-dom’
import App from ‘./App’ReactDOM.render(<App />, document.getElementById(‘root’))

Чтобы использовать HOC, нам нужно их импортировать, затем написать сам компонент приложения, как обычно, а затем экспортировать его.
Но мы экспортируем приложение в HOC, который также получает свойство для цвета шрифта.

import React from ‘react’
import ProvideColor from ‘./ProvideColor’function App() {
  return <p>Our Wrapped Text</p>
}export default ProvideColor(App, ‘red’)

Вот и все, вы должны увидеть следующее, когда мы передаем «красный» в качестве цвета нашего текста:

Понимание компонентов высокого порядка в React.js (HOC)