кодесурса
«Вью

Государственное управление

script1adsense2code
script1adsense3code

Официальная реализация, подобная Flux

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

Vue предлагает Vuex решить эту проблему, это наша собственная библиотека управления состоянием, вдохновленная Elm. Он хорошо интегрируется с vue-devtools, обеспечивая тем самым нулевой доступ к отладке во времени.

Информация для разработчиков React

Если вы разработчик из React, вас может удивить, как vuex сравнивается с redux, который является наиболее популярной реализацией Flux в этой экосистеме. Redux на самом деле не зависит от уровня представления, поэтому мы легко можем использовать его с Vue с помощью простых привязок. Vuex отличается, потому что он знает, что это в приложении Vue. Это позволяет Vuex лучше интегрироваться с Vue, предлагая более интуитивный API и улучшенный опыт разработки.

Простое управление государством с нуля

Часто упускают из виду, что источником правды в приложениях Vue является объект необработанных данных - любой экземпляр Vue только прокси-доступ к нему. Поэтому, если у нас есть часть состояния, которая должна совместно использоваться несколькими экземплярами, мы можем поделиться ею по идентичности:

const sourceOfTruth = {}
const vmA = new Vue({
  data: sourceOfTruth
})
const vmB = new Vue({
  data: sourceOfTruth
})

Теперь, когда sourceOfTruth видоизменен, и vmB, и vmA обновят свои представления автоматически. Субкомпоненты в каждом из этих экземпляров будут в равной степени иметь доступ через данные. $ Root. $ Data. Теперь у нас есть единый источник правды, но отладка приложения была бы кошмаром. Любая часть данных может быть изменена любой частью нашего приложения в любое время, не оставляя следов.

Чтобы решить эту проблему, мы принимаем шаблон магазина:

var store = {
  debug: true,
  state: {
    message: 'Hello!'
  },
  setMessageAction (newValue) {
    if (this.debug) console.log('setMessageAction triggered with', newValue)
    this.state.message = newValue
  },
  clearMessageAction () {
    if (this.debug) console.log('clearMessageAction triggered')
    this.state.message = ''
  }
}

Обратите внимание, что все действия, которые изменяют состояние магазина, помещаются внутри самого магазина. Этот тип централизованного управления состоянием облегчит понимание того, какой тип мутаций может произойти и как эти мутации запускаются. Теперь, когда что-то идет не так, у нас также будет журнал того, что произошло, что привело к ошибке.

Кроме того, каждый экземпляр / компонент все еще может владеть и управлять своим собственным частным состоянием:

var vmA = new Vue({
  data: {
    privateState: {},
    sharedState: store.state
  }
})
var vmB = new Vue({
  data: {
    privateState: {},
    sharedState: store.state
  }
})

Поскольку мы продолжаем разрабатывать соглашение, в соответствии с которым компонентам никогда не разрешается напрямую изменять состояние, принадлежащее хранилищу, а должны скорее отправлять события, которые уведомляют хранилище о выполнении действий, мы в конечном итоге придем к архитектуре Flux. Преимущество этого соглашения заключается в том, что мы можем записывать все изменения состояния, происходящие с хранилищем, и реализовывать расширенные помощники по отладке, такие как снимки, журналы мутаций и повторные просмотры истории / путешествия во времени.

Новый контент: Composer: менеджер зависимостей для PHP , R программирования


script1adsense4code
script1adsense5code
disqus2code
script1adsense6code
script1adsense7code
script1adsense8code
buysellads2code