- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个状态:
state: {
objects: [
{
id: 10,
key2: 'smth',
key3: 'smth'
//etc...
},
{
id: 12',
key2: 'smth',
key3: 'smth'
//etc...
}
]
}
我通过 id 选择一个,然后通过 v-model 更改它的 key 。
setter/getter
activeObject: state => {
return state.objects.find((obj) => obj.id === state.objId)
}
在 vue 模板中
computed: {
obj() {
return this.$store.getters.activeObject
}
},
在 html 中
<input v-model="obj.key2"></input>
问题是 vuex 告诉我必须只对突变进行更改。我看到了许多解决方案,例如 computed: get() set() 或 _.deepClone 或仅更改一个键。但是我可以做些什么来通过突变中的 id 重写整个对象?我在数组中的对象可能有很多键,所以将更新提交函数写入每个键会非常痛苦..
是否有一种解决方案可以通过 1 次提交重写具有多个键的对象?
请不要告诉我使用 lodash 或其他 lbis,只使用普通的 vue/js。
最佳答案
Is there a solution to rewrite object with many keys with 1 commit?
当然有:
myMutation(state, { id, newItem }) {
const item = state.objects.find(item => item.id === id);
Object.assign(item, newItem);
}
//...
const params = { id: 23, newItem: myNewItem };
store.commit('myMutation', params);
请注意,Vue 不会观察数组内部的变化。它不会对它们使用react。
OP添加源代码示例后编辑
您所做的是违反 Vuex 的“单向数据流”概念。 Vuex docs 中准确解释了如何处理您的用例:
Assuming obj is a computed property that returns an Object from the store, the v-model here will attempt to directly mutate obj.message when the user types in the input. In strict mode, this will result in an error because the mutation is not performed inside an explicit Vuex mutation handler. The "Vuex way" to deal with it is binding the 's value and call an action on the input or change event.
因此使用像这样的事件处理程序
updateObj (e) {
this.$store.commit('updateObj', e.target.value);
}
这是通过您的 HTML 代码调用的
<input :value="message" @input="updateObj">
请注意,如前所述,Vue 是否能够在存储的 Object
上看到您的更改s/Array
s 取决于您如何定义它们以及如何访问它们,请参阅 Vuex mutations .
关于javascript - Vue + vuex 对象突变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45901200/
我想用 Graphite 烯一口气创造很多人。 文档只提到了这样创建一个人的方法: class CreatePerson(graphene.Mutation): class Input: na
我想发送没有子部分的 graphql 突变请求 mutation _ { updateCurrentUser(fullName: "Syava", email: "fake@gmail.com
通常查询是在您获取数据时,而变异是在您操作数据时。但是我将如何在没有任何参数的情况下实现突变? 在我的特殊情况下,我删除并创建了 2fa token 端点。 delete 和 create token
我正在使用 REDUX-TOOLKIT-QUERY,现在我有一种情况,我必须调用一个突变。一旦该突变返回响应,我必须在其他三个突变中使用该响应作为请求参数。我们如何才能以正确的方式实现它? const
突变是用于操作数据的查询。如果是这样,那么我的 root query和 root mutation树应该看起来相似吧?他们都应该允许嵌套字段(嵌套突变)。我正在玩这个(使用 express-graph
使用 R 3.6.1 (64) 位。使用 readxl 将数据框导入 R(命名为“RawShift”。我创建了 6 个变量(类:“字符”),它们是用户名列表。每个列表都以用户所在的团队命名。 我想使用
我正在尝试将 dplyr 中的 mutate 与动态变量名称一起使用。我发现了一些关于 SO(here、here 和 here)的帖子,它们让我更接近但不是可行的解决方案。我不认为缺少什么,但我需要你
我有一个现有的代码库,它使用 Meteor 方法接收来自客户端的请求并在服务器上执行数据库操作。我想尝试将此项目转移到 GraphQL,但我无法理解该工作的范围,特别是这对这些 Meteor 方法意味
我正在使用 Apollo Client 并尝试构建一个提交对象的突变,该对象的一部分是子类型的数组,该数组的大小需要是动态的,但我找不到任何有关如何正确构建此数组的文档。 这是我使用手动输入的数组进行
关闭。这个问题是opinion-based 。目前不接受答案。 想要改进这个问题吗?更新问题,以便 editing this post 可以用事实和引文来回答它。 . 已关闭 4 年前。 Improv
我的应用程序的目标是让用户能够保存和调用要填写和编辑的表单列表。一个用户会有多个表单,一个表单将由它自己的几个字段组成。 如果我的类型是这样设置的,例如: const FormType = new G
我刚刚写完这段代码: /// Watcher to look for changes in files pub struct Watch { glob:Option, ruv:Vec, p
我做了这个: test 1 为什么.b没有激活警报? $( ".a" ).click(function() { $('div').html('test 2'); }); $( ".b" ).click
我使用 graphene-django 来获得 GrapQL API。我在我的 schema.py 中创建了一个突变: class UpdateApplication(graphene.Mutatio
我正在使用适用于 Android 的 graphql apollo 客户端。我能够使用单个字段的突变传递数据而没有任何问题。在突变中使用输入对象时,发生错误无法读取未定义的电子邮件属性。但同样的 gr
我有两个变量,一个是可变数组,另一个是不可变的。 let mutableArray = NSMutableArray(array: ["1","2","3"]) let immutableArray:
是否可以从一个突变中对另一个 graphqlType 运行一个突变?我不确定这是否是个好主意。理想情况下,最好为每种 graphql 数据类型创建突变,然后在需要时调用这些函数中的每一个。希望这能让事
我需要能够在单个请求中创建一个用户并添加它最喜欢的电影(一个对象数组,引用了 Movies 集合和他对每部电影的个人评分)。 看起来像这样的东西(伪代码) var exSchema = ` type
我一直在使用 graphql-js 的 Node 服务器中使用 GraphQL,并且 GraphQL 已被证明是一个非常有值(value)的抽象,但我遇到了一个问题。 我经常发现自己需要使用 Grap
对于任何使用过 VuexFire Vuex v2 的人。 mutations: VuexFire.mutations 这里指的是什么?答案可能很明显,但我不知道这意味着什么。那么我的实际突变去哪里了?
我是一名优秀的程序员,十分优秀!