Vue: добавление элемента в список

#vue.js #vuex

Вопрос:

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

Пожалуйста, помогите мне.

Вот мой код магазина Vuex

 import Vue from "vue";
import Vuex from "vuex";

Vue.use(Vuex);

export default new Vuex.Store({
  state: {
    produits: [
            {text: "ananas", checked: true},
            {text: "banane", checked: false},
            {text: "orange", checked: true},
    ],
    newProduit: ''
  },
  mutations: {
    addItem: function(ecrit) {

      ecrit= this.state.newProduit.trim();
      if(ecrit) {
        this.state.produits.push({
          text:ecrit,
          checked: false
        });
      }
    }
  },
  actions: {},
  modules: {},
});

 

Вот мой код компонента

 <template>
  <div>
    <b-input-group class="mt-3">
      <b-form-input></b-form-input>
      <b-input-group-append>
        <b-button variant="info" v-on:click="ajoutElement">Ajouter</b-button>
      </b-input-group-append>
    </b-input-group>
  </div>
</template>

<script>
export default {
  computed: {
    ajoutElement: {
      get() {
         return this.$store.state.produits;
      },
      set(value) {
        this.$store.commit('addItem',value)
      }
    }     
  }
}
</script>
 

Заранее спасибо за вашу помощь

Комментарии:

1. Где ваше действие ? Используя vuex, просто убедитесь, что вы добавили все необходимые стандартные принципы государственного управления.

Ответ №1:

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

Я добавил действие addItemAction. Вы можете посмотреть это для справки, в идеале у вас должно быть действие-> фиксация->> мутация

В большом приложении вы даже можете создавать отдельные модули, которые должны иметь функцию для каждого из модулей для выполнения действий-> фиксации->> мутации

компонент

 set(value) {
        this.$store.dispatch('addItemAction',value); // Dispatch action with name and params.
      }
 

Обновите магазин vuex сейчас

 export default new Vuex.Store({
state: {
produits: [
        {text: "ananas", checked: true},
        {text: "banane", checked: false},
        {text: "orange", checked: true},
],
newProduit: ''
},
mutations: {
addItem: function(ecrit) {

  ecrit= this.state.newProduit.trim();
  if(ecrit) {
    this.state.produits.push({
      text:ecrit,
      checked: false
    });
  }
}
 },


actions: {
  addItemAction: function(context, ecrit){
    context.commit('addItem', ecrit); // Commit from here.
  }
},
modules: {},
});
 

Комментарии:

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

2. Я поделился подходом и примером кода, можете ли вы создать stackblitz или подробнее ознакомиться в документе vuex.vuejs.org/guide/actions.html#dispatching-actions Отправка действий от компонентов.

3. Хорошо, но, пожалуйста, мне нужен наставник, эксперт в области Vue Js, к которому я могу обратиться, когда я застряну и когда мне понадобятся точные объяснения. Пожалуйста, вы хотели бы быть моим наставником в Vue Js. Это очень поможет мне развиваться в Vue Js

4. Определенно, я верю в обмен знаниями и опытом обучения. Соединитесь со мной здесь linkedin.com/in/abhinavkumar985

5. Заранее спасибо, я просто отправлю вам приглашение в LinkedIn(Вацлав Коуку мой профиль в LinkedIn).