ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
## Session 在客户端,`Session`提供了一个全局对象,可以用它来保存任意的键值对。例如:保存列表中当前选中项。 `Session`的特殊之处在于,它是_响应式_的。如果在[template helper](#template_helpers)或[`Tracker.autorun`](#tracker_autorun)里调用了 `Session.get("myKey")`,那么无论何时调用`Session.set("myKey", newValue)` 都会触发相应的模板片段自动重新渲染。 ### [Session.set(key, value)](#/basic/Session-set) Client 将session里键key的值设为value。并通知所有监听器:键key的值发生了变化(例如:通知那些调用[`Session.get`](#session_get)获取键`key`值的模板helper或是autorun,重新渲染模板或是重新执行[`Tracker.autorun`](#tracker_autorun))。 #### Arguments key String The key to set, eg, `selectedItem` value [EJSON-able Object](#ejson) or undefined The new value for `key` ### [Session.get(key)](#/basic/Session-get) Client 获取session里键key的值。如果是在一个_[响应式计算(reactive computation)](#reactivity)_内部。当通过[`Session.set`](#session_set)修改键key的值时,会作废对应的计算。这个方法会返回键key值的克隆副本,所以如果键key的值是一个对象或数组,修改返回值并不会改变session里键key的值。 #### Arguments key String The name of the session variable to return 例如: ``` <!-- In your template --> <template name="main"> <p>We've always been at war with {{theEnemy}}.</p> </template> ``` ``` // In your JavaScript Template.main.helpers({ theEnemy: function () { return Session.get("enemy"); } }); Session.set("enemy", "Eastasia"); // Page will say "We've always been at war with Eastasia" Session.set("enemy", "Eurasia"); // Page will change to say "We've always been at war with Eurasia" ``` `Seesion`带我们初次体会到了_响应式_的魅力,视图会在必要时自动更新,无需手动调用`render`函数。 在下一节,将会学习如何使用Tracker,一个非常轻量的库,使响应式成为可能。