shineout
Version:
Shein 前端组件库
43 lines (39 loc) • 1.04 kB
JavaScript
import React from 'react';
import ReactDOM from 'react-dom';
import { messageClass } from './styles';
import Container from './Container';
var elements = {};
var components = {};
function getElement(type) {
var div = document.createElement('div');
div.className = messageClass('_', type);
document.body.appendChild(div);
elements[type] = div;
return div;
}
export function destroy(type) {
if (elements[type]) {
ReactDOM.unmountComponentAtNode(elements[type]);
document.body.removeChild(elements[type]);
delete elements[type];
}
if (components[type]) {
delete components[type];
}
}
export function getComponent(type) {
return new Promise(function (resolve) {
var component = components[type];
if (component) {
resolve(component);
} else {
ReactDOM.render(React.createElement(Container, {
ref: function ref(comp) {
components[type] = comp;
resolve(comp);
},
onDestory: destroy.bind(null, type)
}), getElement(type));
}
});
}