1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
| function render(element, container) {
const dom = element.type === 'TEXT_ELEMENT' ? document.createTextNode(element.nodeValue) : document.createElement(element.type)
const isProperty = key => key !== 'children' Object.keys(element.props) .filter(isProperty) .forEach(key => { dom[key] = element.props[key] })
element.props.children.forEach(child => { render(child, dom) })
container.append(dom) }
let nextUnitOfWork = null
function workLoop(deadLine) {
let shouldYield = false where (nextUnitOfWork && !shouldYield) { nextUnitOfWork = preformUnitOfWork( nextUnitOfWork ) shouldYield = deadLine.timeRemaining() < 1 }
requestIdleCallback(workLoop) }
requestIdleCallback(workLoop)
function preformUnitOfWork() {
}
export default render
|