Вы можете сделать круг ответственным за позиционирование элементов, затем использовать Patrats как дочерние элементы круга (Circle > div.circle_element_position > Patrat
) или, если Patrats будет меняться в зависимости от родительского компонента, вы можете использовать ту же логику, но использовать renderProps для Patrats (Circle > div.circle_element_position > props.renderPatrat(index)
)
Это выглядело бы более или менее так:
function Partat() {
return <div>1</div>
}
function calculatePositions(numberOfPatrats) {
//your implementation
}
function Circle ({numberOfPatrats}) {
let positions = calculatePositions(numberOfPatrats);
return <div className="circle">
{positions.map(
(position, index) => <div style={position} key={index}><Partat /></div>
)}
</div>
}
Чтобы разместить Parats на нужных вам позициях, вам просто нужно реализовать Calculate, который будетпохоже на то, что было в вашем примере с jsfiddle.