Я полагаю, что одна из причин, по которой это так распространено, состоит в том, чтобы сделать композицию проще Если вы применяете несколько HoC к одному компоненту, вы можете получить трудный для чтения код, подобный следующему:
export default withLogging(withRouter(withStuff(Component, arg1a, arg2a), arg1b), arg1c);
Рекомендовать или аналогичные библиотеки могут позволить вам превратить это в нечто большее читается через служебную функцию с именем compose
. compose
принимает последовательность функций и вызывает их по одной за раз, передавая выходные данные одной функции в качестве входных данных следующей.
Но для того, чтобы это работало, все эти функции должны быть одинарными (ie, они должны принимать ровно один аргумент). Таким образом, причина использования шаблона, о котором вы спрашиваете, заключается в том, что он позволяет вам легко создавать унарные функции, которым требуется только передача компонента в них. Тогда эти унарные функции могут быть составлены вместе.
Так что, если withLogging
, withRouter
и withStuff
переписаны в соответствии с описанным вами шаблоном, то их можно использовать следующим образом:
export default compose(
withStuff(arg1a, arg2a),
withRouter(arg1b),
withLogging(arg1c),
)(Component)