react обновление useContext не обновляет memo компонент

я пишу приложение на laravel, jetStream, react, ts, inertiaJS. Большой стек, но это не важно. Для переноса роутов из ларавель я использую ziggy.js. В jetStream для удобной работы из коробки написан хук useRoute. Вот код:

// useRoute.tsx
import route from 'ziggy-js';
import { createContext, useContext } from 'react';

export const RouteContext = createContext<typeof route | null>(null);

export default function useRoute(): typeof route {
  const fn = useContext(RouteContext);
  if (!fn) {
    throw new Error('Route function must be provided');
  }
  return fn;
}


// App.tsx
// ...
<RouteContext.Provider value={(window as any).route}>
    <App {...props} />
</RouteContext.Provider>
// ...

Я использую этот хук в своём компоненте Header и в его дочерних HeaderLink, чтобы помечать активные ссылки, ну то есть ссылки на активную страницу. Как-то так) Всё работает. Но когда я обворачиваю Header в React.memo, то route().current() в дочерних компонентах перестаёт обновляться. Как это исправить?

const HeaderLink: React.FC<{ name: string, children: string }> =
    ({ name, children }) => {
        const route = useRoute();
        const isActive = route().current() === name;

        return (
            <CLink href={route(name)} className="relative mx-2 overflow-hidden rounded-lg flex justify-center">
                <span className={`absolute bottom-0 bg-red-600 h-0.5 transition-all ${isActive ? 'w-full' : 'w-0 '}`}/>
                <span
                    className={`
                    font-play text-lg text-gray-400 hover:text-gray-200 px-4 pb-1
                    ${isActive ? 'text-gray-200' : ''}
                `}
                >{children}</span>
            </CLink>
        );
    }

const Header: React.FC = React.memo(() => {
    const [showMobileMenu, setShowMobileMenu] = useState(false);
    const route = useRoute();

    const linksList = [
        { name: 'home', text: 'Главная' },
        { name: 'farms', text: 'Ферма' }
    ];

    return (
        <header className="flex sticky top-0 w-full h-16 justify-center shadow-xl z-10 app-bg-dark text-app-light">
            <div className="container flex items-center justify-between px-5 z-30">
                <CLink href="/">
                    <img src={logo} alt="ColorBit" className="md:h-11 h-8" />
                </CLink>

                {/* Computer menu */}
                <nav className="hidden md:block">
                    <ul className="flex">
                        {linksList.map((link, i) => (
                            <HeaderLink name={link.name} key={i}>{link.text}</HeaderLink>
                        ))}
                    </ul>
                </nav>
            </div>
        </header>
    );
});


Ответы (0 шт):