我有一个使用Next.js和MaterialUI的应用程序。为了使Link组件能够与MaterialUI一起正常工作,我有一个特殊的Link
组件,如下所示:
function Link(props) {
const {
href,
activeClassName = 'active',
className: classNameProps,
innerRef,
naked,
prefetch,
...other
} = props;
const router = useRouter();
const pathname = typeof href === 'string' ? href : href.pathname;
const className = clsx(classNameProps, {
[activeClassName]: router.pathname === pathname && activeClassName
});
if (naked) {
return (
<NextComposed
className={className}
ref={innerRef}
href={href}
prefetch={prefetch}
{...other}
/>
);
}
return (
<MuiLink component={NextComposed} className={className} ref={innerRef} href={href} {...other} />
);
}
这在我需要的时候绝对可以用。但是,当我开始将我的组件(通过此链接)添加到Storybook时,出现错误:
Uncaught TypeError: Cannot read property 'pathname' of null
at Link
我添加到Storybook中的组件中的链接用法示例:
const MyComponent = (props) => (<Button
className={classes.loginButton}
disableRipple
edge="end"
variant="contained"
color="secondary"
component={Link}
naked
href="/login"
>
Login
</Button>)
当我尝试使用console.log()路由器时,我确实得到了null,这很奇怪。 我在这里做什么错了?
答案 0 :(得分:0)
升级到Next v9.5时遇到了相同的问题。似乎Link
组件假定存在下一台路由器。
This PR似乎可以解决此问题。升级到v9.5.1-canary.1 version可以为我解决。