следующий / маршрутизатор: Невозможно прочитать свойство pathname со значением null (сборник рассказов)

У меня есть приложение, которое использует 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 

Пример использования 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(), я получаю ноль, что странно. Что я здесь делаю не так?

2 ответа

Вы можете имитировать поведение следующего маршрутизатора, используя пакет storybook-addon-next-router. Использование этого пакета не только заставит маршрутизатор работать, но также даст вам возможность настраивать значения маршрутизатора для каждой истории.

      // .storybook/main.js
module.exports = {
  ...config,
  addons: [
    ...your addons
    "storybook-addon-next-router",
  ],
};

Я столкнулся с той же проблемой при обновлении до Next v9.5. Похоже, чтоLink Компонент предполагает наличие следующего маршрутизатора.

Этот PR, кажется, решает проблему. Обновление до версии v9.5.1-canary.1 решило эту проблему.

Другие вопросы по тегам