Предположим Component
, что я хочу получить доступ к 3-му ребенку.
<Component>
<div>1</div>
<div>2</div>
<div>3</div>
</Component>
На самом деле я нашел 3 способа сделать это:
1) С React.children.map
const Component = ({children}) =>
<>{React.Children.map(children, (child, i) => i === 2 && child)}</>
Работает нормально, но многословно и в O (n) .
2) С React.Children.toArray
const Component = ({children}) =>
<>{React.Children.toArray(children)[2]}</>
Меньше многословно, но я не знаю о сложности. Это O (1) ? И если да, то достаточно ли это эффективно?
3) Direclty использует дочерние элементы как массив
const Component = ({children}) => <>{children[2]}</>
На первый взгляд кажется идеальным, но он не будет работать нормально, если потомки передаются как массив. Пример, если я написал что-то вроде этого:
<Component>
<div>1</div>
{[2, 3].map(i => <div key={i}>{i}</div>)}
</Component>
Component
будет предполагать, что у него будет только 2 дочерних элемента, второй из которых является массивом из 2 дочерних элементов. Следовательно, children[2]
не будет существовать.
Итак, мой вопрос: каков наилучший способ получить детей по индексу? Является ли метод toArray
более эффективным, чем map
? Или есть способ решить проблему с параметром 3) ?