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

Posted

技术标签:

【中文标题】下一个/路由器:无法读取 null 的属性“路径名”(故事书)【英文标题】:next/router: Cannot read property 'pathname' of null (storybook) 【发布时间】:2020-10-09 10:40:54 【问题描述】:

我有一个使用 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】:

我在升级到 Next v9.5 时遇到了同样的问题。看起来Link 组件假定下一个路由器将存在。

This PR 似乎解决了这个问题。升级到v9.5.1-canary.1 version 为我解决了这个问题。

【讨论】:

以上是关于下一个/路由器:无法读取 null 的属性“路径名”(故事书)的主要内容,如果未能解决你的问题,请参考以下文章

react-router-dom - TypeError:无法读取未定义的属性(读取“路径名”)

尝试测试获取所有路由时出现“TypeError:无法读取 null 的属性 '1'”?

无法读取 null 的属性“getHostNode”

未捕获的类型错误:无法读取未定义的属性(读取“路径名”)

未捕获的类型错误:无法在方法中读取 null 的属性“classList”

React Jest 测试无法读取未定义的属性“路径名”