Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

关于 key 有什么作用,可以省略吗? #55

Open
fikyair opened this issue Nov 18, 2021 · 2 comments
Open

关于 key 有什么作用,可以省略吗? #55

fikyair opened this issue Nov 18, 2021 · 2 comments

Comments

@fikyair
Copy link

fikyair commented Nov 18, 2021

【文中也没有提到到底该不该省略,省略与不省略的区别是什么。】
期待更新~

@thomas-void0
Copy link
Contributor

元素key属性的作用是用于判断元素是新创建的还是被移动的元素,从而减少不必要的元素渲染。

@7kms
Copy link
Owner

7kms commented Feb 10, 2022

重新整理了一下哈, key的作用那篇写的比较草, 现在优化了一下.

  1. key的作用就是服务于diff算法, 是节点是否可以复用的首要判定条件.
  2. 如果省略了key, 内部会默认使用null, 在列表节点有排序需求的情况下, 会造成性能损耗.

在多节点的情况下

除非是静态列表渲染, 没有更新动作, 可以省略key.

一般在列表需要二次渲染更新的情况下:

  • 加上key只有好处, 没有坏处.
  • 省略key轻则性能损耗, 严重就会造成状态混乱的bug

单节点情况

和多节点原理一致, 如果省略了key且在内部使用了state, 二次更新时也有可能造成状态混乱

归根到底, 需要更新的组件省略key不可以, 静态的(永不更新的)组件就可以省略

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants