#reactjs #blueprintjs
#reactjs #blueprintjs
Вопрос:
Я использую стороннюю библиотеку react (blueprintjs) с Tab
компонентом, который используется следующим образом:
<Tab
id="notifications"
title={<span>"Notifications"</span>}
panel={<div>The content of the page</div>}
/>
Вместо того, чтобы отображаться напрямую, родительский компонент Tabs
отображает все дочерние компоненты, которые имеют тип Tab
.
Я хотел бы связать title
panel
реквизиты и вместе, чтобы я мог показывать значок в title
элементе в зависимости от состояния panel
элемента:
Как мне поступить с этим?
Мои первоначальные идеи:
-
Получить количество непрочитанных уведомлений из элемента panel через ссылку и передать его элементу title в качестве реквизита
-
Переместить состояние на один уровень выше. Это кажется неудобным — я хочу, чтобы управление уведомлениями оставалось на странице уведомлений.
-
Есть
<NotificationTab ... />
элемент, который обрабатывает состояние для панели заголовок вместе. Проблема с этим методом заключается в том, что родительскийTabs
компонент не распознаетTab
некомпоненты.
Примечание: я знаю, что по этому поводу есть несколько вопросов, но ответ всегда таков: «перенесите состояние в родительский компонент». Я действительно предпочел бы этого не делать, поскольку родительский компонент не имеет никакого отношения к уведомлениям — он просто переключает вкладки.
Комментарии:
1. «… поскольку родительский компонент не имеет ничего общего с уведомлениями — он просто переключает вкладки», но то, что вы спрашиваете, делает добавление notification # к заголовку каждой вкладки проблемой родительского компонента. Теперь зависит от того, находится ли это поднятое состояние в вашем
Tabs
контейнере, родительском родительском или более высоком, или в состоянии приложения (т. Е. redux). Снятие состояния где -либо и передача в качестве реквизита — это шаблон и ответ, которые вы обнаружили.2. @DrewReese достаточно справедливо. Если вы опубликуете это как ответ, я бы принял его.