Передача тегов в объект и программный щелчок по ним

#javascript #reactjs #styled-components

#javascript #reactjs #styled-компоненты

Вопрос:

Я работаю над созданием навигационного компонента, который отображает массив объектов, предоставляя каждой навигационной кнопке ссылку для маршрутизации. Я использую стилизованные компоненты для создания интерактивных компонентов div, которые служат моими кнопками навигации. Ссылки передаются в формате JSON, что-то вроде: { link: <a href="#123">Sub 1</a> } . Когда я нажимаю на вкладку навигации, я хочу программно щелкнуть эту ссылку.

Я пробовал использовать window.location.replace и передача только href в объекте. Это работает, однако это не является желаемым решением для нашего проекта.

Я также попытался оформить сам навигационный компонент как <a> элемент, однако довольно сложно оформить <a> элемент тега.

Итак, у меня есть свой стилизованный компонент:

 const SubNavTabOpen = styled.div`
  width: 16.25rem;
  padding: 1.125rem 2.1875rem 1rem 3.3125rem;
  height: 3.5rem;
  line-height: 1.375rem;
  box-sizing: border-box;
  background-color: #1a2d3b;
  color: ${basic[500]};
  font-family: ${primaryFont};
  font-size: ${typeScale.paragraph1};
  amp;:hover {
    color: ${basic[100]};
    cursor: pointer;
  }
  amp;:focus {
    background-color: #434e59;
    color: ${basic[100]};
    outline: none;
  }
  
 <SubNavTabOpen
   tabIndex="0"
   data-testid={"sub-nav-open-"   index}
   onKeyDown={(e) => handleRedirect(e, navItem.link)}
>
   <div>{navItem.link}</div>
</SubNavTabOpen>
  

Я думаю, что добавлю name свойство к объекту данных, чтобы фактически не отображать <a> элемент на странице. Основная причина этого заключается в том, что <a> элемент не заполняет все пространство, необходимое для того, чтобы пользователи могли щелкнуть некоторые области навигационного компонента и не перенаправляться.

Мои события обработки должны выполнять некоторый тип программного щелчка

   const handleRedirect = (e, link) => {
    if (e.which === 13) {
      link.click();
    }
  };
  

link.click() Приведенный выше код на самом деле не выполняется, и это то, что я пытаюсь выяснить.

Комментарии:

1. почему вы просто не вызываете handleMainRedirect? Нет причин вызывать click. Также странно, что ввод еще не запускает щелчок.

2. onKeyDown={(e) => e.key === "Enter" amp;amp; handleMainRedirect(navItem.link)}

3. Обработка основного перенаправления — это просто еще одна функция. Для программного перенаправления пользователя все еще нужен код.