Vue -Router Должен ли я использовать return при использовании next () в beforeEach? - PullRequest
0 голосов
/ 23 апреля 2020

В настоящее время я использую следующий код в качестве перехвата в каждом из моих маршрутов:

router.beforeEach(async(to, from, next) => {
  /**
   *
   * @type {boolean}
   */
  const requiresAuth = to.matched.some((record) => record.meta.requiresAuth);

  if (requiresAuth) {
    if (!isAuthenticated()) {
      next('/login');
    } else {
      next();
    }
  } else if (isAuthenticated()) {
    next('/home');
  } else {
    next();
  }
});

Мой вопрос, как указывает заголовок, должен ли я использовать return после вызова метода next(). как-то так:

...
if (requiresAuth) {
    if (!isAuthenticated()) {
      next('/login');
      return; <--- should I use return here?
    } else {
      next();
      return; <--- should I use return here?
    }
}

Я не понимаю, нужно ли это использовать или нет .. Не могли бы вы прояснить мои сомнения, пожалуйста ..

Большое спасибо заранее

Ответы [ 2 ]

1 голос
/ 23 апреля 2020

Нет необходимости возвращать, так как у вас есть if / else и никакого кода после этого.

Но кто-то может поспорить, что ранний отказ улучшает читабельность. Таким образом, имея этот код:

if (requiresAuth) {
    if (!isAuthenticated()) {
      next('/login');
      return;
    }

    next();
}

Можно считать более читабельным, чем альтернатива.

Еще одна причина для возвращения - это проверка будущего. Если вы точно знаете, что хотите вернуть, это вызовет предупреждение (если вы используете линтер), если кто-то добавит код в будущем

if (requiresAuth) {
    if (!isAuthenticated()) {
      next('/login');
      return;
    } else {
      next();
      return;
    }

    // adding code here will trigger an unreachable code warning.
}

Так что, даже если 2 пути эквивалентны, returning от функции приносит некоторые преимущества.

1 голос
/ 23 апреля 2020

Проверьте документы на глобальное перед каждым охранником. Нет необходимости возвращать, ваш код обернут в if - else и будет вызывать next() только один раз, как описано в Vue Документах маршрутизатора.

...