Dan讲react原理

Eddie QiaoEddie Qiao
1 min read

https://overreacted.io/react-as-a-ui-runtime/

react 维护一个dom树对象 渲染,调用 creatElement原生方法创建dom,appendChild添加。

重新匹配,重新渲染,价格一个元素类型相同,不用创建新元素,复用,创建新元素之前的滚动状态等状态会丢掉。

数组遍历,key用对象的id最好,不能用index。因为list顺序变了,用对象id知道哪个可以重用,用inde显然不行。会有bug的。

组件内改变props无效,只能父组件改变,子组件更新。

UI树,一个json对象,包含type,包含children

渲染和提交两个阶段,渲染异步的,获得树。提交,同步的,真正渲染。

  const [count, setCount] = useState(0);

  function increment() {
    setCount(count + 1);
  }
 // 如果我们一开始就将 count 设置为 0 ,那么这只会是三次 setCount(1) 调用。
// 为了解决这个问题, setState 提供了一个接受“updater”函数的重载:
  function handleClick() {
    increment();
    increment();
    increment();
  }
  const [count, setCount] = useState(0);

  function increment() {
    setCount(c => c + 1);
  }
 // setState 提供了一个接受“updater”函数的重载:
// React would put the updater functions in a queue, and later run them in sequence, 
// resulting in a re-render with count set to 3.
  function handleClick() {
    increment();
    increment();
    increment();
  }

react 在渲染过程中不应该有可以看到的副作用。

自定义hook允许共享共同的状态逻辑,但是不会共享状态。每次调用hook都会声明其独立的状态。

0
Subscribe to my newsletter

Read articles from Eddie Qiao directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

Eddie Qiao
Eddie Qiao