@cloudz

Нужно ли дублировать передачу пропсов в родительком компоненте?

Есть компонент Tabs(принемает 4 пропса).
В котором отображаются несколько компонентов Tab (принемает 5 пропсов).
В свою очередь в компоненте Tab есть компонент Tooltip(принемает 3 пропса).

Я создаю отдельный компонент для страницы UsersTabs,
который инкапсулирует в себе данные и отрисовывает Tabs.

Впорос.
Должен ли UsersTabs компонент приинимать все те свойства что принемают Tooltip, Tab, Tabs? (12 пропсов) или я что-то делаю не так?

Нормально ли (хорошо ли?) передавать 1 пропс в виде массива объектов со всеми свойствами внутренних компонентов и разбрасывать их внутри UsersTabs?
Например

tabs={
[
  {
    'tabName': 'tab1',
    'tooltipText': 'this is tab1',
    'onTabClick': () => func(),
  },
  {
    'tabName': 'tab2',
    'tooltipText': 'this is tab2',
    'onTabClick': () => func(),
  }
]}
  • Вопрос задан
  • 59 просмотров
Решения вопроса 1
@ovodovod
I am Software Engineer
Попробую вам помочь. Если у вас вкладок немного, то чтобы не городить 12 пропсов, можно использовать такой подход:

const UserTabs = () => (
  <Tabs>
    <Tab
      name={name}
      tooltipText={tooltipText}
      onTabClick={onTabClick}
    />
    <Tab
      name={name}
      tooltipText={tooltipText}
      onTabClick={onTabClick}
    />
  </Tabs>
);


По возможности постарайтесь инкаспулировать данные внутри UserTabs и попробуйте решить проблему через композицию.

Если не получится (например, вкладок много или вы заранее не знаете данных), то можно так (то есть как вы и сказали передать массив tabs и с помощью итерации создать компонеты Tabs внутри UserTabs):

const createTabs = (tab) => tabs.map((tab) => {
  <Tab
    name={tab.name}
    tooltipText={tab.tooltipText}
    onTabClick={tab.onTabClick}
  />
});

const UserTabs = ({ tabs }) => <Tabs tabs={createTabs(tabs)} />;


Подробнее о композиции можно почитать в документации.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы