nedb中添加的记录是单条的,为什么VUE会多次存储同一条记录?

Record added in nedb is single but why VUE store same record multiple times?

我在 Vue 中使用电子。我正在使用 nedb 保存数据。我将事件从 vue 组件发送到 background.js,当它 returns 带有数据时,它会在 fibbonaccicaly 中的 vuex 中添加数据。 喜欢

所以我只需要在vuex中插入一次数据。我是怎么做到的?

// 在CreateNewTodo.vue

methods:{

// saveTodo method get triggers when user submit the form in modal

saveTodo() {
      if (this.isFormValid) {
        const newTodo = {
          task: this.task,
          priority: this.priority,
          eventDate: this.eventDate,
          createdDate: new Date(),
          completedDate: null,
          isCompleted: false,
        };

    // new Todo is an object that contains data that is requested from user 
    // from a form like task, priority and eventDate 

    ipcRenderer.send('createNewTodo', newTodo);
    ipcRenderer.on('createNewTodoResponse', (e, newDoc) => {
      if (typeof newDoc === 'object') {
        this.$store.dispatch('createNewTodo', newDoc);
        $('#createNewModal').modal('hide'); 
      } else {
        $('#createNewModal').modal('hide');
      }
    });
  }
},
}

// 在background.js

ipcMain.on('createNewTodo', (e, args) => {

  // db.performTask is a function that insert document/record in nedb. 
  // I've used nedb-promises. In return we'll get promise.

  const dbpromise = db.performTask('todos', 'insert', args);

      // newDoc is the newly inserted document, including its _id

      dbpromise.then((newDoc) => {
        e.sender.send('createNewTodoResponse', newDoc);
      })
        .catch(() => {
          e.sender.send('createNewTodoResponse', 'error');
        });
    });

// vuex 存储

const state = {
  todos: [],
};

const getters = {
  getAllTodos(todosState) {
    return todosState.todos;
  },
};

const mutations = {
  CREATE_NEW_TODO(todosState, todo) {
    todosState.todos.push(todo);
  },
};

const actions = {
  createNewTodo({ commit }, todo) {
    commit('CREATE_NEW_TODO', todo);
  },
};

每次保存待办事项时,都会为 IPC 回复频道注册一个新的侦听器。听众都保持活跃,每个人都选择并处理每个事件。这不是你想要的,你只想处理每个响应一次,Electron 有一个方法 :) 试试这个:

    // register a listener to process the response (once)
    ipcRenderer.once('createNewTodoResponse', (e, newDoc) => {
      if (typeof newDoc === 'object') {
        this.$store.dispatch('createNewTodo', newDoc);
        $('#createNewModal').modal('hide'); 
      } else {
        $('#createNewModal').modal('hide');
      }
    });

    // send the request
    ipcRenderer.send('createNewTodo', newTodo);