UNPKG

@antv/f-engine

Version:

FEngine 是 AntV F 系列可视化引擎的底层渲染引擎,为移动端提供了一套完整的渲染、事件、动画能力,能方便的构建可视化 UI

75 lines (74 loc) 2.26 kB
"use strict"; 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; }