Я не смог изменить состояние vuex

#javascript #vue.js #vuex

#javascript #vue.js #vuex

Вопрос:

Я хотел бы изменить состояние с помощью слов ввода. Если я добавлю зеленый цвет в форму ввода, состояние станет зеленым. Я отлаживаю входное слово, но я не мог видеть изменение состояния отладчика vue в Chrome

также я получил ошибку типа мутации после ввода «зеленый», «красный» и «синий», но я изменил часть импорта в main.js

 import store from './store'
import {store} from './store'  //after changing like it, I could not see error but state is not changed
  

Main.js

 import Vue from 'vue'
import App from './App.vue'
import router from './router'
import {store} from './store'

Vue.config.productionTip = false

new Vue({
  router,
  store,
  render: h => h(App)
}).$mount('#app')
  

App.vue

 <template>
  <div id="app">
    <router-view/>
  </div>
</template>

<style lang="scss">
#app {
  font-family: Avenir, Helvetica, Arial, sans-serif;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-align: center;
  color: #2c3e50;
}

#nav {
  padding: 30px;

  a {
    font-weight: bold;
    color: #2c3e50;

    amp;.router-link-exact-active {
      color: #42b983;
    }
  }
}
</style>
  

Home.vue

 <template>
  <div class="home">
    <input v-model="message" placeholder="green red blue">
    <p>Color: {{ message }}</p>
  </div>
</template>

<script>
// @ is an alias to /src


export default {
  name: 'Home',
  data(){
    return {
       message: 'Color' 
    }
  },
  watch: {
    message: function(newMessage){
       console.log(newMessage)
       if(newMessage=='green'){
          this.$store.dispatch('changeColor', newMessage)
       } else if(newMessage=='red') {
          this.$store.dispatch('changeColor', newMessage)
       } else if(newMessage=='blue') {
          this.$store.dispatch('changeColor', newMessage)
       }
    }
  },
  components: {
    
  },
  method: {

  }
}
</script>
  

index.js из магазина

 import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)

export default new Vuex.Store({
  state: {
    color: null
  },
  mutations: {
    setColor(state, color) {
      state.color = color
    }
  },
  actions: {
    changeColor({commit}, color) {
      console.log(color   'action')
      commit('setcolor', color)
    }
  },
  getters: {
    getColor(){
      return this.$state.color;
    }
  },
  modules: {
  }
})
  

Ответ №1:

для того, чтобы использовать

import {store} from './store'

вы должны определить свой магазин main.js таким образом.

 const store = new Vuex.Store({

// store code here

}}

export default {store}


  

Для:

import store from './store'

 const store = new Vuex.Store({

// store code here

}}

export default store