集合工具 {🚀}
它們允許使用相同的通用 API 來操作可觀察陣列、物件和映射。這些 API 具有完全的反應性,這意味著即使在沒有 Proxy
支援的情況下,如果使用 set
新增新的屬性宣告,MobX 也可以偵測到它們,並且可以使用 values
或 keys
來迭代它們。
values
、keys
和 entries
的另一個好處是它們返回陣列而不是迭代器,這使得可以例如立即對結果調用 .map(fn)
。
話雖如此,一般專案很少有理由使用這些 API。
存取
values(collection)
返回集合中所有值的陣列。keys(collection)
返回集合中所有鍵的陣列。entries(collection)
返回集合中所有項目[key, value]
對的陣列。
變更
set(collection, key, value)
或set(collection, { key: value })
使用提供的鍵/值對更新給定的集合。remove(collection, key)
從集合中移除指定的子項。陣列使用拼接。has(collection, key)
如果集合具有指定的*可觀察*屬性,則返回 *true*。get(collection, key)
返回指定鍵下的子項。
如果您在沒有 Proxy
支援的環境中使用存取 API,那麼也請使用變更 API,以便它們可以偵測到變更。
import { autorun, get, set, observable, values } from "mobx"
const twitterUrls = observable.object({
Joe: "twitter.com/joey"
})
autorun(() => {
// Get can track not yet existing properties.
console.log(get(twitterUrls, "Sara"))
})
autorun(() => {
console.log("All urls: " + values(twitterUrls).join(", "))
})
set(twitterUrls, { Sara: "twitter.com/horsejs" })