Если все ваши конечности имеют одинаковое поведение, вы можете объявить интерфейс . Что-то вроде:
public interface I3DPosition{
string Get3DCoordinates();
}
, и вы связываете объект конечности с этим интерфейсом
public LimbObject : I3DPosition
Возможно, вы также можете выполнить некоторое наследование . Это довольно Basic для объектно-ориентированного программирования. Для написания csv это должно быть очень просто:
File.WriteAllText(filePath, "x,y,z");
и / или
File.AppendAllText(filePath, "x,y,z");
см. здесь
return (
<div>
{this.props.buttons && this.props.buttons.tabs && this.props.buttons.tabs.length &&
this.props.buttons.tabs.map(button => {
return (
<TabsPanel label={button.labelKey}>
{button.subtabs.map(subtab => {
return (
<Tabs>
<TabsPanel label={subtab.labelKey} />
</Tabs>
);
})}
</TabsPanel>
);
})}
</div>
);
Попробуйте, это должно решить вашу проблему
Вопрос не очень понятен. Но вот несколько сценариев, которые, я думаю, могут быть предназначены.
Компонент TabsPanel принимает вкладки как дочерние элементы: ответ Прабина так же верен, как и получается. (За исключением отсутствующих ключевых атрибутов в компонентах TabsPanel и Tabs)
Компонент TabsPanel и список вкладок располагаются рядом:
Примечание. Компонент является либо одним единственным корнем, либо списком других допустимых компонентов.
Так что либо это правильно.
this.props.buttons.tabs.map((button, index) => {
return (
<div key={index}>
<TabsPanel label={button.labelKey} />
{button.subtabs.map(subtab => {
return (
<Tabs key={subtab.labelKey}>
<TabsPanel label={subtab.labelKey} />
</Tabs>
)
})}
</div>
)
})
Или это правильно.
this.props.buttons.tabs.map((button, index) => {
return [
<TabsPanel label={button.labelKey} key={index} />,
{
...button.subtabs.map(subtab => {
return (
<Tabs key={subtab.labelkey}>
<TabsPanel label={subtab.labelKey} />
</Tabs>
)
})
}
]
})
Также обратите внимание на ключевой атрибут в компонентах Tabs и TabsPanel. Это важно, и я оставляю это на ваше усмотрение, чтобы найти его важность.