UNPKG

@antv/f2

Version:

Charts for mobile visualization.

75 lines 2.26 kB
function createUpdater(canvas) { var setStateQueue = []; var renderQueue = []; var callbackQueue = []; function process() { var item; // let component; while (item = setStateQueue.shift()) { var _item = item, state = _item.state, component = _item.component, callback = _item.callback; 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') { callbackQueue.push({ callback: callback, component: component }); } } var renderComponents = [].concat(renderQueue); canvas.renderComponents(renderComponents); // callback queue commitRenderQueue(); // 清空 renderQueue.length = 0; callbackQueue.length = 0; } function enqueueSetState(component, state, callback) { if (setStateQueue.length === 0) { setTimeout(process, 0); } setStateQueue.push({ component: component, state: state, callback: callback }); if (renderQueue.indexOf(component) < 0) { renderQueue.push(component); } } function commitRenderQueue() { for (var i = 0; i < callbackQueue.length; i++) { var _callbackQueue$i = callbackQueue[i], callback = _callbackQueue$i.callback, component = _callbackQueue$i.component; callback.call(component); } } var updater = { // isMounted: function(publicInstance) { // return false; // }, enqueueForceUpdate: enqueueSetState, // enqueueReplaceState: function(publicInstance, completeState) { // }, enqueueSetState: enqueueSetState }; return updater; } export { createUpdater };