焦点状态不应改变,React.JS + TailwindCSS

Bol*_*sky 6 javascript css reactjs react-router tailwind-css

我有一个与 tailwindcss 和 React 相关的问题。我有一个属性,如果 a<NavItem />聚焦,那么背景和文本将会改变。<LanguageSwitcher />是另一个组件,如果它是焦点,我希望它不改变导航栏中其他项目的焦点状态。<LanguageSwitcher />不影响网址。

这是我的导航栏中项目的代码以及如何<LanguageSwitcher />影响其他项目的焦点状态的图像:

未单击语言切换器

单击语言切换器

import React from "react";

import { Link } from "react-router-dom";

interface Props {
  title: string;
  url: string;
  icon: JSX.Element;
}

const NavItem: React.FC<Props> = ({ title, url, icon }) => {
  //https://tailwindcss.com/docs/hover-focus-and-other-states#pseudo-classes
  return (
    <Link
      to={url}
      className="text-center items-center flex-col justify-center font-medium  px-1 text-white  capitalize  hover:font-semibold  select-none group"
    >
      <div className="flex items-center justify-center mb-1 rounded-3xl px-2 py-1 group-hover:bg-btnHover group-focus:bg-btnActive group-focus:text-textActive transition-colors duration-75">
        {icon}
      </div>
      <span>{title}</span>
    </Link>
  );
};

export default NavItem;
Run Code Online (Sandbox Code Playgroud)

是否可以?如果是这样,我该怎么做,也许使用useLocationfromreact-router-dom或直接使用 tailwindcss?

Dre*_*ese 2

“焦点”通常是指用户当前可以与之交互的 UI 元素。我认为您将“焦点状态”与“活动状态”混为一谈。我猜您希望Link保持“活动”状态,而其他 UI 元素具有或可能不具有“焦点”并与之交互。切换到使用NavLink组件并有条件地应用“活动”状态 CSS 类名。

这是一个例子*

import React from "react";
import { NavLink } from "react-router-dom";

interface Props {
  title: string;
  url: string;
  icon: JSX.Element;
}

const NavItem: React.FC<Props> = ({ title, url, icon }) => {
  //https://tailwindcss.com/docs/hover-focus-and-other-states#pseudo-classes
  return (
    <NavLink
      to={url}
      className="text-center items-center flex-col justify-center font-medium  px-1 text-white  capitalize  hover:font-semibold  select-none group"
    >
      {({ isActive }: { isActive: boolean }) => (
        <>
          <div
            className={
              [
                "flex items-center justify-center mb-1 rounded-3xl px-2 py-1 group-hover:bg-btnHover transition-colors duration-75"
                isActive ? "group-focus:bg-btnActive group-focus:text-textActive" : null
              ]
                .filter(Boolean)
                .join(" ")
            }
          >
            {icon}
          </div>
          <span>{title}</span>
        </>
      )}
    </NavLink>
  );
};

export default NavItem;
Run Code Online (Sandbox Code Playgroud)

*注意:我刚刚猜测/挑选了看起来与“焦点/活动”CSS 样式相关的 CSS 类名,您需要仔细检查实现中的实际类。