Если количество вкладок фиксировано , это можно реализовать с помощью значения ключа функции карты. Или, если в каждом объекте есть уникальный ключ, такой как activityId
, это легко сделать. В этом случае, я думаю, reportView
значение состояния бесполезно.
// initialize state
this.state={
activeTabId: -1, //if you need to select one tab, you can init it by that's activityId
}
...
{emailActivities.map((activity, i) => {
return (
<li
key={i}
className={activity.activityId === this.state.activeTabId ? "active" : null}
onClick={() => {
this.setState({ activeTabId: activity.activityId };
this.getReportByActivityId(activity.activityId));
}}
>
{activity.activityTitle}
</li>
)
})
}
Вы можете легко выбрать первую вкладку, используя key
, если количество вкладок равно fixed .
// initialize state
this.state={
activeTabId: 0, // Select first tab.
}
...
{emailActivities.map((activity, key) => {
return (
<li
key={key}
className={key === this.state.activeTabId ? "active" : null}
onClick={() => {
this.setState({ activeTabId: key };
this.getReportByActivityId(activity.activityId));
}}
>
{activity.activityTitle}
</li>
)
})
}
Еще лучше, используйте styled-component
вместо изменения className
.
Для более подробной информации, пожалуйста, проверьте.
Учебник по реагированию на стилизованные компоненты
Документация по стилевым компонентам