如果我将 ReactiveVar
存储在 Session
中,然后读取它,我会看到我的 ReactiveVar
被转换为对象。
var v = new ReactiveVar(4)
Session.set("v", v)
Session.get("v") //Object {curValue: 4, dep: Object}
我无法再获取
或设置
它,因为它是一个普通对象。
有人知道它的意义吗?
PS:另一个 ReactiveVar
中的 ReactiveVar
效果很好
最佳答案
Session
是 global named ReactiveDict
.
所有反应式词典都有一个非常有趣的功能:它们stringify您的存储数据。
例如,他们这样做是为了将其存储在热代码推送中。
考虑以下代码:
var dict = new ReactiveDict()
dict.set('foo', { func : function() {} })
console.log(dict.get('foo'))
控制台将输出:
Object { }
那是因为 EJSON stringification (由 Meteor 定义)基于 JSON stringification ,它删除了对象方法和原型(prototype)以严格保留数据。
如果您想将来自 ReactiveVar
的无功值存储到 Session
中,则必须运行 Tracker
计算来做到这一点:
Tracer.autorun(
() => Session.set('foo', foo.get())
)
如果您想通过方法或定义的原型(prototype)以 react 方式存储对象,请使用 ReactiveVar
。
关于javascript - 为什么在 Session 中存储 ReactiveVar 会将其转换为普通对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33335808/