何时使用挂钩重新渲染的反应组件?
让我们假设组件:
- 用
useState
管理状态 - 从其父母那里接收
props
在以下事件之后,重新渲染会直接发生,而在这些时间点仅发生?
- 组件接收新的
props
-
state
已更新
相关问题
让我们假设该组件具有多个useState
表达式,并且用户交互使多个状态更新。
组件会多次重新渲染,一次每state
值更改,还是将这些相关更改批量为一个单个重新渲染?
一个组件在以下情况下将重新渲染,因为它不能实现shipComponentUpdate class组件,或者使用react.memo for function
- 组件接收新道具
- 状态已更新
- 上下文值已更新(如果组件使用usecontext侦听上下文更改)
- 由于上述任何原因而导致的父组件重新租赁
让我们假设该组件具有多种usestate表达式和用户 互动会导致多个状态更新。
将组件重新渲染多次,一次每个状态值 更改,或者它将这些相关更改将 重新渲染?
useState
不会将更新的值与以前的值合并,而是执行批处理,例如setState
,因此如果一起完成多个状态更新,则进行一个渲染。
在此主题上找到了这篇不错的文章。如果有人需要快速阅读,我将添加摘要。
是什么原因导致React中的渲染?
状态修改
组件在操纵状态时重新呈现,这样简单。因此,当您修改组件的状态时,它倾向于重新呈现新状态值。
通过道具
如果父组件触发了rerrender,所有子组件也将启用,通常只有在组件正在消耗某些道具或经过的道具进行修改时,您只希望特定的子零件才能重新读取器,但这不是情况,是否要消耗道具,修改道具,如果父母触发了渲染。
使用上下文API
修改也是传递给上下文的值的状态时,整个子组件树将被恢复。同样,孩子组件是否消耗上下文数据都没关系,它仍然会恢复。重读者取决于传递给提供商的值,但仍然,所有组件树都将被恢复。
传递参考
在对象,数组和函数比较的情况下,基于引用,即确切的内存位置,因此,它们的比较即使它们看起来相等的收益率是错误的,在React Object中。IS方法用于比较不同的值。<<<<<<<<<<<<<<<<<<
示例:
{}==={} //false
[]===[] //false
{a: 5}==={a: 5} //false
[1,2,3]===[1,2,3] //false
(将先前状态与新状态进行比较时,它返回false,因为它们没有相同的参考。仅值是相同的)