@antv/f-engine
Version:
FEngine 是 AntV F 系列可视化引擎的底层渲染引擎,为移动端提供了一套完整的渲染、事件、动画能力,能方便的构建可视化 UI
75 lines (74 loc) • 2.26 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.createUpdater = createUpdater;
function createUpdater(canvas) {
var setStateQueue = [];
function process() {
var item;
var renderComponents = [];
var renderCallbackQueue = [];
while (item = setStateQueue.shift()) {
var state = item.state,
component = item.component,
callback = item.callback;
// 组件已销毁,不再触发 setState
if (component.destroyed) {
continue;
}
// 如果没有prevState,则将当前的state作为初始的prevState
if (!component.prevState) {
component.prevState = Object.assign({}, component.state);
}
// 如果stateChange是一个方法,也就是setState的第二种形式
if (typeof state === 'function') {
Object.assign(component.state, state(component.prevState, component.props));
} else {
// 如果stateChange是一个对象,则直接合并到setState中
Object.assign(component.state, state);
}
component.prevState = component.state;
if (typeof callback === 'function') {
renderCallbackQueue.push({
callback: callback,
component: component
});
}
if (renderComponents.indexOf(component) < 0) {
renderComponents.push(component);
}
}
canvas.updateComponents(renderComponents);
// callback queue
commitRenderQueue(renderCallbackQueue);
}
function enqueueSetState(component, state, callback) {
if (setStateQueue.length === 0) {
setTimeout(process, 0);
}
setStateQueue.push({
component: component,
state: state,
callback: callback
});
}
function commitRenderQueue(callbackQueue) {
for (var i = 0; i < callbackQueue.length; i++) {
var _a = callbackQueue[i],
callback = _a.callback,
component = _a.component;
callback.call(component);
}
}
var updater = {
// isMounted: function(publicInstance) {
// return false;
// },
enqueueForceUpdate: enqueueSetState,
// enqueueReplaceState: function(publicInstance, completeState) {
// },
enqueueSetState: enqueueSetState
};
return updater;
}