下一个/路由器:无法读取null的属性“路径名”(故事书)

时间:2020-06-19 07:58:15

标签: material-ui next.js storybook next-router

我有一个使用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,这很奇怪。 我在这里做什么错了?

1 个答案:

答案 0 :(得分:0)

升级到Next v9.5时遇到了相同的问题。似乎Link组件假定存在下一台路由器。

This PR似乎可以解决此问题。升级到v9.5.1-canary.1 version可以为我解决。