微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

VueX 变异优化

如何解决VueX 变异优化

我目前正在使用 VueX 商店,我有 1 个突变可以推送到整个数组。目前一切正常,但想知道我是否可以让这段代码更简单、更少行/同时更优化。 旁注,这些是存储在数组中的对象。

{"name":"Josh","city":"New York","Height":"5,9"}{"name":"Katty","city":"Los Angeles",6"}

解决方法

我的第一个想法是,如果将 slug 中的 data 与数组中每个对象中的 find 进行比较,它必须是唯一的(否则您将替换 slug 中的多个对象).

这意味着,如果您将状态的“根”作为数组切换到使用由 PUSH_TO_ALL: (state,data) => { state.all[data.slug] = data 索引的对象,则几乎肯定可以使事情变得更快、更简单。

>

然后你的代码会变成这样:

slug

这有两个优点——修改状态更简单、更快捷,因为如果对象已经存在,你不需要遍历所有状态检查。其次,不需要单独的代码来区分添加新对象和替换它(如果它已经存在)。

如果出于某种原因您必须将状态存储为数组,我将使用状态的不同部分来维护跟踪 PUSH_TO_ALL: (state,data) => { if (state.map[data.slug]) { state.all[state.map[data.slug]] = data } else { // Push returns length of array - index is len-1 state.map[data.slug] = state.all.push(data) - 1 } 到数组索引的对象。那么您的代码将类似于:

Vue.set()

注意 - 在 Vue2 中,您可能需要使用 Documents> dir /a : 2021-05-29 11:43 <JUNCTION> My Music [C:\Users\iggy\Music] 2021-05-29 11:43 <JUNCTION> My Pictures [C:\Users\iggy\Pictures] 2021-05-29 11:43 <JUNCTION> My Videos [C:\Users\iggy\Videos] : 来更新嵌套对象,否则代码可能不会对这些更改做出反应。 Vue3 不再有这个限制。

,

您可以使用 Array.findIndex 代替 Array.find,并将其与三元组配对,以使琐碎的逻辑更简洁(尽管不一定更清晰)。

const mutations = {
  PUSH_TO_ALL: (state,data) => {
    const indexOfMatchingSlug = state.all.findIndex(one => one.slug === data.slug);
    state.all[indexOfMatchingSlug] = data ? indexOfMatchingSlug > -1 : state.all.push(data);
  }
}

Array.findIndex documentation

JavaScript ternary operator documentation

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。