typescript - Deno Fresh får pathname


Jag är ganska ny på Deno och Fresh-ramverket (vilket är riktigt svårt att googla svar för). Jag vill göra en navigeringslänk med en annan bakgrundsfärg om den matchar sökvägen

det här är vad jag försökte:

const NavLink = ({ href, children }: NavLinkProps) => {
  const isActive = location.pathname === href
  const bgClass = isActive ? tw`bg-gray-900` : tw`bg-transparent`

  return (
    <a
      href={href}
      className={tw`px-3 py-2 rounded-md text-sm font-medium text-white ${bgClass}`}
    >
      {children}
    </a>
  )
}

Men location är odefinierad..

Svar #1

Du kan få aktuell URL-data från PageProps.url och skicka den till din komponent.

Från dokumenten

PageProps-gränssnittet innehåller faktiskt en massa användbara egenskaper som kan användas för att anpassa det renderade resultatet. Förutom de matchade url-mönsterparametrarna finns även den råa url:en och routens namn här.

const NavLink = ({ href, children, location }: NavLinkProps) => {
  const isActive = location.pathname === href
  const bgClass = isActive ? tw`bg-gray-900` : tw`bg-transparent`

  return (
    <a
      href={href}
      className={tw`px-3 py-2 rounded-md text-sm font-medium text-white ${bgClass}`}
    >
      {children}
    </a>
  )
}

export default function Page(props: PageProps) {
  return (
    <div>You are on the page '{props.url.href}'.
      <NavLink href="/foo" children="Foo" location={props.url} />
    </div>
  )
}

Svar #2

Jag tycker att data-[current]-alternativet kommer att vara trevligare. Du behöver heller inte tw om du har en version högre än 1.1.

const NavLink = ({ href, children }: NavLinkProps) => {
  return (
    <a
      href={href}
      className="bg-transparent data-[current]:bg-gray-900 px-3 py-2 rounded-md text-sm font-medium text-white"
    >
      {children}
    </a>
  )
}