将Vue状态数据绑定到数据库的“正确”方法是什么?

问题描述:

目前,如果用户导致编辑数据的操作,我会关闭API调用,然后只是对我的应用程序执行“刷新”命令,以重新下载数据库中的所有相关数据,然后视图相应更新。将Vue状态数据绑定到数据库的“正确”方法是什么?

我是否应该直接编辑我的Vuex状态的数据,并且有某种观察器功能来观察这些变化并将它们写回数据库?

您可以实现vuex动作,这些动作会触发状态更改,并在后台保存到数据库,因为动作是异步的。

我不会直接在Vuex编辑数据可能不那么准确地代表你的数据库,该数据库可以得到非常尴尬的当前状态开始......

相反,我会创造内的API模块你的应用程序返回一个Promise,它将对数据库进行必要的更新。然后,在来自数据库API的成功/错误响应中,您解析/拒绝Promise。成功解析回调可以传递更新的数据。

因此,在编辑时会调用vue API,它将请求和数据发送到数据库端点。 vue API返回一个承诺,然后您链接更新您的Vuex状态。在成功收到包含更新数据的对象,对错误你得到的消息,并在必要时提醒用户,即

# Your Vue API 
setUserName: (username) => new Promise((resolve, reject) => { 

    // send request to your database, assuming via vue resource 
    Vue.http.post('www.endpoint.com', { name: username }) 
    .then(responseData => resolve(responseData.name)) 
    .catch(errorData => reject(errorData)) 

} 

# Your Vuex Action 
updateUserName: ({ commit }) => { 

    YourVueAPI.setUserName('joe') 
    .then(name => commit('SET_USERNAME', name)) 
    .catch(errorData => alert(errorData.message)) 

} 

# Your Vuex Mutation 
SET_USERNAME: (state, name) { 

    state.username = name 

} 

喜欢的东西上面会允许你只显示更新的用户名时设置是否正确在你的数据库中。因此确保用户始终知道数据库的正确状态。

Vue将允许您轻松地反应/观看Vuex状态以更新您的页面。

+0

这与我已经做的非常相似。考虑一下VueJS中的50个笔记本电脑列表 - 如果用户对这20台笔记本电脑执行批量更新,目前我发送API调用,然后在200响应中执行新的API调用以获取列表现在还有更新的数据。不觉得特别优雅或粒度,但它保持了代码量。只是想知道其他人在做什么。 – daninthemix

+0

对我来说,优雅来自诺言 - 一种个人偏好,但我觉得它们是一个惊人的补充,当涉及到复杂的链接时 - 避免厄运的金字塔!如果您要更改操作(updateUserName)以返回承诺,那么可以根据您可以给予用户的反馈来帮助您。在组件中调用动作,然后可以根据其进度设置/取消设置加载状态。总体而言,虽然上述应该很容易遵循。 Vuex固有地增加了复杂性,但我相信你已经知道它有多有益。 – GuyC