美文网首页
四、dom 更新

四、dom 更新

作者: sweetBoy_9126 | 来源:发表于2024-03-26 22:48 被阅读0次

实现事件绑定

  • App.jsx
import React from './core/React.js'
function Counter({num}) {
  const handleClick = () => {
    console.log('hhh')
  }
  return <div onClick={handleClick}>count: {num}</div>
}
const App = <div>
  hi-mini-react
  <Counter num={1}></Counter>
</div>
export default App
  • React.js
const updateProps = (dom, props) => {
  Object.keys(props).forEach(attr => {
+    const isEvent = attr.startsWith('on')
+    if (isEvent) {
+     const eventType = +attr.slice(2).toLocaleLowerCase()
+      dom.addEventListener(eventType, props[attr])
+    } else {
      if (attr !== 'children') {
        dom[attr] = props[attr]
      }
+    }
  })
}

实现更新 props

本质对比新的 vdom 树和旧的 vdom 树

  1. 如何得到新的 dom 树
    我们旧的dom树是通过 render 传入根节点生成的,所以我们也可以通过render获取新的dom树,但我们又不希望用户传入container 和 el,所以我们可以用初始化的节点作为新的节点
let currentRoot = null
const commitRoot = () => {
  // 这里为啥不是root.props.children
  commitWork(root.child)
+  currentRoot = root
  root = null
}
const update = () => {
  nextWorkOfUnit = {
    dom: currentRoot.dom,
    props: currentRoot.props
  }
}
  1. 如何找到老的节点

在构建链表的时候通过指针让新的节点指向老的
上图右侧是新的树,左侧是久的,
1). 我们首先通过新的树的 root 根节点指向老的树的根节点
2). 新树的第二个节点怎么指向久树的第二个节点(怎么拿到久树的第二个节点)?
通过久树根节点的 child
3). 重复上面的操作,需要注意我们的 counter 需要通过 mini-react 的 sibling 拿到

  1. 如何 diff props

相关文章

  • JavaScript DOM常用操作

    JavaScript的DOM操作主要包括: 更新:更新该DOM节点的内容,相当于更新了该DOM节点表示的HTML的...

  • vue 数据更新 dom不渲染

    场景:获取接口数据,更新dom问题:数据更新了,dom未渲染代码: 原因:vue的dom更新是异步的,即当sett...

  • JavaScript操作DOM对象(重点)

    七、操作DOM对象(重点) 核心:浏览器网页就是一个DOM树形结构。 1.获得DOM结点 更新:更新DOM节点。遍...

  • 前端工程师之DOM编程艺术(持续更新)

    @(书籍阅读)[网易云课堂|DOM] DOM编程艺术 网易前端微专业之《DOM编程艺术》笔记,持续更新; 更新事件...

  • React 更新机制

    React 的更新流程 React 的渲染流程是: JSX → 虚拟 DOM → 真实 DOM React 的更新...

  • vue 虚拟dom

    vnode => dom虚拟 => 真是dom (vue 初始化渲染) 更新节点

  • react 如何决定re-render?

    React以其性能著称。因为它有虚拟DOM,并且只在需要的时候才去更新真正的DOM,所以它始终可以比直接更新DOM...

  • React(DOM树的局部更新)

    伴随用户操作,界面需要更新,用于渲染浏览器中的DOM树的Virtual DOM也会随之更新。但旧的DOM树不会随之...

  • 几种前端框架的选择对比

    react:速度快,虚拟DOM,setState的时候虚拟dom会与实际dom进行比较,有变化再去更新实际dom,...

  • 面试常问题(简述)

    1.$nextTick() dom更新是异步的,$nextTick()中的代码会在dom更新后执行保证执行顺序 原...

网友评论

      本文标题:四、dom 更新

      本文链接:https://www.haomeiwen.com/subject/aefetjtx.html