#javascript #css #reactjs
#javascript #css #reactjs
Вопрос:
У меня есть меню, в котором есть выпадающее меню для одного из элементов. Когда я выбираю один из пунктов выпадающего меню, он добавляет к нему класс, изменяя его стиль.
Мне нужно также изменить стиль своих родителей, чтобы пользователь понимал, что что-то внутри этого выпадающего списка выбрано, но я не смог разобраться в этом (я, вероятно, не подхожу к этому должным образом).).
Как я могу затем изменить этого родителя на основе одного из дочерних элементов, имеющих этот указанный класс?
class NavigationSection extends Component {
renderInternalLinks(internal, proeminent) {
return (
<InternalLinksWrapper className={proeminent ? 'is-proeminent' : ''}>
<SectionTitle>{internal.title}</SectionTitle>
<LinkList>
{internal.links.map(({ title, link, type, submenu }, index) => {
switch (type) {
case 'internal_link':
return (
<li key={index}>
<NavigationGatsbyLink to={link}>
{title}
</NavigationGatsbyLink>
{submenu amp;amp; submenu.length > 0 ? (
<SubMenu className="submenu" aria-label="submenu">
{submenu.map(({ link, title }, index) => (
<li key={index}>
<NavigationGatsbyLink key={index} to={link}>
{title}
</NavigationGatsbyLink>
</li>
))}
</SubMenu>
) : null}
</li>
);
[...]
})}
</LinkList>
</InternalLinksWrapper>
);
}
[...]
}
У одного элемента SubMenu
будет is-active
класс, и я должен затем изменить стиль NavigationGatsbyLink
, который идет прямо перед {submenu amp;amp; submenu.length > 0
is-active
добавляется в NavigationGatsbyLink
by activeClassName
, класс, который добавляется в Gatsby Link, когда он активен
Комментарии:
1. Как определяется ‘is-active’? Это строго CSS? Или есть какой-то контекст внутри
submenu
массива?2. @technicallynick, ‘is-active’ добавляется в навигационную ссылку через activeClassName, которая есть в ссылке Gatsby
3. Похоже, что Gatsby учел этот тип варианта использования, включив
getProps
свойство вLink
компонент. Я бы, вероятно, отправил функцию обратного вызоваLink
компоненту, который является обратным вызовом, еслиisCurrent
илиisPartiallyCurrent
имеет значение true, чтобы раскрасить родительский компонент или добавить класс. gatsbyjs.com/docs/gatsby-link /…4. Если вы настроите codesandbox, я могу попробовать поработать с вами немного больше на примере.
5. @technicallynick, спасибо,
partiallyActive={true}
это был правильный путь. Я пытался использоватьgetProps
, но это действительно ничего не делало, ноpartiallyActive
сделало свое дело, спасибо!
Ответ №1:
Документация Gatsby показывает, что вы можете выполнить расширенный стиль ссылок, вызвав getProps
свойство Link
компонента. Из вашего комментария в вашем сообщении кажется, что все, что вам действительно было нужно, было partiallyActive={true}
.