Reactjs 为什么React需要另一个渲染来保证状态更新?

Reactjs 为什么React需要另一个渲染来保证状态更新?,reactjs,Reactjs,考虑以下组件 const Component = () =>{ const [state, setState] = useState(null) const onClick = () => setState('foo') console.log(state) return <button onClick={onClick}> Change </button> } const组件=()=>{ cons

考虑以下
组件

const Component = () =>{
    const [state, setState] = useState(null)

    const onClick = () => setState('foo')        

    console.log(state)

    return <button onClick={onClick}> Change </button>   
}
const组件=()=>{
const[state,setState]=useState(null)
const onClick=()=>setState('foo')
console.log(状态)
找零
}

  • 在按下按钮之前,只需打印
    null
  • 第一次按下按钮时,控制台prints
    foo
  • 第二次按钮按下End
    console
    print
    foo
  • 第三次前进
    控制台
    不打印任何内容
我知道,
console
不会打印任何内容,因为我正在调用
setState
传递与当前状态相同的值,并且React是。这部分我很清楚。我的问题是关于以下断言

请注意,React可能仍然需要再次渲染该特定组件 在救援之前。这不应该是一个问题,因为反应不会 不必要地“深入”树中。如果你做的很昂贵 渲染时,可以使用UseMoom优化计算

为什么这个额外的渲染是必要的?我的意思是,不是
对象。自从第二次单击后,
是否返回
false

内部useState是一个, 钩子使用一个变更队列来更新


在查看代码后,这是一种memoizedState未在队列中完全处理的情况,因为没有使用钩子useMoom的精细控制,这里已经询问并回答了这一问题,但没有解释,很遗憾,是的。我还没有找到答案,但src代码的注释“TODO:不确定这是否是所需的语义,但这是我们为gDSFP所做的。我不记得为什么。”Roflenteresting角度视图