const createTextElement = (text) => {
return {
type: 'TEXT_ELEMENT',
props: {
nodeValue: text,
children: []
}
}
}
const createElement = (type, props, ...children) => {
return {
type,
props: {
...props,
children: children.map((child) => typeof child === 'object' ? child : createTextElement(child))
}
}
}
let nextUnitWork = null
const workLoop = (deadline) => {
let shouldYield = false
while (nextUnitWork && !shouldYield) {
nextUnitWork = performUnitOfWork(nextUnitWork)
shouldYield = deadline.timeRemaining() < 1
}
window.requestIdleCallback(workLoop)
}
window.requestIdleCallback(workLoop)
const createDom = (fiber) =>{
}
const performUnitOfWork = (fiber) => {
if(!fiber.dom){
fiber.dom = createDom(fiber)
}
if(fiber.parent){
fiber.parent.dom.appendChild(fiber.dom)
}
const elements = fiber.props.children
let index = 0
let prevSibling = null
while(index < elements.length){
const element = elements[index]
const newFiber = {
}
}
}
const render = (element, container) => {
nextUnitWork={
dom:container,
props:{
children:[element]
}
}
console.log(element, 'element')
const node = element.type === 'TEXT_ELEMENT' ? document.createTextNode('') : document.createElement(element.type)
const isProperty = key => key !== "children"
Object.keys(element.props)
.filter(isProperty)
.forEach(name => {
node[name] = element.props[name]
})
element.props.children.forEach((child) => {
render(child, node)
})
container.appendChild(node)
}
const didAct = {
createElement,
render
}
const element = didAct.createElement('div', { id: 'id', title: 'title' },
didAct.createElement('div', null, 'childA'),
didAct.createElement('h2', { style: { color: 'red' } }, 'chidlB'))
const container = document.getElementById('root')
render(element, container)
console