本文整理汇总了TypeScript中mobx-state-tree.onSnapshot函数的典型用法代码示例。如果您正苦于以下问题:TypeScript onSnapshot函数的具体用法?TypeScript onSnapshot怎么用?TypeScript onSnapshot使用的例子?那么, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了onSnapshot函数的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的TypeScript代码示例。
示例1: flow
hydrate: flow(function* () {
if (__DEV__) {
// Inspect individual models
makeInspectable(self);
makeInspectable(Movies);
makeInspectable(InTheaters);
makeInspectable(Genres);
}
const storageKey = 'Store.settings';
const data = JSON.parse(yield AsyncStorage.getItem(storageKey));
if (data) {
applySnapshot(self.settings, data);
}
onSnapshot(self.settings, debounce(
snapshot => AsyncStorage.setItem(storageKey, JSON.stringify(snapshot)),
1200,
));
// Load all supplimental data
Genres.loadAllGenres();
Cinemas.loadAllCinemas();
self.isHydrated = true;
}),
示例2: addUndoState
.actions(self => {
let targetStore: any
let snapshotDisposer: any
let skipNextUndoState = false
return {
addUndoState(todos: any) {
if (skipNextUndoState) {
// skip recording if this state was caused by undo / redo
skipNextUndoState = false
return
}
self.history.splice(self.undoIdx + 1)
self.history.push(todos)
self.undoIdx = self.history.length - 1
},
afterCreate() {
targetStore = self.targetPath
? resolvePath(self, self.targetPath)
: getEnv(self).targetStore
if (!targetStore)
throw new Error(
"Failed to find target store for TimeTraveller. Please provide `targetPath` property, or a `targetStore` in the environment"
)
// TODO: check if targetStore doesn't contain self
// if (contains(targetStore, self)) throw new Error("TimeTraveller shouldn't be recording itself. Please specify a sibling as taret, not some parent")
// start listening to changes
snapshotDisposer = onSnapshot(targetStore, snapshot =>
(self as any).addUndoState(snapshot)
)
// record an initial state if no known
if (self.history.length === 0) (self as any).addUndoState(getSnapshot(targetStore))
},
beforeDestroy() {
snapshotDisposer()
},
undo() {
self.undoIdx--
skipNextUndoState = true
applySnapshot(targetStore, self.history[self.undoIdx])
},
redo() {
self.undoIdx++
skipNextUndoState = true
applySnapshot(targetStore, self.history[self.undoIdx])
}
}
})
示例3: attachReactotronToMstNode
/**
* Connects a mst tree node to Reactotron.
*
* @param node The node we want to track.
* @param nodeName What to call this node.
*/
function attachReactotronToMstNode(node: IStateTreeNode, nodeName?: string) {
// whenever the snapshot changes, send subscriptions
onSnapshot(node, sendSubscriptions)
/**
* Make some middleware that allows us to track actions.
*/
addMiddleware(node, (call, next) => {
// only actions for now
const skip = call.type !== "action"
// skip this middleware?
if (skip) {
return next(call)
}
// grab the arguments
const args = convertUnsafeArguments(call.args)
const path = getPath(call.context)
// action related data
const action = { args: args, name: call.name, path }
// mst internal data
const mstPayload = {
id: call.id,
parentId: call.parentId,
rootId: call.rootId,
type: call.type,
modelType: getType(node),
alive: isAlive(node),
root: isRoot(node),
protected: isProtected(node),
}
// start a timer
const elapsed = reactotron.startTimer()
// chain off to the next middleware
const result = next(call)
// measure the speed
const ms = elapsed()
// add nice display name
const displayPath = replace(/^\./, "", replace(/\//g, ".", path))
let name = replace(/^\./, "", `${nodeName ? nodeName : ""}${displayPath}.${call.name}()`)
name = replace("/", ".", name)
// fire this off to reactotron
if (!restoring) {
reactotron.send("state.action.complete", {
name,
action,
mst: mstPayload,
ms,
})
}
// return the result of the next middlware
return result
})
}
示例4:
subscribe: (listener: any) => mst.onSnapshot(model, listener)