Я пишу библиотеку, другие пишут компоненты реагирования плагина.
Библиотеке нужно распространить некоторые предопределенные реквизиты на самом высоком фактическом HTML-элементе в дереве jsx
плагина.
Я бы хотел взять на себя ответственность от авторов плагинов и нести ответственность за распространение реквизита на стороне библиотеки, потому что вещи не работают, если кто-то забывает.
Теперь я не могу просто обернутьих плагины в div
, потому что такие div
s могут оказаться в неправильных местах, таких как между table
/ tr
, tr
/ td
и т. д., которые находятся вне моего контроля.
Я подозреваю, что нет способа достичь этого, но кто знает ..
Какой-то совершенно нерабочий псевдокод, чтобы проиллюстрировать это:
import React, { Fragment, Children, cloneElement } from 'react'
const annotateFirstChild = (children, props) => Children.map(children, (ch, i) => {
if (i > 0) {
return ch
}
return isHtmlElement(ch)
? cloneElement(ch, { ...props })
: magicCollapse(annotateFirstChild(magicExpand(ch), props))
})
const PropsPassingFragment = ({ children, ...props }) => {
return (
<Fragment>
{annotateFirstChild(children, props)}
</Fragment>
)
}