React(Key)

key适用于Virtual DOM树新旧情形如下时

<div>
<TodoItem text="one" />
<TodoItem text="two" />
</div>

<div>
<TodoItem text="zero" />
<TodoItem text="one" />
<TodoItem text="two" />
</div>

我们只是前插了一个TodoItem 节点,但如果没有key,<TodoItem text="one" />
<TodoItem text="two" />都会被卸载,然后<TodoItem text="zero" />,<TodoItem text="one" />,<TodoItem text="two" />会被加载,这会造成DOM树更新成本的剧增。

之所以出现上述这种更新方案,是因为react在判断两个新旧节点不同时所依据的"标识"是各节点位置。上述情形中,新旧节点位置不同,react自然会认为新旧节点不同。

而按照我们的理想状态,应该让<TodoItem text="one" />,<TodoItem text="two" />不被卸载,仅仅只是<TodoItem text="zero" />被加载,这就需要各个节点增加一个新标识,这个标识应该不随节点位置的变化而变化。这个标识,就被我们称为"key"。

  • 采用"key"的解决方案

<div>
<TodoItem key={1} text="one" />
<TodoItem key={2} text="two" />
</div>

<div>
<TodoItem key={0} text="zero" />
<TodoItem key={1} text="one" />
<TodoItem key={2} text="two" />
</div>
···

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • react有一个特殊属性key 应用场景根据数组动态创造,不确定数量,顺序的子节点时使用需要对某一组件的更新操作强...
    mengxr阅读 3,907评论 0 1
  • 参考文章:深度剖析:如何实现一个Virtual DOM 算法 作者:戴嘉华React中一个没人能解释清楚的问题——...
    waka阅读 11,211评论 0 21
  • It's a common pattern in React to wrap a component in an ...
    jplyue阅读 8,519评论 0 2
  • 你的名字叫四月雪,你只是觉得很有意境很漂亮,可是有一天你突然发现真的活成了四月雪。 刚刚进入四月的时候,你是很抗拒...
    北尘邀月阅读 3,690评论 0 1
  • 看着半夜的指针滴答滴答的走动,忽然心情有些沉重。 以书催眠,那张伴随我8年的书签悄然滑落。看着书签,上面还有你潇洒...
    云逗阅读 3,921评论 0 0

友情链接更多精彩内容