79254162

Date: 2024-12-05 10:03:38
Score: 0.5
Natty:
Report link

This is a simple demo of React setState and render,shows how React merge updates.

let batchTaskCount = 0;
function startRender() {
  batchTaskCount--;
  if (batchTaskCount === 0) {
    console.log('render');
  }
}
function setState() {
  batchTaskCount++;
  Promise.resolve().then(() => {
    startRender();
  });
}
function handleClick1() {
  setState();
  Promise.resolve().then(() => {
    setState();
  });
}
function handleClick2() {
  Promise.resolve().then(() => {
    setState();
  });
  setState();
}

handleClick1 render twice, handleClick2 render once.

setState will put a render task into the microTask queue.

When render task runs, it will check if there are any other render tasks that have not been merged.

In handleClick1, setState2 put a render task into the microTask queue after the render task of setState1, so it will render twice.

Reasons:
  • Long answer (-0.5):
  • Has code block (-0.5):
  • Self-answer (0.5):
  • Low reputation (1):
Posted by: Zachary Zhou