Skip to content

Criando uma Store mais simples com Vue.observable/Vue.defineReactive #33

@IgorHalfeld

Description

@IgorHalfeld

Abri essa thread no twitter falando sobre como usar um state management mais simples no Vue.js em casos de projetos mais simples, usando o Vue.observable(Vue +2.6.6) ou o Vue.defineReactive em situações de versão inferior ao Vue 2.6

A implementação fica assim:

store.js

function createStore({ state, mutations }) {
  return {
    state: Vue.observable(state),
    commit(key, ...args) {
      mutations[key](state, ...args)
    }
  }
}
const store = createStore({
  state: { list: [] },
  mutations: {
    populateList (state) {
      state.list = ['Igor', 'Halfeld']
    }
  }
})

component.vue

<template>
  <ul>
    <li v-for="(item, index) in list" :key="index">{{ item }}</li>
  <ul>
</template>

<script>
import Store from './store'

export default {
  data: () => ({
    list: Store.state.list,
  })
  mounted() {
    Store.commit('populateList')
  }
}
</script>

Muita gente se perguntou o por quê de usar dessa forma, pois parece que estou reinventando a roda, na real estou sim, mas nesse caso é pra ter toda praticidade de ter um state management e ter também um bundle menor, já que eu não preciso de features do Vuex como o watch, subscribeMutation, subscribeAction, etc.. em projetos simples.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions