Странные добытчики от vuex.Может кто-нибудь объяснить мне это поведение? - PullRequest
0 голосов
/ 04 декабря 2018

Хорошо, я знаю, что в JS многие вещи кажутся невозможными или странными.Но зачем внедрять их в продукт, который использует миллионы человек?

здесь у нас есть функция в геттерах

export const isAuthenticated = state => (
      state.auth !== null &&
      state.auth.access_token !== null &&
      new Date(state.auth.access_token_expiration) > new Date() 
      );

, так что если это функция, то мы должны вызывать ее с круглыми скобками и 1 аргументом, например getters.isAuthenticated(state), но это не так в геттерах- getters.isAuthenticated - без скобок, без аргументов, это просто свойство, но это вызов функции.И если мы сделаем это getters.isAuthenticated(arg), то наша функция должна выглядеть как (state)=>(arg)=>{}.Почему это так?

Ответы [ 2 ]

0 голосов
/ 04 декабря 2018

Это разновидность функций более высокого порядка, где ваша функция (с параметром состояния) заменяется другой функцией (без параметра), которая при вызове вызывает вашу функцию и предоставляет параметр состояния из ее собственного контекста.

Исходный код здесь , я упростил код оболочки из строк 303 и 425

module.forEachGetter((rawGetter, key) => {
  store._wrappedGetters[key] = function wrappedGetter (store) {
    return rawGetter(
      local.state, // local state
      local.getters, // local getters
      store.state, // root state
      store.getters // root getters
    )
  }
})

В строке 233 вы можете видеть, что wrappedGetters добавляются в магазинСвойство .getters как получатели javascript и поставляется с параметром store.Опять же, это упрощается, поскольку геттеры добавляются как вычисляемые свойства для использования преимуществ кэширования значений.

forEachValue(wrappedGetters, (fn, key) => {
  Object.defineProperty(store.getters, key, {
    get: () => fn(store),
    enumerable: true // for local getters
  })
})
0 голосов
/ 04 декабря 2018

На самом деле, вы можете использовать getter как функцию, как написано здесь .Вот почему вы видите (state)=>(arg)=>{}.Получатели похожи computed свойства, которые являются общими получателями JavaScript.Пожалуйста, проверьте консоль в этом простом примере .Вы увидите, что эти реквизиты установлены на экземпляр: enter image description here

Это основные функции получения JS, ничего странного.Если вы хотите узнать больше, прочитайте этот справочник MDN.Надеюсь, что это помогает, получайте удовольствие, изучая Vue.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...