【问题标题】:Reactivity in Vue JS to store all changes made?Vue JS 中的反应性来存储所做的所有更改?
【发布时间】:2019-05-16 03:30:30
【问题描述】:

我正在尝试将单独的对象存储到一个数组中,问题是我不确定如何将之前的输入也存储起来 - 我的数据被覆盖了。我附上了这个问题的简短记录,希望能让事情变得清晰:https://vimeo.com/306470918

这是代码的关键: https://jsfiddle.net/h64wafkp/46/

我可以将所有内容都推送到现有数组中,但这一切都是错误的,而且我被数组内部数组类型的格式所困扰,这会使事情变得混乱..知道如何解决这个问题吗?我想保留

的格式
 [
  {
    "id": 3,
    "user_id": 2, // notice id is user 2
    "date": "2018-12-04",
    "duration": 10
  },
  {
    "id": 4,
    "user_id": 1, // another user id in the same array
    "date": "2018-12-13",
    "duration": 41
  },
] 

而不是

[
  [
    {
      "id": 2,
      "user_id": 1,
      "date": "2018-12-03",
      "duration": 13
    },
    {
      "id": 1,
      "user_id": 1,
      "date": "2018-12-02",
      "duration": 13
    },
  ]
] 

如果我执行Object.assign({}, object1, object2) 之类的操作,它不会将所有内容存储在一个大数组中,而是存储在一个大对象中,所以我也不能这样做。有什么想法吗?

【问题讨论】:

  • 你能提供一些代码吗?从视频中获取所有内容并不容易。如果您想跟踪对象突变的变化,这是Vuex 的核心功能之一,但这会增加复杂性
  • 我确实为你提供了小提琴
  • 哎呀。我是个白痴。抱歉,我去看看
  • 代码中的哪些行产生了问题?
  • setDuration 函数,第 130 行

标签: javascript arrays object vue.js


【解决方案1】:

如果我理解您的问题是正确的,您需要将所有当前设置的时间读入一个数组。在你的小提琴中,你在最后有 this.newHours = user.hours 行,只返回当前用户的时间。

如果您想阅读所有用户的所有小时数,您需要将它们全部加起来 - 我建议使用 reduce,从而产生这一行:

this.newHours = this.users.reduce((hours, user) => [...hours, ...user.hours], []);

4 添加到nas 12 月5 日的输入中,将导致:

[
  {
    "id": 2,
    "user_id": 1,
    "date": "2018-12-03",
    "duration": 13
  },
  {
    "id": 1,
    "user_id": 1,
    "date": "2018-12-02",
    "duration": 13
  },
  {
    "id": 3,
    "user_id": 2,
    "date": "2018-12-04",
    "duration": 10
  },
  {
    "id": 4,
    "user_id": 2,
    "date": "2018-12-13",
    "duration": 41
  },
  {
    "user_id": 2,
    "date": "2018-12-05",
    "duration": "4"
  }
]

【讨论】:

  • 这正是我想要实现的——只有一件事——是否可以只添加/更改值?如果我的数据库增长,我不想在每个发布请求上为所有用户重新发送所有现有值
  • 在这种情况下,我可能只是将 newHours 中的所有更改保存为像 newHours[<user_id>][<date>] = duration 这样的多维对象,然后将此对象映射回服务器所需的数组一旦你保存。这是您的小提琴的更新版本:jsfiddle.net/h64wafkp/92
  • 这个问题是,如果您向现有输入字段添加新值(在 12 月 2 日更改第 1 行的值) - 它不会保存该实际 ID,只有 @987654333 @ - 该值已存在于数据库中,如果我更改该特定值(第 1 行的 12 月 2 日),我仍需要保留该 ID - 它将删除 id 属性。表中已经存在的值有一个 id 属性:imgur.com/a/vpTmE6U - 我仍然需要保留一个
  • 我已根据您的需要更改了小提琴:jsfiddle.net/h64wafkp/96 - 它正在保存之前的所有内容并将对象再次传播到其中
  • 我再次更新了小提琴并添加了一些 cmets。我希望他们有所帮助:) jsfiddle.net/h64wafkp/100
猜你喜欢
  • 2020-08-04
  • 2015-07-05
  • 2016-08-09
  • 1970-01-01
  • 1970-01-01
  • 2021-12-26
  • 2018-12-23
  • 1970-01-01
  • 2020-08-30
相关资源
最近更新 更多