From 3ee221071ac1ea2ee817571f8fd051ee7c0f39e8 Mon Sep 17 00:00:00 2001 From: Josh Slate Date: Wed, 30 Nov 2022 11:51:08 -0800 Subject: [PATCH] Update `active-class-name` example --- .../components/ActiveLink.tsx | 29 ++++++++----------- examples/active-class-name/components/Nav.tsx | 21 +++++++++----- 2 files changed, 25 insertions(+), 25 deletions(-) diff --git a/examples/active-class-name/components/ActiveLink.tsx b/examples/active-class-name/components/ActiveLink.tsx index c9501b52f951..5745eff02546 100644 --- a/examples/active-class-name/components/ActiveLink.tsx +++ b/examples/active-class-name/components/ActiveLink.tsx @@ -1,22 +1,20 @@ import { useRouter } from 'next/router' import Link, { LinkProps } from 'next/link' -import React, { useState, useEffect, ReactElement, Children } from 'react' +import React, { PropsWithChildren, useState, useEffect } from 'react' type ActiveLinkProps = LinkProps & { - children: ReactElement + className?: string activeClassName: string } const ActiveLink = ({ children, activeClassName, + className, ...props -}: ActiveLinkProps) => { +}: PropsWithChildren) => { const { asPath, isReady } = useRouter() - - const child = Children.only(children) - const childClassName = child.props.className || '' - const [className, setClassName] = useState(childClassName) + const [computedClassName, setComputedClassName] = useState(className) useEffect(() => { // Check if the router fields are updated client-side @@ -33,11 +31,11 @@ const ActiveLink = ({ const newClassName = linkPathname === activePathname - ? `${childClassName} ${activeClassName}`.trim() - : childClassName + ? `${className} ${activeClassName}`.trim() + : className - if (newClassName !== className) { - setClassName(newClassName) + if (newClassName !== computedClassName) { + setComputedClassName(newClassName) } } }, [ @@ -45,17 +43,14 @@ const ActiveLink = ({ isReady, props.as, props.href, - childClassName, activeClassName, - setClassName, className, + computedClassName, ]) return ( - - {React.cloneElement(child, { - className: className || null, - })} + + {children} ) } diff --git a/examples/active-class-name/components/Nav.tsx b/examples/active-class-name/components/Nav.tsx index 921cc15120bf..36afaa4cecd4 100644 --- a/examples/active-class-name/components/Nav.tsx +++ b/examples/active-class-name/components/Nav.tsx @@ -13,23 +13,28 @@ const Nav = () => ( `}