MobX计算在item实际插入数组之前运行
MobX computed runs before item is actually inserted into array
我正在使用React与MobX相结合。我使用具有可观察数组(对话)的存储,并希望提供该数组的排序版本作为计算属性。添加新对话时,在将对话添加到数组之前,计算属性sortedConversations将被求值。在下面的小示例中,"重新排序对话"总是在"添加对话"之前记录。我做错了什么吗?
class Store {
...
@observable conversations = [];
addConversation(conversation) {
this.conversations.push(conversation);
console.log('Added conversation');
}
@computed
get sortedConversations() {
console.log('Reordering conversations');
return _.orderBy(this.conversations.slice(), ['lastUpdated'], ['asc']);
}
}
你没有做错任何事。MobX API看起来像普通的JavaScript,但是每次一个可观察对象被更新时,它的所有观察者都在底层同步更新。在这种情况下,这不是问题,但是您可以将addConversation
的内容包装在事务:
addConversation(conversation) {
transaction(() => {
this.conversations.push(conversation);
console.log('Added conversation');
});
}
您还可以将addConversation
变为动作,这也是transaction
:
@action
addConversation(conversation) {
this.conversations.push(conversation);
console.log('Added conversation');
}
相关文章:
- 如果数组仍在执行,async.forEach()将运行我添加到数组中的新元素
- 如何在javascript中在运行时获取对象/数组
- 如何使用javascript或jquery来运行放置在数组中的函数
- 嗨,我正试图将我的movieprice数组从复选框值传递给另一个计算选择总数的函数,但我的代码没有;t运行
- 70%的时间运行JavaScript函数,从函数数组中随机选择
- 从对象方法内部的数组中运行console.log
- 如何在运行时向计算可观察量添加其他数组项
- 运行字符串数组并在 url 中找到匹配项,如何做到这一点
- 尝试使用 jsrender在 for 循环中的数组上运行函数
- 在运行之前确定数据是否是新的(将数组与 JSON 进行比较)
- 为什么我的数组在我的 savetime 函数中未定义,但在其他函数中正常运行
- D3.js键功能在简单的选择器/数组组合上运行两次
- 有没有办法防止字符串像多维数组一样运行
- 如何在解析中对对象数组运行查询
- 如何在运行重复计数后查找数组中重复值的索引
- 传入函数数组作为参数,对于函数中的每个函数运行函数
- 对列表/数组中的每个项目运行相同的函数
- 如何在 JavaScript 中运行时将数组保存在对象中
- 通过同一数组运行两个 for 循环
- 如何通过对象数组运行forEach并为具有空字符串的对象属性设置值?